diff --git a/src/VisualStudio/LiveShare/Impl/Shims/TypeScriptHandlerShims.cs b/src/VisualStudio/LiveShare/Impl/Shims/TypeScriptHandlerShims.cs index 09db34dea7657e560ae16ea20d8ed477a2582f25..4e089b8cfbef0e476f18b8e7a3763bb62db4f812 100644 --- a/src/VisualStudio/LiveShare/Impl/Shims/TypeScriptHandlerShims.cs +++ b/src/VisualStudio/LiveShare/Impl/Shims/TypeScriptHandlerShims.cs @@ -63,8 +63,7 @@ public Task HandleAsync(object input, // However, this works through liveshare on the LSP client, but not the LSP extension. // see https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1107682 for tracking. var request = ((JObject)input).ToObject(s_jsonSerializer); - var textDocument = GetTextDocumentIdentifier(request); - var context = SolutionProvider.CreateRequestContext(textDocument, requestContext.GetClientCapabilities()); + var context = this.CreateRequestContext(request, SolutionProvider, requestContext.GetClientCapabilities()); return base.HandleRequestAsync(request, context, cancellationToken); } } @@ -80,8 +79,7 @@ public TypeScriptCompletionResolverHandlerShim(ILspSolutionProvider solutionProv public Task HandleAsync(LanguageServer.Protocol.CompletionItem param, RequestContext requestContext, CancellationToken cancellationToken) { - var textDocument = GetTextDocumentIdentifier(param); - var context = SolutionProvider.CreateRequestContext(textDocument, requestContext.GetClientCapabilities()); + var context = this.CreateRequestContext(param, SolutionProvider, requestContext.GetClientCapabilities()); return base.HandleRequestAsync(param, context, cancellationToken); } } @@ -97,8 +95,7 @@ public TypeScriptDocumentHighlightHandlerShim(ILspSolutionProvider solutionProvi public Task HandleAsync(TextDocumentPositionParams param, RequestContext requestContext, CancellationToken cancellationToken) { - var textDocument = GetTextDocumentIdentifier(param); - var context = SolutionProvider.CreateRequestContext(textDocument, requestContext.GetClientCapabilities()); + var context = this.CreateRequestContext(param, SolutionProvider, requestContext.GetClientCapabilities()); return base.HandleRequestAsync(param, context, cancellationToken); } } @@ -121,8 +118,7 @@ public async Task HandleAsync(DocumentSymbolParams param, R clientCapabilities.TextDocument.DocumentSymbol.HierarchicalDocumentSymbolSupport = false; } - var textDocument = GetTextDocumentIdentifier(param); - var context = SolutionProvider.CreateRequestContext(textDocument, clientCapabilities); + var context = this.CreateRequestContext(param, SolutionProvider, clientCapabilities); var response = await base.HandleRequestAsync(param, context, cancellationToken).ConfigureAwait(false); // Since hierarchicalSupport will never be true, it is safe to cast the response to SymbolInformation[] @@ -142,8 +138,7 @@ public TypeScriptFormatDocumentHandlerShim(ILspSolutionProvider solutionProvider public Task HandleAsync(DocumentFormattingParams request, RequestContext requestContext, CancellationToken cancellationToken) { - var textDocument = GetTextDocumentIdentifier(request); - var context = SolutionProvider.CreateRequestContext(textDocument, requestContext.GetClientCapabilities()); + var context = this.CreateRequestContext(request, SolutionProvider, requestContext.GetClientCapabilities()); return base.HandleRequestAsync(request, context, cancellationToken); } @@ -167,8 +162,7 @@ public TypeScriptFormatDocumentRangeHandlerShim(ILspSolutionProvider solutionPro public Task HandleAsync(DocumentRangeFormattingParams request, RequestContext requestContext, CancellationToken cancellationToken) { - var textDocument = GetTextDocumentIdentifier(request); - var context = SolutionProvider.CreateRequestContext(textDocument, requestContext.GetClientCapabilities()); + var context = this.CreateRequestContext(request, SolutionProvider, requestContext.GetClientCapabilities()); return base.HandleRequestAsync(request, context, cancellationToken); } @@ -192,8 +186,7 @@ public TypeScriptFormatDocumentOnTypeHandlerShim(ILspSolutionProvider solutionPr public Task HandleAsync(DocumentOnTypeFormattingParams request, RequestContext requestContext, CancellationToken cancellationToken) { - var textDocument = GetTextDocumentIdentifier(request); - var context = SolutionProvider.CreateRequestContext(textDocument, requestContext.GetClientCapabilities()); + var context = this.CreateRequestContext(request, SolutionProvider, requestContext.GetClientCapabilities()); return base.HandleRequestAsync(request, context, cancellationToken); } @@ -224,8 +217,7 @@ public TypeScriptFindImplementationsHandlerShim(ILspSolutionProvider solutionPro public Task HandleAsync(TextDocumentPositionParams request, RequestContext requestContext, CancellationToken cancellationToken) { - var textDocument = GetTextDocumentIdentifier(request); - var context = SolutionProvider.CreateRequestContext(textDocument, requestContext.GetClientCapabilities()); + var context = this.CreateRequestContext(request, SolutionProvider, requestContext.GetClientCapabilities()); return base.HandleRequestAsync(request, context, cancellationToken); } @@ -252,7 +244,7 @@ internal class TypeScriptInitializeHandlerShim : InitializeHandler, ILspRequestH public async Task HandleAsync(InitializeParams param, RequestContext requestContext, CancellationToken cancellationToken) { - var context = _solutionProvider.CreateRequestContext(null, requestContext.GetClientCapabilities()); + var context = this.CreateRequestContext(param, _solutionProvider, requestContext.GetClientCapabilities()); var initializeResult = await base.HandleRequestAsync(param, context, cancellationToken).ConfigureAwait(false); initializeResult.Capabilities.Experimental = new RoslynExperimentalCapabilities { SyntacticLspProvider = true }; return initializeResult; @@ -271,8 +263,7 @@ internal class TypeScriptSignatureHelpHandlerShim : SignatureHelpHandler, ILspRe public Task HandleAsync(TextDocumentPositionParams param, RequestContext requestContext, CancellationToken cancellationToken) { - var textDocument = GetTextDocumentIdentifier(param); - var context = SolutionProvider.CreateRequestContext(textDocument, requestContext.GetClientCapabilities()); + var context = this.CreateRequestContext(param, SolutionProvider, requestContext.GetClientCapabilities()); return base.HandleRequestAsync(param, context, cancellationToken); } } @@ -288,8 +279,7 @@ public TypeScriptRenameHandlerShim(ILspSolutionProvider solutionProvider) : base public Task HandleAsync(RenameParams param, RequestContext requestContext, CancellationToken cancellationToken) { - var textDocument = GetTextDocumentIdentifier(param); - var context = SolutionProvider.CreateRequestContext(textDocument, requestContext.GetClientCapabilities()); + var context = this.CreateRequestContext(param, SolutionProvider, requestContext.GetClientCapabilities()); return base.HandleRequestAsync(param, context, cancellationToken); } } @@ -306,7 +296,7 @@ public TypeScriptWorkspaceSymbolsHandlerShim(ILspSolutionProvider solutionProvid [JsonRpcMethod(UseSingleObjectParameterDeserialization = true)] public Task HandleAsync(WorkspaceSymbolParams request, RequestContext requestContext, CancellationToken cancellationToken) { - var context = SolutionProvider.CreateRequestContext(null, requestContext.GetClientCapabilities()); + var context = this.CreateRequestContext(request, SolutionProvider, requestContext.GetClientCapabilities()); return base.HandleRequestAsync(request, context, cancellationToken); } } @@ -316,8 +306,10 @@ public Task HandleAsync(WorkspaceSymbolParams request, Requ /// internal static class Extensions { - public static LSP.RequestContext CreateRequestContext(this ILspSolutionProvider provider, TextDocumentIdentifier textDocument, ClientCapabilities clientCapabilities, string? clientName = null) + public static LSP.RequestContext CreateRequestContext(this IRequestHandler requestHandler, TRequest request, ILspSolutionProvider provider, ClientCapabilities clientCapabilities, string? clientName = null) { + var textDocument = requestHandler.GetTextDocumentIdentifier(request); + var (document, solution) = provider.GetDocumentAndSolution(textDocument, clientName); return new LSP.RequestContext(document, solution, null, clientCapabilities, clientName);