diff --git a/src/PowerShellEditorServices/Services/CodeLens/PesterCodeLensProvider.cs b/src/PowerShellEditorServices/Services/CodeLens/PesterCodeLensProvider.cs
index dd0ef0d1b..da67d3aaf 100644
--- a/src/PowerShellEditorServices/Services/CodeLens/PesterCodeLensProvider.cs
+++ b/src/PowerShellEditorServices/Services/CodeLens/PesterCodeLensProvider.cs
@@ -1,6 +1,6 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
-
+using System;
using System.Collections.Generic;
using Microsoft.PowerShell.EditorServices.Services;
using Microsoft.PowerShell.EditorServices.Services.Symbols;
@@ -101,6 +101,12 @@ private static CodeLens[] GetPesterLens(PesterSymbolReference pesterSymbol, Scri
/// All Pester CodeLenses for the given script file.
public CodeLens[] ProvideCodeLenses(ScriptFile scriptFile)
{
+ // Don't return anything if codelens setting is disabled
+ if (!this._configurationService.CurrentSettings.Pester.CodeLens)
+ {
+ return Array.Empty();
+ }
+
var lenses = new List();
foreach (SymbolReference symbol in _symbolProvider.ProvideDocumentSymbols(scriptFile))
{
diff --git a/src/PowerShellEditorServices/Services/Symbols/SymbolsService.cs b/src/PowerShellEditorServices/Services/Symbols/SymbolsService.cs
index bbbd24484..071945ca7 100644
--- a/src/PowerShellEditorServices/Services/Symbols/SymbolsService.cs
+++ b/src/PowerShellEditorServices/Services/Symbols/SymbolsService.cs
@@ -60,8 +60,9 @@ public SymbolsService(
var codeLensProviders = new ICodeLensProvider[]
{
new ReferencesCodeLensProvider(_workspaceService, this),
- new PesterCodeLensProvider(configurationService),
+ new PesterCodeLensProvider(configurationService)
};
+
foreach (ICodeLensProvider codeLensProvider in codeLensProviders)
{
_codeLensProviders.TryAdd(codeLensProvider.ProviderId, codeLensProvider);
diff --git a/src/PowerShellEditorServices/Services/Workspace/LanguageServerSettings.cs b/src/PowerShellEditorServices/Services/Workspace/LanguageServerSettings.cs
index cdd5069e9..ed4768a2e 100644
--- a/src/PowerShellEditorServices/Services/Workspace/LanguageServerSettings.cs
+++ b/src/PowerShellEditorServices/Services/Workspace/LanguageServerSettings.cs
@@ -56,7 +56,7 @@ public void Update(
logger);
this.CodeFormatting = new CodeFormattingSettings(settings.CodeFormatting);
this.CodeFolding.Update(settings.CodeFolding, logger);
- this.Pester = new PesterSettings(settings.Pester);
+ this.Pester.Update(settings.Pester, logger);
this.Cwd = settings.Cwd;
}
}
@@ -384,19 +384,39 @@ public void Update(
///
public class PesterSettings
{
- public PesterSettings()
- {
- }
-
- public PesterSettings(PesterSettings settings)
- {
- UseLegacyCodeLens = settings.UseLegacyCodeLens;
- }
+ ///
+ /// If specified, the lenses "run tests" and "debug tests" will appear above all Pester tests
+ ///
+ public bool CodeLens { get; set; } = true;
///
/// Whether integration features specific to Pester v5 are enabled
///
- public bool UseLegacyCodeLens { get; set; }
+ public bool UseLegacyCodeLens { get; set; } = false;
+
+ ///
+ /// Update these settings from another settings object
+ ///
+ public void Update(
+ PesterSettings settings,
+ ILogger logger)
+ {
+ if (settings is null) {
+ return;
+ }
+
+ if (this.CodeLens != settings.CodeLens)
+ {
+ this.CodeLens = settings.CodeLens;
+ logger.LogTrace(string.Format("Using Pester Code Lens - {0}", this.CodeLens));
+ }
+
+ if (this.UseLegacyCodeLens != settings.UseLegacyCodeLens)
+ {
+ this.UseLegacyCodeLens = settings.UseLegacyCodeLens;
+ logger.LogTrace(string.Format("Using Pester Legacy Code Lens - {0}", this.UseLegacyCodeLens));
+ }
+ }
}
///
diff --git a/test/PowerShellEditorServices.Test.E2E/LSPTestsFixures.cs b/test/PowerShellEditorServices.Test.E2E/LSPTestsFixures.cs
index 3bdd47096..6c2d56b0e 100644
--- a/test/PowerShellEditorServices.Test.E2E/LSPTestsFixures.cs
+++ b/test/PowerShellEditorServices.Test.E2E/LSPTestsFixures.cs
@@ -38,13 +38,15 @@ public class LSPTestsFixture : IAsyncLifetime
public ITestOutputHelper Output { get; set; }
protected PsesStdioProcess _psesProcess;
+ public int ProcessId => _psesProcess.Id;
public async Task InitializeAsync()
{
var factory = new LoggerFactory();
_psesProcess = new PsesStdioProcess(factory, IsDebugAdapterTests);
await _psesProcess.Start().ConfigureAwait(false);
-
+ Console.WriteLine("PowerShell Editor Services Server started with PID {0}", ProcessId);
+ // TIP: Add Breakpoint here and attach debugger using the PID from the above message
Diagnostics = new List();
TelemetryEvents = new List();
DirectoryInfo testdir =
diff --git a/test/PowerShellEditorServices.Test.E2E/LanguageServerProtocolMessageTests.cs b/test/PowerShellEditorServices.Test.E2E/LanguageServerProtocolMessageTests.cs
index 276df5666..32038817d 100644
--- a/test/PowerShellEditorServices.Test.E2E/LanguageServerProtocolMessageTests.cs
+++ b/test/PowerShellEditorServices.Test.E2E/LanguageServerProtocolMessageTests.cs
@@ -661,7 +661,8 @@ public async Task CanSendPesterLegacyCodeLensRequestAsync()
{
""powershell"": {
""pester"": {
- ""useLegacyCodeLens"": true
+ ""useLegacyCodeLens"": true,
+ ""codeLens"": true
}
}
}
@@ -727,7 +728,8 @@ public async Task CanSendPesterCodeLensRequestAsync()
{
""powershell"": {
""pester"": {
- ""useLegacyCodeLens"": false
+ ""useLegacyCodeLens"": false,
+ ""codeLens"": true
}
}
}
@@ -825,6 +827,50 @@ public async Task CanSendPesterCodeLensRequestAsync()
});
}
+ [Trait("Category", "LSP")]
+ [Fact]
+ public async Task NoMessageIfPesterCodeLensDisabled()
+ {
+ // Make sure Pester legacy CodeLens is disabled because we'll need it in this test.
+ PsesLanguageClient.Workspace.DidChangeConfiguration(
+ new DidChangeConfigurationParams
+ {
+ Settings = JObject.Parse(@"
+{
+ ""powershell"": {
+ ""pester"": {
+ ""codeLens"": false
+ }
+ }
+}
+")
+ });
+
+ string filePath = NewTestFile(@"
+Describe 'DescribeName' {
+ Context 'ContextName' {
+ It 'ItName' {
+ 1 | Should - Be 1
+ }
+ }
+}
+", isPester: true);
+
+ CodeLensContainer codeLenses = await PsesLanguageClient
+ .SendRequest(
+ "textDocument/codeLens",
+ new CodeLensParams
+ {
+ TextDocument = new TextDocumentIdentifier
+ {
+ Uri = new Uri(filePath)
+ }
+ })
+ .Returning(CancellationToken.None).ConfigureAwait(false);
+
+ Assert.Empty(codeLenses);
+ }
+
[Trait("Category", "LSP")]
[Fact]
public async Task CanSendReferencesCodeLensRequestAsync()
diff --git a/test/PowerShellEditorServices.Test.E2E/Processes/StdioServerProcess.cs b/test/PowerShellEditorServices.Test.E2E/Processes/StdioServerProcess.cs
index 585e1bf03..06a4a4dbc 100644
--- a/test/PowerShellEditorServices.Test.E2E/Processes/StdioServerProcess.cs
+++ b/test/PowerShellEditorServices.Test.E2E/Processes/StdioServerProcess.cs
@@ -45,6 +45,16 @@ public StdioServerProcess(ILoggerFactory loggerFactory, ProcessStartInfo serverS
_serverStartInfo = serverStartInfo;
}
+ ///
+ /// The process ID of the server process, useful for attaching a debugger.
+ ///
+ public int Id
+ {
+ get {
+ return _serverProcess.Id;
+ }
+ }
+
///
/// Dispose of resources being used by the launcher.
///