diff --git a/src/Features/LanguageServer/Protocol/LanguageServerProtocol.cs b/src/Features/LanguageServer/Protocol/LanguageServerProtocol.cs index b823810251cea2f9c8f780db3fac6ab3fdc03543..c9f83b4f654d072c472dadd3bba710b0a885adfb 100644 --- a/src/Features/LanguageServer/Protocol/LanguageServerProtocol.cs +++ b/src/Features/LanguageServer/Protocol/LanguageServerProtocol.cs @@ -29,20 +29,20 @@ public LanguageServerProtocol([ImportMany] IEnumerable> CreateMethodToHandlerMap(IEnumerable> requestHandlers) { - var requestHandlerDictionary = new Dictionary>(); + var requestHandlerDictionary = ImmutableDictionary.CreateBuilder>(); foreach (var lazyHandler in requestHandlers) { requestHandlerDictionary.Add(lazyHandler.Metadata.MethodName, lazyHandler); } - return requestHandlerDictionary.ToImmutableDictionary(); + return requestHandlerDictionary.ToImmutable(); } - private async Task ExecuteRequestAsync(string methodName, Solution solution, RequestType request, + private Task ExecuteRequestAsync(string methodName, Solution solution, RequestType request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken) { var handler = (IRequestHandler)_requestHandlers[methodName].Value; - return await handler.HandleRequestAsync(solution, request, clientCapabilities, cancellationToken).ConfigureAwait(false); + return handler.HandleRequestAsync(solution, request, clientCapabilities, cancellationToken); } /// @@ -53,11 +53,8 @@ public LanguageServerProtocol([ImportMany] IEnumerablethe request document symbol location. /// a cancellation token. /// the location(s) of the implementations of the symbol. - public async Task FindImplementationsAsync(Solution solution, LSP.TextDocumentPositionParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken) - { - return await ExecuteRequestAsync(LSP.Methods.TextDocumentImplementationName, solution, request, clientCapabilities, cancellationToken) - .ConfigureAwait(false); - } + public Task FindImplementationsAsync(Solution solution, LSP.TextDocumentPositionParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken) + => ExecuteRequestAsync(LSP.Methods.TextDocumentImplementationName, solution, request, clientCapabilities, cancellationToken); /// /// Answers a format document request to format the entire document. @@ -67,11 +64,8 @@ public async Task FindImplementationsAsync(Solution solution, LSP.TextDo /// the request document and formatting options. /// a cancellation token. /// the text edits describing the document modifications. - public async Task FormatDocumentAsync(Solution solution, LSP.DocumentFormattingParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken) - { - return await ExecuteRequestAsync(LSP.Methods.TextDocumentFormattingName, solution, request, clientCapabilities, cancellationToken) - .ConfigureAwait(false); - } + public Task FormatDocumentAsync(Solution solution, LSP.DocumentFormattingParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken) + => ExecuteRequestAsync(LSP.Methods.TextDocumentFormattingName, solution, request, clientCapabilities, cancellationToken); /// /// Answers a format document on type request to format parts of the document during typing. @@ -81,11 +75,8 @@ public async Task FormatDocumentAsync(Solution solution, LSP.Doc /// the request document, formatting options, and typing information. /// a cancellation token. /// the text edits describing the document modifications. - public async Task FormatDocumentOnTypeAsync(Solution solution, LSP.DocumentOnTypeFormattingParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken) - { - return await ExecuteRequestAsync(LSP.Methods.TextDocumentOnTypeFormattingName, solution, request, clientCapabilities, cancellationToken) - .ConfigureAwait(false); - } + public Task FormatDocumentOnTypeAsync(Solution solution, LSP.DocumentOnTypeFormattingParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken) + => ExecuteRequestAsync(LSP.Methods.TextDocumentOnTypeFormattingName, solution, request, clientCapabilities, cancellationToken); /// /// Answers a format document range request to format a specific range in the document. @@ -95,11 +86,8 @@ public async Task FormatDocumentOnTypeAsync(Solution solution, L /// the request document, formatting options, and range to format. /// a cancellation token. /// the text edits describing the document modifications. - public async Task FormatDocumentRangeAsync(Solution solution, LSP.DocumentRangeFormattingParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken) - { - return await ExecuteRequestAsync(LSP.Methods.TextDocumentRangeFormattingName, solution, request, clientCapabilities, cancellationToken) - .ConfigureAwait(false); - } + public Task FormatDocumentRangeAsync(Solution solution, LSP.DocumentRangeFormattingParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken) + => ExecuteRequestAsync(LSP.Methods.TextDocumentRangeFormattingName, solution, request, clientCapabilities, cancellationToken); /// /// Answers a code action request by returning the code actions for the document and range. @@ -109,11 +97,8 @@ public async Task FormatDocumentRangeAsync(Solution solution, LS /// the document and range to get code actions for. /// a cancellation token. /// a list of commands representing code actions. - public async Task GetCodeActionsAsync(Solution solution, LSP.CodeActionParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken) - { - return await ExecuteRequestAsync(LSP.Methods.TextDocumentCodeActionName, solution, request, clientCapabilities, cancellationToken) - .ConfigureAwait(false); - } + public Task GetCodeActionsAsync(Solution solution, LSP.CodeActionParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken) + => ExecuteRequestAsync(LSP.Methods.TextDocumentCodeActionName, solution, request, clientCapabilities, cancellationToken); /// /// Answers a completion request by returning the valid completions at the location. @@ -123,11 +108,8 @@ public async Task GetCodeActionsAsync(Solution solution, LSP.Code /// the document position and completion context. /// a cancellation token. /// a list of completions. - public async Task GetCompletionsAsync(Solution solution, LSP.CompletionParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken) - { - return await ExecuteRequestAsync(LSP.Methods.TextDocumentCompletionName, solution, request, clientCapabilities, cancellationToken) - .ConfigureAwait(false); - } + public Task GetCompletionsAsync(Solution solution, LSP.CompletionParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken) + => ExecuteRequestAsync(LSP.Methods.TextDocumentCompletionName, solution, request, clientCapabilities, cancellationToken); /// /// Answers a document highlights request by returning the highlights for a given document location. @@ -137,11 +119,8 @@ public async Task GetCompletionsAsync(Solution solution, LSP.CompletionP /// the request document location. /// a cancellation token. /// the highlights in the document for the given document location. - public async Task GetDocumentHighlightAsync(Solution solution, LSP.TextDocumentPositionParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken) - { - return await ExecuteRequestAsync(LSP.Methods.TextDocumentDocumentHighlightName, solution, request, clientCapabilities, cancellationToken) - .ConfigureAwait(false); - } + public Task GetDocumentHighlightAsync(Solution solution, LSP.TextDocumentPositionParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken) + => ExecuteRequestAsync(LSP.Methods.TextDocumentDocumentHighlightName, solution, request, clientCapabilities, cancellationToken); /// /// Answers a document symbols request by returning a list of symbols in the document. @@ -151,11 +130,8 @@ public async Task GetDocumentHighlightAsync(Solution so /// the document to get symbols from. /// a cancellation token. /// a list of symbols in the document. - public async Task GetDocumentSymbolsAsync(Solution solution, LSP.DocumentSymbolParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken) - { - return await ExecuteRequestAsync(LSP.Methods.TextDocumentDocumentSymbolName, solution, request, clientCapabilities, cancellationToken) - .ConfigureAwait(false); - } + public Task GetDocumentSymbolsAsync(Solution solution, LSP.DocumentSymbolParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken) + => ExecuteRequestAsync(LSP.Methods.TextDocumentDocumentSymbolName, solution, request, clientCapabilities, cancellationToken); /// /// Answers a folding range request by returning all folding ranges in a given document. @@ -165,11 +141,8 @@ public async Task GetDocumentSymbolsAsync(Solution solution, LSP.Docum /// the request document. /// a cancellation token. /// a list of folding ranges in the document. - public async Task GetFoldingRangeAsync(Solution solution, LSP.FoldingRangeParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken) - { - return await ExecuteRequestAsync(LSP.Methods.TextDocumentFoldingRangeName, solution, request, clientCapabilities, cancellationToken) - .ConfigureAwait(false); - } + public Task GetFoldingRangeAsync(Solution solution, LSP.FoldingRangeParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken) + => ExecuteRequestAsync(LSP.Methods.TextDocumentFoldingRangeName, solution, request, clientCapabilities, cancellationToken); /// /// Answers a Hover request by returning the quick info at the requested location. @@ -179,11 +152,8 @@ public async Task GetFoldingRangeAsync(Solution solution, LS /// the hover requesst. /// a cancellation token. /// the Hover using MarkupContent. - public async Task GetHoverAsync(Solution solution, LSP.TextDocumentPositionParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken) - { - return await ExecuteRequestAsync(LSP.Methods.TextDocumentHoverName, solution, request, clientCapabilities, cancellationToken) - .ConfigureAwait(false); - } + public Task GetHoverAsync(Solution solution, LSP.TextDocumentPositionParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken) + => ExecuteRequestAsync(LSP.Methods.TextDocumentHoverName, solution, request, clientCapabilities, cancellationToken); /// /// Answers a signature help request to get signature information at a given cursor position. @@ -193,11 +163,8 @@ public async Task GetHoverAsync(Solution solution, LSP.TextDocumentPo /// the request document position. /// a cancellation token. /// the signature help at a given location. - public async Task GetSignatureHelpAsync(Solution solution, LSP.TextDocumentPositionParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken) - { - return await ExecuteRequestAsync(LSP.Methods.TextDocumentSignatureHelpName, solution, request, clientCapabilities, cancellationToken) - .ConfigureAwait(false); - } + public Task GetSignatureHelpAsync(Solution solution, LSP.TextDocumentPositionParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken) + => ExecuteRequestAsync(LSP.Methods.TextDocumentSignatureHelpName, solution, request, clientCapabilities, cancellationToken); /// /// Answers a workspace symbols request by providing a list of symbols found in a given workspace. @@ -207,11 +174,8 @@ public async Task GetSignatureHelpAsync(Solution solution, LS /// the workspace request with the query to invoke. /// a cancellation token. /// a list of symbols in the workspace. - public async Task GetWorkspaceSymbolsAsync(Solution solution, LSP.WorkspaceSymbolParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken) - { - return await ExecuteRequestAsync(LSP.Methods.WorkspaceSymbolName, solution, request, clientCapabilities, cancellationToken) - .ConfigureAwait(false); - } + public Task GetWorkspaceSymbolsAsync(Solution solution, LSP.WorkspaceSymbolParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken) + => ExecuteRequestAsync(LSP.Methods.WorkspaceSymbolName, solution, request, clientCapabilities, cancellationToken); /// /// Answers a goto definition request by returning the location for a given symbol definition. @@ -221,11 +185,8 @@ public async Task GetWorkspaceSymbolsAsync(Solution sol /// the document position of the symbol to go to. /// a cancellation token. /// the location of a given symbol. - public async Task GoToDefinitionAsync(Solution solution, LSP.TextDocumentPositionParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken) - { - return await ExecuteRequestAsync(LSP.Methods.TextDocumentDefinitionName, solution, request, clientCapabilities, cancellationToken) - .ConfigureAwait(false); - } + public Task GoToDefinitionAsync(Solution solution, LSP.TextDocumentPositionParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken) + => ExecuteRequestAsync(LSP.Methods.TextDocumentDefinitionName, solution, request, clientCapabilities, cancellationToken); /// /// Answers a goto type definition request by returning the location of a given type definition. @@ -235,11 +196,8 @@ public async Task GoToDefinitionAsync(Solution solution, LSP.Tex /// the document position of the type to go to. /// a cancellation token. /// the location of a type definition. - public async Task GoToTypeDefinitionAsync(Solution solution, LSP.TextDocumentPositionParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken) - { - return await ExecuteRequestAsync(LSP.Methods.TextDocumentTypeDefinitionName, solution, request, clientCapabilities, cancellationToken) - .ConfigureAwait(false); - } + public Task GoToTypeDefinitionAsync(Solution solution, LSP.TextDocumentPositionParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken) + => ExecuteRequestAsync(LSP.Methods.TextDocumentTypeDefinitionName, solution, request, clientCapabilities, cancellationToken); /// /// Answers an initialize request by returning the server capabilities. @@ -249,11 +207,8 @@ public async Task GoToTypeDefinitionAsync(Solution solution, LSP /// the initialize parameters. /// a cancellation token. /// the server cababilities. - public async Task InitializeAsync(Solution solution, LSP.InitializeParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken) - { - return await ExecuteRequestAsync(LSP.Methods.InitializeName, solution, request, clientCapabilities, cancellationToken) - .ConfigureAwait(false); - } + public Task InitializeAsync(Solution solution, LSP.InitializeParams request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken) + => ExecuteRequestAsync(LSP.Methods.InitializeName, solution, request, clientCapabilities, cancellationToken); /// /// Answers a request to resolve a completion item. @@ -263,10 +218,7 @@ public async Task InitializeAsync(Solution solution, LSP.I /// the completion item to resolve. /// a cancellation token. /// a resolved completion item. - public async Task ResolveCompletionItemAsync(Solution solution, LSP.CompletionItem request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken) - { - return await ExecuteRequestAsync(LSP.Methods.TextDocumentCompletionResolveName, solution, request, clientCapabilities, cancellationToken) - .ConfigureAwait(false); - } + public Task ResolveCompletionItemAsync(Solution solution, LSP.CompletionItem request, LSP.ClientCapabilities clientCapabilities, CancellationToken cancellationToken) + => ExecuteRequestAsync(LSP.Methods.TextDocumentCompletionResolveName, solution, request, clientCapabilities, cancellationToken); } } diff --git a/src/VisualStudio/LiveShare/Impl/ClassificationsHandler.cs b/src/VisualStudio/LiveShare/Impl/ClassificationsHandler.cs index c91962e58b698100a229c04ff9f2993dd78a4eb7..c076b11d029c8e329ffabff8bc14f36b35547599 100644 --- a/src/VisualStudio/LiveShare/Impl/ClassificationsHandler.cs +++ b/src/VisualStudio/LiveShare/Impl/ClassificationsHandler.cs @@ -23,7 +23,8 @@ internal class ClassificationsHandler : ILspRequestHandler HandleAsync(ClassificationParams request, RequestContext 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(); if (document == null || classificationService == null) diff --git a/src/VisualStudio/LiveShare/Impl/DiagnosticHandler.cs b/src/VisualStudio/LiveShare/Impl/DiagnosticHandler.cs index 6b438a6333dbdc3652215dd3b3f9e24d54ec0daa..8b2f6504d35b1168d7f5d8c69851a4adf29aa81b 100644 --- a/src/VisualStudio/LiveShare/Impl/DiagnosticHandler.cs +++ b/src/VisualStudio/LiveShare/Impl/DiagnosticHandler.cs @@ -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 } } diff --git a/src/VisualStudio/LiveShare/Impl/Microsoft.VisualStudio.LanguageServices.LiveShare.csproj b/src/VisualStudio/LiveShare/Impl/Microsoft.VisualStudio.LanguageServices.LiveShare.csproj index 2f3d8cd224ea3c0b4832a617b8208e9c5d75d27e..94df564f4343340c85481144a7b88723063efae7 100644 --- a/src/VisualStudio/LiveShare/Impl/Microsoft.VisualStudio.LanguageServices.LiveShare.csproj +++ b/src/VisualStudio/LiveShare/Impl/Microsoft.VisualStudio.LanguageServices.LiveShare.csproj @@ -6,6 +6,7 @@ Microsoft.VisualStudio.LanguageServices.LiveShare Microsoft.VisualStudio.LanguageServices.LiveShare net472 + false true A private package for the liveshare team to grant access to LSP implementations. diff --git a/src/VisualStudio/LiveShare/Impl/RunCodeActionsHandler.cs b/src/VisualStudio/LiveShare/Impl/RunCodeActionsHandler.cs index d95d5158d99639af800b47543cecd21562caa869..01d7ec9131c4d212dfaaf3359d587e61a5151a41 100644 --- a/src/VisualStudio/LiveShare/Impl/RunCodeActionsHandler.cs +++ b/src/VisualStudio/LiveShare/Impl/RunCodeActionsHandler.cs @@ -43,7 +43,6 @@ public async Task HandleAsync(LSP.ExecuteCommandParams request, RequestC if (request.Command == RunCodeActionCommandName) { var runRequest = ((JToken)request.Arguments.Single()).ToObject(); - var codeActions = await GetCodeActionsAsync(solution, runRequest.TextDocument.Uri, runRequest.Range, diff --git a/src/VisualStudio/LiveShare/Impl/Shims/AbstractLiveShareHandlerShim.cs b/src/VisualStudio/LiveShare/Impl/Shims/AbstractLiveShareHandlerShim.cs index 10b7737c51b0d378743444478746b70de14f0abb..978b642fe7cdcdc4cda9fb67db69d115bdaba2c1 100644 --- a/src/VisualStudio/LiveShare/Impl/Shims/AbstractLiveShareHandlerShim.cs +++ b/src/VisualStudio/LiveShare/Impl/Shims/AbstractLiveShareHandlerShim.cs @@ -16,21 +16,21 @@ namespace Microsoft.VisualStudio.LanguageServices.LiveShare /// internal abstract class AbstractLiveShareHandlerShim : ILspRequestHandler { - private readonly IRequestHandler _requestHandler; + private readonly Lazy _lazyRequestHandler; public AbstractLiveShareHandlerShim(IEnumerable> requestHandlers, string methodName) { - _requestHandler = GetRequestHandler(requestHandlers, methodName); + _lazyRequestHandler = GetRequestHandler(requestHandlers, methodName); } public virtual Task HandleAsync(RequestType param, RequestContext requestContext, CancellationToken cancellationToken) { - return _requestHandler.HandleRequestAsync(requestContext.Context, param, requestContext.ClientCapabilities, cancellationToken); + return ((IRequestHandler)_lazyRequestHandler.Value).HandleRequestAsync(requestContext.Context, param, requestContext.ClientCapabilities, cancellationToken); } - protected IRequestHandler GetRequestHandler(IEnumerable> requestHandlers, string methodName) + protected Lazy GetRequestHandler(IEnumerable> requestHandlers, string methodName) { - return (IRequestHandler)requestHandlers.First(handler => handler.Metadata.MethodName == methodName).Value; + return requestHandlers.First(handler => handler.Metadata.MethodName == methodName); } } } diff --git a/src/VisualStudio/LiveShare/Impl/Shims/DocumentSymbolsHandlerShim.cs b/src/VisualStudio/LiveShare/Impl/Shims/DocumentSymbolsHandlerShim.cs index ce22b505c2f2ac7f4396ca6a96ac643ad8f32f28..6cd2c311ff0462035c15b8f56b974cef2aee4a93 100644 --- a/src/VisualStudio/LiveShare/Impl/Shims/DocumentSymbolsHandlerShim.cs +++ b/src/VisualStudio/LiveShare/Impl/Shims/DocumentSymbolsHandlerShim.cs @@ -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 HandleAsync(DocumentSymbolParams param, RequestContext requestContext, CancellationToken cancellationToken) - { - return base.HandleAsync(param, requestContext, cancellationToken); - } } } diff --git a/src/VisualStudio/Setup/AssemblyRedirects.cs b/src/VisualStudio/Setup/AssemblyRedirects.cs index c34440b129832c359c3b17de538d7adc14f3eddf..f7cfa17b4bb10d4cff5a24b5c6dc103e8329c478 100644 --- a/src/VisualStudio/Setup/AssemblyRedirects.cs +++ b/src/VisualStudio/Setup/AssemblyRedirects.cs @@ -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( diff --git a/src/VisualStudio/Setup/Roslyn.VisualStudio.Setup.csproj b/src/VisualStudio/Setup/Roslyn.VisualStudio.Setup.csproj index 302db4a4591c83e16f8350e83f9955a0763927eb..d5c87e3c15716539e73753a2aaf01a6140d41d9f 100644 --- a/src/VisualStudio/Setup/Roslyn.VisualStudio.Setup.csproj +++ b/src/VisualStudio/Setup/Roslyn.VisualStudio.Setup.csproj @@ -242,6 +242,8 @@ + + diff --git a/src/VisualStudio/Setup/source.extension.vsixmanifest b/src/VisualStudio/Setup/source.extension.vsixmanifest index 7896383e7be3a820d2dea65dcecf03cc123d51bf..b1cff1dc28c2a13f641e6d3bfc4bcf6c0f96fcac 100644 --- a/src/VisualStudio/Setup/source.extension.vsixmanifest +++ b/src/VisualStudio/Setup/source.extension.vsixmanifest @@ -60,6 +60,8 @@ + +