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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }