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