-
Notifications
You must be signed in to change notification settings - Fork 105
/
Copy pathProgram.cs
133 lines (115 loc) · 3.95 KB
/
Program.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
using System;
using System.Diagnostics;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using OmniSharp.Extensions.LanguageServer;
using OmniSharp.Extensions.LanguageServer.Abstractions;
using OmniSharp.Extensions.LanguageServer.Capabilities.Client;
using OmniSharp.Extensions.LanguageServer.Capabilities.Server;
using OmniSharp.Extensions.LanguageServer.Models;
using OmniSharp.Extensions.LanguageServer.Protocol;
using OmniSharp.Extensions.LanguageServer.Protocol.Document;
namespace SampleServer
{
class Program
{
static void Main(string[] args)
{
MainAsync(args).Wait();
}
static async Task MainAsync(string[] args)
{
//while (!System.Diagnostics.Debugger.IsAttached)
//{
// await Task.Delay(100);
//}
var server = new LanguageServer(Console.OpenStandardInput(), Console.OpenStandardOutput(), new LoggerFactory());
server.AddHandler(new TextDocumentHandler(server));
await server.Initialize();
await server.WasShutDown;
}
}
class TextDocumentHandler : ITextDocumentSyncHandler
{
private readonly ILanguageServer _router;
private readonly DocumentSelector _documentSelector = new DocumentSelector(
new DocumentFilter()
{
Pattern = "**/*.csproj",
Language = "xml"
}
);
private SynchronizationCapability _capability;
public TextDocumentHandler(ILanguageServer router)
{
_router = router;
}
public TextDocumentSyncOptions Options { get; } = new TextDocumentSyncOptions()
{
WillSaveWaitUntil = false,
WillSave = true,
Change = TextDocumentSyncKind.Full,
Save = new SaveOptions()
{
IncludeText = true
},
OpenClose = true
};
public Task Handle(DidChangeTextDocumentParams notification)
{
_router.LogMessage(new LogMessageParams()
{
Type = MessageType.Log,
Message = "Hello World!!!!"
});
return Task.CompletedTask;
}
TextDocumentChangeRegistrationOptions IRegistration<TextDocumentChangeRegistrationOptions>.GetRegistrationOptions()
{
return new TextDocumentChangeRegistrationOptions()
{
DocumentSelector = _documentSelector,
SyncKind = Options.Change
};
}
public void SetCapability(SynchronizationCapability capability)
{
_capability = capability;
}
public async Task Handle(DidOpenTextDocumentParams notification)
{
_router.LogMessage(new LogMessageParams()
{
Type = MessageType.Log,
Message = "Hello World!!!!"
});
}
TextDocumentRegistrationOptions IRegistration<TextDocumentRegistrationOptions>.GetRegistrationOptions()
{
return new TextDocumentRegistrationOptions()
{
DocumentSelector = _documentSelector,
};
}
public Task Handle(DidCloseTextDocumentParams notification)
{
return Task.CompletedTask;
}
public Task Handle(DidSaveTextDocumentParams notification)
{
return Task.CompletedTask;
}
TextDocumentSaveRegistrationOptions IRegistration<TextDocumentSaveRegistrationOptions>.GetRegistrationOptions()
{
return new TextDocumentSaveRegistrationOptions()
{
DocumentSelector = _documentSelector,
IncludeText = Options.Save.IncludeText
};
}
public TextDocumentAttributes GetTextDocumentAttributes(Uri uri)
{
return new TextDocumentAttributes(uri, "csharp");
}
}
}