From a3b585582c78ae6fc96840096a01b0bc002d369e Mon Sep 17 00:00:00 2001 From: Justin Grote Date: Tue, 12 Oct 2021 18:47:04 -0700 Subject: [PATCH 1/5] feat: Disable Pester Code Lens --- .../Services/Symbols/SymbolsService.cs | 9 +++-- .../Workspace/LanguageServerSettings.cs | 35 +++++++++++++------ .../LSPTestsFixures.cs | 4 ++- .../LanguageServerProtocolMessageTests.cs | 6 ++-- .../Processes/StdioServerProcess.cs | 10 ++++++ 5 files changed, 49 insertions(+), 15 deletions(-) diff --git a/src/PowerShellEditorServices/Services/Symbols/SymbolsService.cs b/src/PowerShellEditorServices/Services/Symbols/SymbolsService.cs index bbbd24484..6f6b3c090 100644 --- a/src/PowerShellEditorServices/Services/Symbols/SymbolsService.cs +++ b/src/PowerShellEditorServices/Services/Symbols/SymbolsService.cs @@ -57,11 +57,16 @@ public SymbolsService( _workspaceService = workspaceService; _codeLensProviders = new ConcurrentDictionary(); - var codeLensProviders = new ICodeLensProvider[] + var codeLensProviders = new List { new ReferencesCodeLensProvider(_workspaceService, this), - new PesterCodeLensProvider(configurationService), }; + if (configurationService.CurrentSettings.Pester.CodeLens) { + codeLensProviders.Add( + 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..9caf70d74 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,34 @@ 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 != null) { + 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..7f6e695ea 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 } } } 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. /// From 496e3e206c67ff4baa5934ceee70f6fdd2b88083 Mon Sep 17 00:00:00 2001 From: Justin Grote Date: Fri, 15 Oct 2021 21:47:24 -0700 Subject: [PATCH 2/5] Move Setting Toggle Effect to the Provider --- .../CodeLens/PesterCodeLensProvider.cs | 8 +++- .../Services/Symbols/SymbolsService.cs | 6 +-- .../LanguageServerProtocolMessageTests.cs | 44 +++++++++++++++++++ 3 files changed, 52 insertions(+), 6 deletions(-) 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 6f6b3c090..96b3bcb2f 100644 --- a/src/PowerShellEditorServices/Services/Symbols/SymbolsService.cs +++ b/src/PowerShellEditorServices/Services/Symbols/SymbolsService.cs @@ -60,11 +60,7 @@ public SymbolsService( var codeLensProviders = new List { new ReferencesCodeLensProvider(_workspaceService, this), - }; - if (configurationService.CurrentSettings.Pester.CodeLens) { - codeLensProviders.Add( - new PesterCodeLensProvider(configurationService) - ); + new PesterCodeLensProvider(configurationService) }; foreach (ICodeLensProvider codeLensProvider in codeLensProviders) diff --git a/test/PowerShellEditorServices.Test.E2E/LanguageServerProtocolMessageTests.cs b/test/PowerShellEditorServices.Test.E2E/LanguageServerProtocolMessageTests.cs index 7f6e695ea..32038817d 100644 --- a/test/PowerShellEditorServices.Test.E2E/LanguageServerProtocolMessageTests.cs +++ b/test/PowerShellEditorServices.Test.E2E/LanguageServerProtocolMessageTests.cs @@ -827,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() From 715ece2cf8b04439462f8864b8c228eb167d64ce Mon Sep 17 00:00:00 2001 From: Justin Grote Date: Mon, 18 Oct 2021 13:40:25 -0700 Subject: [PATCH 3/5] Revert ICodeLensProvider Type Change --- src/PowerShellEditorServices/Services/Symbols/SymbolsService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PowerShellEditorServices/Services/Symbols/SymbolsService.cs b/src/PowerShellEditorServices/Services/Symbols/SymbolsService.cs index 96b3bcb2f..071945ca7 100644 --- a/src/PowerShellEditorServices/Services/Symbols/SymbolsService.cs +++ b/src/PowerShellEditorServices/Services/Symbols/SymbolsService.cs @@ -57,7 +57,7 @@ public SymbolsService( _workspaceService = workspaceService; _codeLensProviders = new ConcurrentDictionary(); - var codeLensProviders = new List + var codeLensProviders = new ICodeLensProvider[] { new ReferencesCodeLensProvider(_workspaceService, this), new PesterCodeLensProvider(configurationService) From e2359a4bfdb62925c44fd47fdc4f7750f6087da8 Mon Sep 17 00:00:00 2001 From: Justin Grote Date: Mon, 18 Oct 2021 13:45:38 -0700 Subject: [PATCH 4/5] Style Fixes --- .../Workspace/LanguageServerSettings.cs | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/PowerShellEditorServices/Services/Workspace/LanguageServerSettings.cs b/src/PowerShellEditorServices/Services/Workspace/LanguageServerSettings.cs index 9caf70d74..3cda163c9 100644 --- a/src/PowerShellEditorServices/Services/Workspace/LanguageServerSettings.cs +++ b/src/PowerShellEditorServices/Services/Workspace/LanguageServerSettings.cs @@ -401,15 +401,18 @@ public void Update( PesterSettings settings, ILogger logger) { - if (settings != null) { - 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)); - } + 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)); } } } From f6724ed407d3dcb45b54e4a9a8e607a6ef6c0d81 Mon Sep 17 00:00:00 2001 From: Robert Holt Date: Mon, 18 Oct 2021 17:34:19 -0400 Subject: [PATCH 5/5] Add newlines after if blocks --- .../Services/Workspace/LanguageServerSettings.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/PowerShellEditorServices/Services/Workspace/LanguageServerSettings.cs b/src/PowerShellEditorServices/Services/Workspace/LanguageServerSettings.cs index 3cda163c9..ed4768a2e 100644 --- a/src/PowerShellEditorServices/Services/Workspace/LanguageServerSettings.cs +++ b/src/PowerShellEditorServices/Services/Workspace/LanguageServerSettings.cs @@ -404,11 +404,13 @@ public void Update( 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;