提交 d534f4a8 编写于 作者: D David Barbet

Address feedback + fix liveshare dll load

上级 4037e5f4
......@@ -29,20 +29,20 @@ public LanguageServerProtocol([ImportMany] IEnumerable<Lazy<IRequestHandler, IRe
private static ImmutableDictionary<string, Lazy<IRequestHandler, IRequestHandlerMetadata>> CreateMethodToHandlerMap(IEnumerable<Lazy<IRequestHandler, IRequestHandlerMetadata>> requestHandlers)
{
var requestHandlerDictionary = new Dictionary<string, Lazy<IRequestHandler, IRequestHandlerMetadata>>();
var requestHandlerDictionary = ImmutableDictionary.CreateBuilder<string, Lazy<IRequestHandler, IRequestHandlerMetadata>>();
foreach (var lazyHandler in requestHandlers)
{
requestHandlerDictionary.Add(lazyHandler.Metadata.MethodName, lazyHandler);
}
return requestHandlerDictionary.ToImmutableDictionary();
return requestHandlerDictionary.ToImmutable();
}
private async Task<ResponseType> ExecuteRequestAsync<RequestType, ResponseType>(string methodName, Solution solution, RequestType request,
private Task<ResponseType> ExecuteRequestAsync<RequestType, ResponseType>(string methodName, Solution solution, RequestType request,
LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken)
{
var handler = (IRequestHandler<RequestType, ResponseType>)_requestHandlers[methodName].Value;
return await handler.HandleRequestAsync(solution, request, clientCapabilities, cancellationToken).ConfigureAwait(false);
return handler.HandleRequestAsync(solution, request, clientCapabilities, cancellationToken);
}
/// <summary>
......@@ -53,11 +53,8 @@ public LanguageServerProtocol([ImportMany] IEnumerable<Lazy<IRequestHandler, IRe
/// <param name="request">the request document symbol location.</param>
/// <param name="cancellationToken">a cancellation token.</param>
/// <returns>the location(s) of the implementations of the symbol.</returns>
public async Task<object> FindImplementationsAsync(Solution solution, LSP.TextDocumentPositionParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken)
{
return await ExecuteRequestAsync<LSP.TextDocumentPositionParams, object>(LSP.Methods.TextDocumentImplementationName, solution, request, clientCapabilities, cancellationToken)
.ConfigureAwait(false);
}
public Task<object> FindImplementationsAsync(Solution solution, LSP.TextDocumentPositionParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken)
=> ExecuteRequestAsync<LSP.TextDocumentPositionParams, object>(LSP.Methods.TextDocumentImplementationName, solution, request, clientCapabilities, cancellationToken);
/// <summary>
/// Answers a format document request to format the entire document.
......@@ -67,11 +64,8 @@ public async Task<object> FindImplementationsAsync(Solution solution, LSP.TextDo
/// <param name="request">the request document and formatting options.</param>
/// <param name="cancellationToken">a cancellation token.</param>
/// <returns>the text edits describing the document modifications.</returns>
public async Task<LSP.TextEdit[]> FormatDocumentAsync(Solution solution, LSP.DocumentFormattingParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken)
{
return await ExecuteRequestAsync<LSP.DocumentFormattingParams, LSP.TextEdit[]>(LSP.Methods.TextDocumentFormattingName, solution, request, clientCapabilities, cancellationToken)
.ConfigureAwait(false);
}
public Task<LSP.TextEdit[]> FormatDocumentAsync(Solution solution, LSP.DocumentFormattingParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken)
=> ExecuteRequestAsync<LSP.DocumentFormattingParams, LSP.TextEdit[]>(LSP.Methods.TextDocumentFormattingName, solution, request, clientCapabilities, cancellationToken);
/// <summary>
/// Answers a format document on type request to format parts of the document during typing.
......@@ -81,11 +75,8 @@ public async Task<LSP.TextEdit[]> FormatDocumentAsync(Solution solution, LSP.Doc
/// <param name="request">the request document, formatting options, and typing information.</param>
/// <param name="cancellationToken">a cancellation token.</param>
/// <returns>the text edits describing the document modifications.</returns>
public async Task<LSP.TextEdit[]> FormatDocumentOnTypeAsync(Solution solution, LSP.DocumentOnTypeFormattingParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken)
{
return await ExecuteRequestAsync<LSP.DocumentOnTypeFormattingParams, LSP.TextEdit[]>(LSP.Methods.TextDocumentOnTypeFormattingName, solution, request, clientCapabilities, cancellationToken)
.ConfigureAwait(false);
}
public Task<LSP.TextEdit[]> FormatDocumentOnTypeAsync(Solution solution, LSP.DocumentOnTypeFormattingParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken)
=> ExecuteRequestAsync<LSP.DocumentOnTypeFormattingParams, LSP.TextEdit[]>(LSP.Methods.TextDocumentOnTypeFormattingName, solution, request, clientCapabilities, cancellationToken);
/// <summary>
/// Answers a format document range request to format a specific range in the document.
......@@ -95,11 +86,8 @@ public async Task<LSP.TextEdit[]> FormatDocumentOnTypeAsync(Solution solution, L
/// <param name="request">the request document, formatting options, and range to format.</param>
/// <param name="cancellationToken">a cancellation token.</param>
/// <returns>the text edits describing the document modifications.</returns>
public async Task<LSP.TextEdit[]> FormatDocumentRangeAsync(Solution solution, LSP.DocumentRangeFormattingParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken)
{
return await ExecuteRequestAsync<LSP.DocumentRangeFormattingParams, LSP.TextEdit[]>(LSP.Methods.TextDocumentRangeFormattingName, solution, request, clientCapabilities, cancellationToken)
.ConfigureAwait(false);
}
public Task<LSP.TextEdit[]> FormatDocumentRangeAsync(Solution solution, LSP.DocumentRangeFormattingParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken)
=> ExecuteRequestAsync<LSP.DocumentRangeFormattingParams, LSP.TextEdit[]>(LSP.Methods.TextDocumentRangeFormattingName, solution, request, clientCapabilities, cancellationToken);
/// <summary>
/// Answers a code action request by returning the code actions for the document and range.
......@@ -109,11 +97,8 @@ public async Task<LSP.TextEdit[]> FormatDocumentRangeAsync(Solution solution, LS
/// <param name="request">the document and range to get code actions for.</param>
/// <param name="cancellationToken">a cancellation token.</param>
/// <returns>a list of commands representing code actions.</returns>
public async Task<LSP.Command[]> GetCodeActionsAsync(Solution solution, LSP.CodeActionParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken)
{
return await ExecuteRequestAsync<LSP.CodeActionParams, LSP.Command[]>(LSP.Methods.TextDocumentCodeActionName, solution, request, clientCapabilities, cancellationToken)
.ConfigureAwait(false);
}
public Task<LSP.Command[]> GetCodeActionsAsync(Solution solution, LSP.CodeActionParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken)
=> ExecuteRequestAsync<LSP.CodeActionParams, LSP.Command[]>(LSP.Methods.TextDocumentCodeActionName, solution, request, clientCapabilities, cancellationToken);
/// <summary>
/// Answers a completion request by returning the valid completions at the location.
......@@ -123,11 +108,8 @@ public async Task<LSP.Command[]> GetCodeActionsAsync(Solution solution, LSP.Code
/// <param name="request">the document position and completion context.</param>
/// <param name="cancellationToken">a cancellation token.</param>
/// <returns>a list of completions.</returns>
public async Task<object> GetCompletionsAsync(Solution solution, LSP.CompletionParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken)
{
return await ExecuteRequestAsync<LSP.CompletionParams, object>(LSP.Methods.TextDocumentCompletionName, solution, request, clientCapabilities, cancellationToken)
.ConfigureAwait(false);
}
public Task<object> GetCompletionsAsync(Solution solution, LSP.CompletionParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken)
=> ExecuteRequestAsync<LSP.CompletionParams, object>(LSP.Methods.TextDocumentCompletionName, solution, request, clientCapabilities, cancellationToken);
/// <summary>
/// Answers a document highlights request by returning the highlights for a given document location.
......@@ -137,11 +119,8 @@ public async Task<object> GetCompletionsAsync(Solution solution, LSP.CompletionP
/// <param name="request">the request document location.</param>
/// <param name="cancellationToken">a cancellation token.</param>
/// <returns>the highlights in the document for the given document location.</returns>
public async Task<LSP.DocumentHighlight[]> GetDocumentHighlightAsync(Solution solution, LSP.TextDocumentPositionParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken)
{
return await ExecuteRequestAsync<LSP.TextDocumentPositionParams, LSP.DocumentHighlight[]>(LSP.Methods.TextDocumentDocumentHighlightName, solution, request, clientCapabilities, cancellationToken)
.ConfigureAwait(false);
}
public Task<LSP.DocumentHighlight[]> GetDocumentHighlightAsync(Solution solution, LSP.TextDocumentPositionParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken)
=> ExecuteRequestAsync<LSP.TextDocumentPositionParams, LSP.DocumentHighlight[]>(LSP.Methods.TextDocumentDocumentHighlightName, solution, request, clientCapabilities, cancellationToken);
/// <summary>
/// Answers a document symbols request by returning a list of symbols in the document.
......@@ -151,11 +130,8 @@ public async Task<LSP.DocumentHighlight[]> GetDocumentHighlightAsync(Solution so
/// <param name="request">the document to get symbols from.</param>
/// <param name="cancellationToken">a cancellation token.</param>
/// <returns>a list of symbols in the document.</returns>
public async Task<object[]> GetDocumentSymbolsAsync(Solution solution, LSP.DocumentSymbolParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken)
{
return await ExecuteRequestAsync<LSP.DocumentSymbolParams, object[]>(LSP.Methods.TextDocumentDocumentSymbolName, solution, request, clientCapabilities, cancellationToken)
.ConfigureAwait(false);
}
public Task<object[]> GetDocumentSymbolsAsync(Solution solution, LSP.DocumentSymbolParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken)
=> ExecuteRequestAsync<LSP.DocumentSymbolParams, object[]>(LSP.Methods.TextDocumentDocumentSymbolName, solution, request, clientCapabilities, cancellationToken);
/// <summary>
/// Answers a folding range request by returning all folding ranges in a given document.
......@@ -165,11 +141,8 @@ public async Task<object[]> GetDocumentSymbolsAsync(Solution solution, LSP.Docum
/// <param name="request">the request document.</param>
/// <param name="cancellationToken">a cancellation token.</param>
/// <returns>a list of folding ranges in the document.</returns>
public async Task<LSP.FoldingRange[]> GetFoldingRangeAsync(Solution solution, LSP.FoldingRangeParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken)
{
return await ExecuteRequestAsync<LSP.FoldingRangeParams, LSP.FoldingRange[]>(LSP.Methods.TextDocumentFoldingRangeName, solution, request, clientCapabilities, cancellationToken)
.ConfigureAwait(false);
}
public Task<LSP.FoldingRange[]> GetFoldingRangeAsync(Solution solution, LSP.FoldingRangeParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken)
=> ExecuteRequestAsync<LSP.FoldingRangeParams, LSP.FoldingRange[]>(LSP.Methods.TextDocumentFoldingRangeName, solution, request, clientCapabilities, cancellationToken);
/// <summary>
/// Answers a Hover request by returning the quick info at the requested location.
......@@ -179,11 +152,8 @@ public async Task<LSP.FoldingRange[]> GetFoldingRangeAsync(Solution solution, LS
/// <param name="request">the hover requesst.</param>
/// <param name="cancellationToken">a cancellation token.</param>
/// <returns>the Hover using MarkupContent.</returns>
public async Task<LSP.Hover> GetHoverAsync(Solution solution, LSP.TextDocumentPositionParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken)
{
return await ExecuteRequestAsync<LSP.TextDocumentPositionParams, LSP.Hover>(LSP.Methods.TextDocumentHoverName, solution, request, clientCapabilities, cancellationToken)
.ConfigureAwait(false);
}
public Task<LSP.Hover> GetHoverAsync(Solution solution, LSP.TextDocumentPositionParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken)
=> ExecuteRequestAsync<LSP.TextDocumentPositionParams, LSP.Hover>(LSP.Methods.TextDocumentHoverName, solution, request, clientCapabilities, cancellationToken);
/// <summary>
/// Answers a signature help request to get signature information at a given cursor position.
......@@ -193,11 +163,8 @@ public async Task<LSP.Hover> GetHoverAsync(Solution solution, LSP.TextDocumentPo
/// <param name="request">the request document position.</param>
/// <param name="cancellationToken">a cancellation token.</param>
/// <returns>the signature help at a given location.</returns>
public async Task<LSP.SignatureHelp> GetSignatureHelpAsync(Solution solution, LSP.TextDocumentPositionParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken)
{
return await ExecuteRequestAsync<LSP.TextDocumentPositionParams, LSP.SignatureHelp>(LSP.Methods.TextDocumentSignatureHelpName, solution, request, clientCapabilities, cancellationToken)
.ConfigureAwait(false);
}
public Task<LSP.SignatureHelp> GetSignatureHelpAsync(Solution solution, LSP.TextDocumentPositionParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken)
=> ExecuteRequestAsync<LSP.TextDocumentPositionParams, LSP.SignatureHelp>(LSP.Methods.TextDocumentSignatureHelpName, solution, request, clientCapabilities, cancellationToken);
/// <summary>
/// Answers a workspace symbols request by providing a list of symbols found in a given workspace.
......@@ -207,11 +174,8 @@ public async Task<LSP.SignatureHelp> GetSignatureHelpAsync(Solution solution, LS
/// <param name="request">the workspace request with the query to invoke.</param>
/// <param name="cancellationToken">a cancellation token.</param>
/// <returns>a list of symbols in the workspace.</returns>
public async Task<LSP.SymbolInformation[]> GetWorkspaceSymbolsAsync(Solution solution, LSP.WorkspaceSymbolParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken)
{
return await ExecuteRequestAsync<LSP.WorkspaceSymbolParams, LSP.SymbolInformation[]>(LSP.Methods.WorkspaceSymbolName, solution, request, clientCapabilities, cancellationToken)
.ConfigureAwait(false);
}
public Task<LSP.SymbolInformation[]> GetWorkspaceSymbolsAsync(Solution solution, LSP.WorkspaceSymbolParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken)
=> ExecuteRequestAsync<LSP.WorkspaceSymbolParams, LSP.SymbolInformation[]>(LSP.Methods.WorkspaceSymbolName, solution, request, clientCapabilities, cancellationToken);
/// <summary>
/// Answers a goto definition request by returning the location for a given symbol definition.
......@@ -221,11 +185,8 @@ public async Task<LSP.SymbolInformation[]> GetWorkspaceSymbolsAsync(Solution sol
/// <param name="request">the document position of the symbol to go to.</param>
/// <param name="cancellationToken">a cancellation token.</param>
/// <returns>the location of a given symbol.</returns>
public async Task<LSP.Location[]> GoToDefinitionAsync(Solution solution, LSP.TextDocumentPositionParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken)
{
return await ExecuteRequestAsync<LSP.TextDocumentPositionParams, LSP.Location[]>(LSP.Methods.TextDocumentDefinitionName, solution, request, clientCapabilities, cancellationToken)
.ConfigureAwait(false);
}
public Task<LSP.Location[]> GoToDefinitionAsync(Solution solution, LSP.TextDocumentPositionParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken)
=> ExecuteRequestAsync<LSP.TextDocumentPositionParams, LSP.Location[]>(LSP.Methods.TextDocumentDefinitionName, solution, request, clientCapabilities, cancellationToken);
/// <summary>
/// Answers a goto type definition request by returning the location of a given type definition.
......@@ -235,11 +196,8 @@ public async Task<LSP.Location[]> GoToDefinitionAsync(Solution solution, LSP.Tex
/// <param name="request">the document position of the type to go to.</param>
/// <param name="cancellationToken">a cancellation token.</param>
/// <returns>the location of a type definition.</returns>
public async Task<LSP.Location[]> GoToTypeDefinitionAsync(Solution solution, LSP.TextDocumentPositionParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken)
{
return await ExecuteRequestAsync<LSP.TextDocumentPositionParams, LSP.Location[]>(LSP.Methods.TextDocumentTypeDefinitionName, solution, request, clientCapabilities, cancellationToken)
.ConfigureAwait(false);
}
public Task<LSP.Location[]> GoToTypeDefinitionAsync(Solution solution, LSP.TextDocumentPositionParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken)
=> ExecuteRequestAsync<LSP.TextDocumentPositionParams, LSP.Location[]>(LSP.Methods.TextDocumentTypeDefinitionName, solution, request, clientCapabilities, cancellationToken);
/// <summary>
/// Answers an initialize request by returning the server capabilities.
......@@ -249,11 +207,8 @@ public async Task<LSP.Location[]> GoToTypeDefinitionAsync(Solution solution, LSP
/// <param name="request">the initialize parameters.</param>
/// <param name="cancellationToken">a cancellation token.</param>
/// <returns>the server cababilities.</returns>
public async Task<LSP.InitializeResult> InitializeAsync(Solution solution, LSP.InitializeParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken)
{
return await ExecuteRequestAsync<LSP.InitializeParams, LSP.InitializeResult>(LSP.Methods.InitializeName, solution, request, clientCapabilities, cancellationToken)
.ConfigureAwait(false);
}
public Task<LSP.InitializeResult> InitializeAsync(Solution solution, LSP.InitializeParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken)
=> ExecuteRequestAsync<LSP.InitializeParams, LSP.InitializeResult>(LSP.Methods.InitializeName, solution, request, clientCapabilities, cancellationToken);
/// <summary>
/// Answers a request to resolve a completion item.
......@@ -263,10 +218,7 @@ public async Task<LSP.InitializeResult> InitializeAsync(Solution solution, LSP.I
/// <param name="request">the completion item to resolve.</param>
/// <param name="cancellationToken">a cancellation token.</param>
/// <returns>a resolved completion item.</returns>
public async Task<LSP.CompletionItem> ResolveCompletionItemAsync(Solution solution, LSP.CompletionItem request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken)
{
return await ExecuteRequestAsync<LSP.CompletionItem, LSP.CompletionItem>(LSP.Methods.TextDocumentCompletionResolveName, solution, request, clientCapabilities, cancellationToken)
.ConfigureAwait(false);
}
public Task<LSP.CompletionItem> ResolveCompletionItemAsync(Solution solution, LSP.CompletionItem request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken)
=> ExecuteRequestAsync<LSP.CompletionItem, LSP.CompletionItem>(LSP.Methods.TextDocumentCompletionResolveName, solution, request, clientCapabilities, cancellationToken);
}
}
......@@ -23,7 +23,8 @@ internal class ClassificationsHandler : ILspRequestHandler<ClassificationParams,
{
public async Task<ClassificationSpan[]> HandleAsync(ClassificationParams request, RequestContext<Solution> requestContext, CancellationToken cancellationToken)
{
var document = requestContext.Context.GetDocumentFromURI(request.TextDocument.Uri);
var actualDocumentURI = requestContext.ProtocolConverter.FromProtocolUri(request.TextDocument.Uri);
var document = requestContext.Context.GetDocumentFromURI(actualDocumentURI);
var classificationService = document?.Project.LanguageServices.GetService<IClassificationService>();
if (document == null || classificationService == null)
......
......@@ -7,6 +7,7 @@
using System.Threading.Tasks;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Diagnostics;
using Microsoft.CodeAnalysis.ErrorReporting;
using Microsoft.CodeAnalysis.LanguageServer;
using Microsoft.VisualStudio.LanguageServices.LiveShare.CustomProtocol;
using Microsoft.VisualStudio.LiveShare.LanguageServices;
......@@ -54,9 +55,8 @@ private async void DiagnosticService_DiagnosticsUpdated(object sender, Diagnosti
await (NotifyAsync?.InvokeAsync(this, eventArgs)).ConfigureAwait(false);
}
}
catch (Exception ex)
catch (Exception ex) when (FatalError.ReportWithoutCrash(ex))
{
// TODO - Replace trace
}
}
......
......@@ -6,6 +6,7 @@
<RootNamespace>Microsoft.VisualStudio.LanguageServices.LiveShare</RootNamespace>
<AssemblyName>Microsoft.VisualStudio.LanguageServices.LiveShare</AssemblyName>
<TargetFramework>net472</TargetFramework>
<CreateVsixContainer>false</CreateVsixContainer>
<IsPackable>true</IsPackable>
<PackageDescription>
A private package for the liveshare team to grant access to LSP implementations.
......
......@@ -43,7 +43,6 @@ public async Task<object> HandleAsync(LSP.ExecuteCommandParams request, RequestC
if (request.Command == RunCodeActionCommandName)
{
var runRequest = ((JToken)request.Arguments.Single()).ToObject<RunCodeActionParams>();
var codeActions = await GetCodeActionsAsync(solution,
runRequest.TextDocument.Uri,
runRequest.Range,
......
......@@ -16,21 +16,21 @@ namespace Microsoft.VisualStudio.LanguageServices.LiveShare
/// </summary>
internal abstract class AbstractLiveShareHandlerShim<RequestType, ResponseType> : ILspRequestHandler<RequestType, ResponseType, Solution>
{
private readonly IRequestHandler<RequestType, ResponseType> _requestHandler;
private readonly Lazy<IRequestHandler, IRequestHandlerMetadata> _lazyRequestHandler;
public AbstractLiveShareHandlerShim(IEnumerable<Lazy<IRequestHandler, IRequestHandlerMetadata>> requestHandlers, string methodName)
{
_requestHandler = GetRequestHandler(requestHandlers, methodName);
_lazyRequestHandler = GetRequestHandler(requestHandlers, methodName);
}
public virtual Task<ResponseType> HandleAsync(RequestType param, RequestContext<Solution> requestContext, CancellationToken cancellationToken)
{
return _requestHandler.HandleRequestAsync(requestContext.Context, param, requestContext.ClientCapabilities, cancellationToken);
return ((IRequestHandler<RequestType, ResponseType>)_lazyRequestHandler.Value).HandleRequestAsync(requestContext.Context, param, requestContext.ClientCapabilities, cancellationToken);
}
protected IRequestHandler<RequestType, ResponseType> GetRequestHandler(IEnumerable<Lazy<IRequestHandler, IRequestHandlerMetadata>> requestHandlers, string methodName)
protected Lazy<IRequestHandler, IRequestHandlerMetadata> GetRequestHandler(IEnumerable<Lazy<IRequestHandler, IRequestHandlerMetadata>> requestHandlers, string methodName)
{
return (IRequestHandler<RequestType, ResponseType>)requestHandlers.First(handler => handler.Metadata.MethodName == methodName).Value;
return requestHandlers.First(handler => handler.Metadata.MethodName == methodName);
}
}
}
......@@ -3,9 +3,6 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.LanguageServer.Handler;
using Microsoft.VisualStudio.LanguageServer.Protocol;
using Microsoft.VisualStudio.LiveShare.LanguageServices;
......@@ -20,10 +17,5 @@ public DocumentSymbolsHandlerShim([ImportMany] IEnumerable<Lazy<IRequestHandler,
: base(requestHandlers, Methods.TextDocumentDocumentSymbolName)
{
}
public override Task<object[]> HandleAsync(DocumentSymbolParams param, RequestContext<Solution> requestContext, CancellationToken cancellationToken)
{
return base.HandleAsync(param, requestContext, cancellationToken);
}
}
}
......@@ -57,6 +57,9 @@
[assembly: ProvideCodeBase(CodeBase = @"$PackageFolder$\System.Composition.TypedParts.dll")]
[assembly: ProvideCodeBase(CodeBase = @"$PackageFolder$\Humanizer.dll")]
[assembly: ProvideRoslynBindingRedirection("Microsoft.VisualStudio.LanguageServer.Protocol.dll")]
[assembly: ProvideRoslynBindingRedirection("Microsoft.VisualStudio.LanguageServer.Protocol.Extensions.dll")]
[assembly: ProvideCodeBase(CodeBase = @"$PackageFolder$\ICSharpCode.Decompiler.dll")]
[assembly: ProvideBindingRedirection(
......
......@@ -242,6 +242,8 @@
<NuGetPackageToIncludeInVsix Include="System.Composition.Convention" />
<NuGetPackageToIncludeInVsix Include="System.Composition.Hosting" />
<NuGetPackageToIncludeInVsix Include="ICSharpCode.Decompiler" />
<NuGetPackageToIncludeInVsix Include="Microsoft.VisualStudio.LanguageServer.Protocol" />
<NuGetPackageToIncludeInVsix Include="Microsoft.VisualStudio.LanguageServer.Protocol.Extensions" />
</ItemGroup>
<ItemGroup>
<VSIXSourceItem Include="$(NuGetPackageRoot)\SQLitePCLRaw.bundle_green\1.1.2\lib\net45\SQLitePCLRaw.batteries_green.dll" />
......
......@@ -60,6 +60,8 @@
<Asset Type="Microsoft.VisualStudio.Analyzer" d:Source="Project" d:ProjectName="XamlVisualStudio" Path="|XamlVisualStudio|" />
<Asset Type="Microsoft.VisualStudio.MefComponent" Path="Microsoft.CodeAnalysis.ExternalAccess.Debugger.dll" />
<Asset Type="Microsoft.VisualStudio.MefComponent" Path="Microsoft.CodeAnalysis.ExternalAccess.UnitTesting.dll" />
<Asset Type="Microsoft.VisualStudio.MefComponent" Path="Microsoft.VisualStudio.LanguageServices.LiveShare.dll" />
<Asset Type="Microsoft.VisualStudio.MefComponent" Path="Microsoft.CodeAnalysis.LanguageServer.Protocol.dll" />
</Assets>
<Prerequisites>
<Prerequisite Id="Microsoft.VisualStudio.Component.CoreEditor" Version="[15.0,17.0)" DisplayName="Visual Studio core editor" />
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册