示例#1
0
        public override ServerCapabilities GetCapabilities(ClientCapabilities clientCapabilities)
        {
            var serverCapabilities = new VSServerCapabilities();

            // If the LSP editor feature flag is enabled advertise support for LSP features here so they are available locally and remote.
            var isLspEditorEnabled = Workspace.Services.GetRequiredService <IExperimentationService>().IsExperimentEnabled(VisualStudioWorkspaceContextService.LspEditorFeatureFlagName);

            if (isLspEditorEnabled)
            {
                serverCapabilities = (VSServerCapabilities)_defaultCapabilitiesProvider.GetCapabilities(clientCapabilities);
            }
            else
            {
                // Even if the flag is off, we want to include text sync capabilities.
                serverCapabilities.TextDocumentSync = new TextDocumentSyncOptions
                {
                    Change    = TextDocumentSyncKind.Incremental,
                    OpenClose = true,
                };
            }

            serverCapabilities.SupportsDiagnosticRequests = Workspace.IsPullDiagnostics(InternalDiagnosticsOptions.NormalDiagnosticMode);

            // This capability is always enabled as we provide cntrl+Q VS search only via LSP in ever scenario.
            serverCapabilities.WorkspaceSymbolProvider = true;
            // This capability prevents NavigateTo (cntrl+,) from using LSP symbol search when the server also supports WorkspaceSymbolProvider.
            // Since WorkspaceSymbolProvider=true always to allow cntrl+Q VS search to function, we set DisableGoToWorkspaceSymbols=true
            // when not running the experimental LSP editor.  This ensures NavigateTo uses the existing editor APIs.
            // However, when the experimental LSP editor is enabled we want LSP to power NavigateTo, so we set DisableGoToWorkspaceSymbols=false.
            serverCapabilities.DisableGoToWorkspaceSymbols = !isLspEditorEnabled;

            return(serverCapabilities);
        }
示例#2
0
        private static VSServerCapabilities GetVSServerCapabilities()
        {
            var vsServerCapabilities = new VSServerCapabilities();

            vsServerCapabilities.CodeActionsResolveProvider = true;
            vsServerCapabilities.OnAutoInsertProvider       = new DocumentOnAutoInsertOptions {
                TriggerCharacters = new[] { "'", "/", "\n" }
            };
            vsServerCapabilities.DocumentHighlightProvider = true;
            vsServerCapabilities.ProjectContextProvider    = true;
            vsServerCapabilities.SemanticTokensOptions     = new SemanticTokensOptions
            {
                DocumentProvider = new SemanticTokensDocumentProviderOptions {
                    Edits = true
                },
                RangeProvider = true,
                Legend        = new SemanticTokensLegend
                {
                    TokenTypes     = SemanticTokenTypes.AllTypes.Concat(SemanticTokensHelpers.RoslynCustomTokenTypes).ToArray(),
                    TokenModifiers = new string[] { SemanticTokenModifiers.Static }
                }
            };

            // Diagnostic requests are only supported from PullDiagnosticsInProcLanguageClient.
            vsServerCapabilities.SupportsDiagnosticRequests = false;
            return(vsServerCapabilities);
        }
示例#3
0
        public void Resolve_NotPresent_ReturnsFalse(string methodName)
        {
            // Arrange
            var emptyCapabilities   = new VSServerCapabilities();
            var jobjectCapabilities = JObject.FromObject(emptyCapabilities);
            var filter = Resolver.Resolve(methodName);

            // Act
            var result = filter(jobjectCapabilities);

            // Assert
            Assert.False(result);
        }
示例#4
0
        public void Resolve_UnknownMethod_ReturnsTrue()
        {
            // Arrange
            var methodName          = "razor/languageQuery";
            var emptyCapabilities   = new VSServerCapabilities();
            var jobjectCapabilities = JObject.FromObject(emptyCapabilities);
            var filter = Resolver.Resolve(methodName);

            // Act
            var result = filter(jobjectCapabilities);

            // Assert
            Assert.True(result);
        }
示例#5
0
        public void Resolve_PullDiagnostics_ReturnsTrue()
        {
            // Arrange
            var methodName   = MSLSPMethods.DocumentPullDiagnosticName;
            var capabilities = new VSServerCapabilities()
            {
                SupportsDiagnosticRequests = true,
            };
            var jobjectCapabilities = JObject.FromObject(capabilities);
            var filter = Resolver.Resolve(methodName);

            // Act
            var result = filter(jobjectCapabilities);

            // Assert
            Assert.True(result);
        }
示例#6
0
        public void Resolve_OnAutoInsert_ReturnsTrue()
        {
            // Arrange
            var methodName   = MSLSPMethods.OnAutoInsertName;
            var capabilities = new VSServerCapabilities()
            {
                OnAutoInsertProvider = new DocumentOnAutoInsertOptions(),
            };
            var jobjectCapabilities = JObject.FromObject(capabilities);
            var filter = Resolver.Resolve(methodName);

            // Act
            var result = filter(jobjectCapabilities);

            // Assert
            Assert.True(result);
        }
示例#7
0
        public void Resolve_CodeActionResolve_ReturnsTrue()
        {
            // Arrange
            var methodName   = MSLSPMethods.TextDocumentCodeActionResolveName;
            var capabilities = new VSServerCapabilities()
            {
                CodeActionsResolveProvider = true,
            };
            var jobjectCapabilities = JObject.FromObject(capabilities);
            var filter = Resolver.Resolve(methodName);

            // Act
            var result = filter(jobjectCapabilities);

            // Assert
            Assert.True(result);
        }
示例#8
0
        public void Resolve_ProjectContext_ReturnsTrue()
        {
            // Arrange
            var methodName   = MSLSPMethods.ProjectContextsName;
            var capabilities = new VSServerCapabilities()
            {
                ProjectContextProvider = true,
            };
            var jobjectCapabilities = JObject.FromObject(capabilities);
            var filter = Resolver.Resolve(methodName);

            // Act
            var result = filter(jobjectCapabilities);

            // Assert
            Assert.True(result);
        }
示例#9
0
        public void Resolve_MSReference_ReturnsTrue()
        {
            // Arrange
            var methodName   = MSLSPMethods.DocumentReferencesName;
            var capabilities = new VSServerCapabilities()
            {
                MSReferencesProvider = true,
            };
            var jobjectCapabilities = JObject.FromObject(capabilities);
            var filter = Resolver.Resolve(methodName);

            // Act
            var result = filter(jobjectCapabilities);

            // Assert
            Assert.True(result);
        }