diff --git a/src/PowerShellEditorServices/Services/CodeLens/ReferencesCodeLensProvider.cs b/src/PowerShellEditorServices/Services/CodeLens/ReferencesCodeLensProvider.cs index c55613178..02cff641d 100644 --- a/src/PowerShellEditorServices/Services/CodeLens/ReferencesCodeLensProvider.cs +++ b/src/PowerShellEditorServices/Services/CodeLens/ReferencesCodeLensProvider.cs @@ -31,11 +31,13 @@ internal class ReferencesCodeLensProvider : ICodeLensProvider private readonly SymbolsService _symbolsService; private readonly WorkspaceService _workspaceService; + public static string Id => nameof(ReferencesCodeLensProvider); + /// /// Specifies a unique identifier for the feature provider, typically a /// fully-qualified name like "Microsoft.PowerShell.EditorServices.MyProvider" /// - public string ProviderId => nameof(ReferencesCodeLensProvider); + public string ProviderId => Id; /// /// Construct a new ReferencesCodeLensProvider for a given EditorSession. diff --git a/src/PowerShellEditorServices/Services/Symbols/SymbolsService.cs b/src/PowerShellEditorServices/Services/Symbols/SymbolsService.cs index 78e72f73d..29f3ceea3 100644 --- a/src/PowerShellEditorServices/Services/Symbols/SymbolsService.cs +++ b/src/PowerShellEditorServices/Services/Symbols/SymbolsService.cs @@ -16,6 +16,7 @@ using Microsoft.Extensions.Logging; using Microsoft.PowerShell.EditorServices.CodeLenses; using Microsoft.PowerShell.EditorServices.Logging; +using Microsoft.PowerShell.EditorServices.Services.Configuration; using Microsoft.PowerShell.EditorServices.Services.PowerShell; using Microsoft.PowerShell.EditorServices.Services.PowerShell.Runspace; using Microsoft.PowerShell.EditorServices.Services.PowerShell.Utility; @@ -66,17 +67,15 @@ public SymbolsService( _workspaceService = workspaceService; _codeLensProviders = new ConcurrentDictionary(); - ICodeLensProvider[] codeLensProviders = new ICodeLensProvider[] + if (configurationService.CurrentSettings.EnableReferencesCodeLens) { - new ReferencesCodeLensProvider(_workspaceService, this), - new PesterCodeLensProvider(configurationService) - }; - - foreach (ICodeLensProvider codeLensProvider in codeLensProviders) - { - _codeLensProviders.TryAdd(codeLensProvider.ProviderId, codeLensProvider); + ReferencesCodeLensProvider referencesProvider = new(_workspaceService, this); + _codeLensProviders.TryAdd(referencesProvider.ProviderId, referencesProvider); } + PesterCodeLensProvider pesterProvider = new(configurationService); + _codeLensProviders.TryAdd(pesterProvider.ProviderId, pesterProvider); + _documentSymbolProviders = new ConcurrentDictionary(); IDocumentSymbolProvider[] documentSymbolProviders = new IDocumentSymbolProvider[] { @@ -671,5 +670,21 @@ public static FunctionDefinitionAst GetFunctionDefinitionAtLine( return functionDefinitionAst as FunctionDefinitionAst; } + + internal void OnConfigurationUpdated(object _, LanguageServerSettings e) + { + if (e.EnableReferencesCodeLens) + { + if (_codeLensProviders.ContainsKey(ReferencesCodeLensProvider.Id)) + { + return; + } + + TryRegisterCodeLensProvider(new ReferencesCodeLensProvider(_workspaceService, this)); + return; + } + + DeregisterCodeLensProvider(ReferencesCodeLensProvider.Id); + } } } diff --git a/src/PowerShellEditorServices/Services/Workspace/Handlers/ConfigurationHandler.cs b/src/PowerShellEditorServices/Services/Workspace/Handlers/ConfigurationHandler.cs index ca0361a89..ea7214a0a 100644 --- a/src/PowerShellEditorServices/Services/Workspace/Handlers/ConfigurationHandler.cs +++ b/src/PowerShellEditorServices/Services/Workspace/Handlers/ConfigurationHandler.cs @@ -24,13 +24,13 @@ internal class PsesConfigurationHandler : DidChangeConfigurationHandlerBase private readonly WorkspaceService _workspaceService; private readonly ConfigurationService _configurationService; private readonly ILanguageServerFacade _languageServer; - public PsesConfigurationHandler( ILoggerFactory factory, WorkspaceService workspaceService, AnalysisService analysisService, ConfigurationService configurationService, - ILanguageServerFacade languageServer) + ILanguageServerFacade languageServer, + SymbolsService symbolsService) { _logger = factory.CreateLogger(); _workspaceService = workspaceService; @@ -38,6 +38,7 @@ public PsesConfigurationHandler( _languageServer = languageServer; ConfigurationUpdated += analysisService.OnConfigurationUpdated; + ConfigurationUpdated += symbolsService.OnConfigurationUpdated; } public override async Task Handle(DidChangeConfigurationParams request, CancellationToken cancellationToken) diff --git a/src/PowerShellEditorServices/Services/Workspace/LanguageServerSettings.cs b/src/PowerShellEditorServices/Services/Workspace/LanguageServerSettings.cs index 9f59d87dc..8f16ed43a 100644 --- a/src/PowerShellEditorServices/Services/Workspace/LanguageServerSettings.cs +++ b/src/PowerShellEditorServices/Services/Workspace/LanguageServerSettings.cs @@ -22,6 +22,7 @@ internal class LanguageServerSettings public CodeFoldingSettings CodeFolding { get; set; } public PesterSettings Pester { get; set; } public string Cwd { get; set; } + public bool EnableReferencesCodeLens { get; set; } = true; public LanguageServerSettings() { @@ -46,6 +47,7 @@ public void Update( CodeFolding.Update(settings.CodeFolding, logger); Pester.Update(settings.Pester, logger); Cwd = settings.Cwd; + EnableReferencesCodeLens = settings.EnableReferencesCodeLens; } } }