From 3b3b3c89669f32f520391552b449e52487c65661 Mon Sep 17 00:00:00 2001 From: Patrick Meinecke Date: Wed, 17 Aug 2022 16:27:06 -0400 Subject: [PATCH 1/2] Add setting to control references code lens --- .../CodeLens/ReferencesCodeLensProvider.cs | 4 ++- .../Services/Symbols/SymbolsService.cs | 31 ++++++++++++++----- .../Handlers/ConfigurationHandler.cs | 5 +-- .../Workspace/LanguageServerSettings.cs | 2 ++ 4 files changed, 31 insertions(+), 11 deletions(-) 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..35bbbf8af 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; } 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; } } } From e9451191eff40e71e449356659703f52c39dbf5e Mon Sep 17 00:00:00 2001 From: Andy Jordan <2226434+andschwa@users.noreply.github.com> Date: Tue, 30 Aug 2022 14:32:45 -0700 Subject: [PATCH 2/2] Set `EnableReferencesCodeLens` default to true Which, being the existing default behavior, fixes the tests. --- .../Services/Workspace/LanguageServerSettings.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PowerShellEditorServices/Services/Workspace/LanguageServerSettings.cs b/src/PowerShellEditorServices/Services/Workspace/LanguageServerSettings.cs index 35bbbf8af..8f16ed43a 100644 --- a/src/PowerShellEditorServices/Services/Workspace/LanguageServerSettings.cs +++ b/src/PowerShellEditorServices/Services/Workspace/LanguageServerSettings.cs @@ -22,7 +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; } + public bool EnableReferencesCodeLens { get; set; } = true; public LanguageServerSettings() {