Skip to content

Commit 3392ca5

Browse files
Fixed a few errors
1 parent 5cde9e0 commit 3392ca5

File tree

7 files changed

+45
-20
lines changed

7 files changed

+45
-20
lines changed

sample/SampleServer/Program.cs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ static void Main(string[] args)
1616

1717
static async Task MainAsync(string[] args)
1818
{
19-
//while (!System.Diagnostics.Debugger.IsAttached)
20-
//{
19+
// while (!System.Diagnostics.Debugger.IsAttached)
20+
// {
2121
// await Task.Delay(100);
22-
//}
22+
// }
2323

2424
var server = await LanguageServer.From(options =>
2525
options
@@ -28,10 +28,9 @@ static async Task MainAsync(string[] args)
2828
.WithLoggerFactory(new LoggerFactory())
2929
.AddDefaultLoggingProvider()
3030
.WithMinimumLogLevel(LogLevel.Trace)
31+
.WithHandler<TextDocumentHandler>()
3132
);
3233

33-
server.AddHandlers(new TextDocumentHandler(server));
34-
3534
await server.WaitForExit;
3635
}
3736
}

sample/SampleServer/TextDocumentHandler.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ namespace SampleServer
1414
{
1515
class TextDocumentHandler : ITextDocumentSyncHandler
1616
{
17-
private readonly ILanguageServer _router;
17+
private readonly OmniSharp.Extensions.LanguageServer.Protocol.Server.ILanguageServer _router;
1818

1919
private readonly DocumentSelector _documentSelector = new DocumentSelector(
2020
new DocumentFilter()
@@ -26,7 +26,7 @@ class TextDocumentHandler : ITextDocumentSyncHandler
2626

2727
private SynchronizationCapability _capability;
2828

29-
public TextDocumentHandler(ILanguageServer router)
29+
public TextDocumentHandler(OmniSharp.Extensions.LanguageServer.Protocol.Server.ILanguageServer router)
3030
{
3131
_router = router;
3232
}

src/JsonRpc/Server/Messages/InternalError.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,6 @@ public class InternalError : RpcError
44
{
55
public InternalError() : this(null) { }
66
public InternalError(object id) : base(id, new ErrorMessage(-32602, "Internal Error")) { }
7+
public InternalError(object id, string message) : base(id, new ErrorMessage(-32602, "Internal Error - " + message)) { }
78
}
89
}

src/Server/LanguageServer.cs

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ internal LanguageServer(
9494
services.AddLogging();
9595
_reciever = reciever;
9696
_serializer = serializer;
97+
_supportedCapabilities = new SupportedCapabilities();
9798
_collection = new HandlerCollection(_supportedCapabilities);
9899
_initializeDelegates = initializeDelegates;
99100
_initializedDelegates = initializedDelegates;
@@ -108,9 +109,13 @@ internal LanguageServer(
108109

109110
services.AddJsonRpcMediatR(assemblies);
110111
services.AddTransient<IHandlerMatcher, TextDocumentMatcher>();
112+
services.AddSingleton<Protocol.Server.ILanguageServer>(this);
113+
services.AddSingleton<ILanguageServer>(this);
111114
services.AddTransient<IHandlerMatcher, ExecuteCommandMatcher>();
112115
services.AddTransient<IHandlerMatcher, ResolveCommandMatcher>();
113116
services.AddSingleton<ILspRequestRouter, LspRequestRouter>();
117+
services.AddSingleton<IRequestRouter>(_ => _.GetRequiredService<ILspRequestRouter>());
118+
services.AddSingleton<IReciever, LspReciever>();
114119
services.AddSingleton<IResponseRouter, ResponseRouter>();
115120
services.AddTransient(typeof(IPipelineBehavior<,>), typeof(ResolveCommandPipeline<,>));
116121

@@ -206,8 +211,10 @@ private IDisposable RegisterHandlers(LspHandlerDescriptorDisposable handlerDispo
206211

207212
return new ImmutableDisposable(
208213
handlerDisposable,
209-
new Disposable(() => {
210-
Client.UnregisterCapability(new UnregistrationParams() {
214+
new Disposable(() =>
215+
{
216+
Client.UnregisterCapability(new UnregistrationParams()
217+
{
211218
Unregisterations = registrations.ToArray()
212219
}).ToObservable().Subscribe();
213220
}));
@@ -242,7 +249,8 @@ async Task<InitializeResult> IRequestHandler<InitializeParams, InitializeResult>
242249
);
243250
}
244251
}
245-
_supportedCapabilities = new SupportedCapabilities(supportedCapabilites);
252+
253+
_supportedCapabilities.Add(supportedCapabilites);
246254

247255
await Task.WhenAll(_initializeDelegates.Select(c => c(request)));
248256

@@ -256,7 +264,8 @@ async Task<InitializeResult> IRequestHandler<InitializeParams, InitializeResult>
256264

257265
var ccp = new ClientCapabilityProvider(_collection);
258266

259-
var serverCapabilities = new ServerCapabilities() {
267+
var serverCapabilities = new ServerCapabilities()
268+
{
260269
CodeActionProvider = ccp.HasStaticHandler(textDocumentCapabilities.CodeAction),
261270
CodeLensProvider = ccp.GetStaticOptions(textDocumentCapabilities.CodeLens).Get<ICodeLensOptions, CodeLensOptions>(CodeLensOptions.Of),
262271
CompletionProvider = ccp.GetStaticOptions(textDocumentCapabilities.Completion).Get<ICompletionOptions, CompletionOptions>(CompletionOptions.Of),
@@ -280,8 +289,10 @@ async Task<InitializeResult> IRequestHandler<InitializeParams, InitializeResult>
280289

281290
if (_collection.ContainsHandler(typeof(IDidChangeWorkspaceFoldersHandler)))
282291
{
283-
serverCapabilities.Workspace = new WorkspaceServerCapabilities() {
284-
WorkspaceFolders = new WorkspaceFolderOptions() {
292+
serverCapabilities.Workspace = new WorkspaceServerCapabilities()
293+
{
294+
WorkspaceFolders = new WorkspaceFolderOptions()
295+
{
285296
Supported = true,
286297
ChangeNotifications = Guid.NewGuid().ToString()
287298
}
@@ -290,6 +301,7 @@ async Task<InitializeResult> IRequestHandler<InitializeParams, InitializeResult>
290301

291302
var textDocumentSyncKind = _collection.ContainsHandler(typeof(IDidChangeTextDocumentHandler))
292303
? _collection
304+
.Select(x => x.Handler)
293305
.OfType<IDidChangeTextDocumentHandler>()
294306
.Where(x => x.Change != TextDocumentSyncKind.None)
295307
.Min(z => z.Change)
@@ -301,7 +313,8 @@ async Task<InitializeResult> IRequestHandler<InitializeParams, InitializeResult>
301313
}
302314
else
303315
{
304-
serverCapabilities.TextDocumentSync = new TextDocumentSyncOptions() {
316+
serverCapabilities.TextDocumentSync = new TextDocumentSyncOptions()
317+
{
305318
Change = textDocumentSyncKind,
306319
OpenClose = _collection.ContainsHandler(typeof(IDidOpenTextDocumentHandler)) || _collection.ContainsHandler(typeof(IDidCloseTextDocumentHandler)),
307320
Save = _collection.ContainsHandler(typeof(IDidSaveTextDocumentHandler)) ?
@@ -315,11 +328,12 @@ async Task<InitializeResult> IRequestHandler<InitializeParams, InitializeResult>
315328
// TODO: Need a call back here
316329
// serverCapabilities.Experimental;
317330

331+
_reciever.Initialized();
332+
318333
var result = ServerSettings = new InitializeResult() { Capabilities = serverCapabilities };
319334

320335
await Task.WhenAll(_initializedDelegates.Select(c => c(request, result)));
321336

322-
_reciever.Initialized();
323337

324338
// TODO:
325339
if (_clientVersion == ClientVersion.Lsp2)
@@ -429,10 +443,17 @@ class SupportedCapabilities : ISupportedCapabilities
429443
.GetTypeInfo()
430444
.GetMethod(nameof(SetCapabilityInner), BindingFlags.NonPublic | BindingFlags.Static);
431445

432-
private readonly IDictionary<Type, object> _supports;
433-
public SupportedCapabilities(IEnumerable<ISupports> supports)
446+
private readonly IDictionary<Type, object> _supports = new Dictionary<Type, object>();
447+
public SupportedCapabilities()
448+
{
449+
}
450+
451+
public void Add(IEnumerable<ISupports> supports)
434452
{
435-
_supports = supports.ToDictionary(x => x.ValueType, x => x.Value);
453+
foreach (var item in supports)
454+
{
455+
_supports.Add(item.ValueType, item.Value);
456+
}
436457
}
437458

438459
public bool AllowsDynamicRegistration(ILspHandlerDescriptor descriptor)

src/Server/LspReciever.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ public override (IEnumerable<Renor> results, bool hasResponse) GetRequests(JToke
3434
{
3535
newResults.Add(item);
3636
}
37+
else if (item.IsNotification && item.Notification.Method == GeneralNames.Exit)
38+
{
39+
newResults.Add(item);
40+
}
3741
}
3842

3943
return (newResults, hasResponse);

src/Server/LspRequestRouter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ public async Task<ErrorResponse> RouteRequest(IHandlerDescriptor descriptor, Req
187187
catch (Exception e)
188188
{
189189
_logger.LogCritical(Events.UnhandledRequest, e, "Failed to handle notification {Method}", request.Method);
190-
return new InternalError(id);
190+
return new InternalError(id, e.ToString());
191191
}
192192
finally
193193
{

vscode-testextension/src/extension.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export function activate(context: ExtensionContext) {
2525
// Otherwise the run options are used
2626
let serverOptions: ServerOptions = {
2727
run: { command: serverExe, args: ['D:\\Development\\Omnisharp\\csharp-language-server-protocol\\sample\\SampleServer\\bin\\Debug\\netcoreapp2.0\\win7-x64\\SampleServer.dll', '-lsp'] },
28-
debug: { command: serverExe, args: ['D:\\Development\\Omnisharp\\csharp-language-server-protocol\\sample\\SampleServerbin\\Debug\\netcoreapp2.0\\win7-x64\\SampleServer.dll', '-lsp'] }
28+
debug: { command: serverExe, args: ['D:\\Development\\Omnisharp\\csharp-language-server-protocol\\sample\\SampleServer\\bin\\Debug\\netcoreapp2.0\\win7-x64\\SampleServer.dll', '-lsp'] }
2929
}
3030

3131
// Options to control the language client

0 commit comments

Comments
 (0)