diff --git a/src/PowerShellEditorServices/Services/Analysis/AnalysisService.cs b/src/PowerShellEditorServices/Services/Analysis/AnalysisService.cs index 6b2d25d27..33c9b4480 100644 --- a/src/PowerShellEditorServices/Services/Analysis/AnalysisService.cs +++ b/src/PowerShellEditorServices/Services/Analysis/AnalysisService.cs @@ -138,13 +138,13 @@ public void RunScriptDiagnostics( ScriptFile[] filesToAnalyze, CancellationToken cancellationToken) { - EnsureEngineSettingsCurrent(); - - if (AnalysisEngine == null) + if (_configurationService.CurrentSettings.ScriptAnalysis.Enable == false) { return; } + EnsureEngineSettingsCurrent(); + // Create a cancellation token source that will cancel if we do or if the caller does var cancellationSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken); @@ -191,12 +191,6 @@ public void RunScriptDiagnostics( public Task FormatAsync(string scriptFileContents, Hashtable formatSettings, int[] formatRange = null) { EnsureEngineSettingsCurrent(); - - if (AnalysisEngine == null) - { - return null; - } - return AnalysisEngine.FormatAsync(scriptFileContents, formatSettings, formatRange); } @@ -263,13 +257,17 @@ public void ClearMarkers(ScriptFile file) /// The new language server settings. public void OnConfigurationUpdated(object sender, LanguageServerSettings settings) { - InitializeAnalysisEngineToCurrentSettings(); + if (settings.ScriptAnalysis.Enable ?? true) + { + InitializeAnalysisEngineToCurrentSettings(); + } } private void EnsureEngineSettingsCurrent() { - if (_pssaSettingsFilePath != null - && !File.Exists(_pssaSettingsFilePath)) + if (_analysisEngineLazy == null + || (_pssaSettingsFilePath != null + && !File.Exists(_pssaSettingsFilePath))) { InitializeAnalysisEngineToCurrentSettings(); } @@ -277,18 +275,6 @@ private void EnsureEngineSettingsCurrent() private void InitializeAnalysisEngineToCurrentSettings() { - // If script analysis has been disabled, just return null - if (_configurationService.CurrentSettings.ScriptAnalysis.Enable != true) - { - if (_analysisEngineLazy != null && _analysisEngineLazy.IsValueCreated) - { - _analysisEngineLazy.Value.Dispose(); - } - - _analysisEngineLazy = null; - return; - } - // We may be triggered after the lazy factory is set, // but before it's been able to instantiate if (_analysisEngineLazy == null) @@ -357,7 +343,7 @@ private bool TryFindSettingsFile(out string settingsFilePath) if (settingsFilePath == null || !File.Exists(settingsFilePath)) { - _logger.LogWarning($"Unable to find PSSA settings file at '{configuredPath}'. Loading default rules."); + _logger.LogInformation($"Unable to find PSSA settings file at '{configuredPath}'. Loading default rules."); settingsFilePath = null; return false; } diff --git a/src/PowerShellEditorServices/Services/Analysis/PssaCmdletAnalysisEngine.cs b/src/PowerShellEditorServices/Services/Analysis/PssaCmdletAnalysisEngine.cs index eb1617c7d..bb5531693 100644 --- a/src/PowerShellEditorServices/Services/Analysis/PssaCmdletAnalysisEngine.cs +++ b/src/PowerShellEditorServices/Services/Analysis/PssaCmdletAnalysisEngine.cs @@ -55,7 +55,7 @@ public Builder WithSettingsFile(string settingsPath) _settingsParameter = settingsPath; return this; } - + /// /// Uses a settings hashtable for PSSA rule configuration. /// @@ -176,7 +176,8 @@ public async Task FormatAsync(string scriptDefinition, Hashtable formatS // Invoke-Formatter throws a ParameterBinderValidationException if the ScriptDefinition is an empty string. if (string.IsNullOrEmpty(scriptDefinition)) { - return null; + _logger.LogDebug("Script Definition was: " + scriptDefinition == null ? "null" : "empty string"); + return scriptDefinition; } var psCommand = new PSCommand() @@ -194,7 +195,7 @@ public async Task FormatAsync(string scriptDefinition, Hashtable formatS if (result == null) { _logger.LogError("Formatter returned null result"); - return null; + return scriptDefinition; } if (result.HasErrors) @@ -205,7 +206,7 @@ public async Task FormatAsync(string scriptDefinition, Hashtable formatS errorBuilder.Append(err).Append(s_indentJoin); } _logger.LogWarning($"Errors found while formatting file: {errorBuilder}"); - return null; + return scriptDefinition; } foreach (PSObject resultObj in result.Output) @@ -216,7 +217,8 @@ public async Task FormatAsync(string scriptDefinition, Hashtable formatS } } - return null; + _logger.LogError("Couldn't get result from output. Returning original script."); + return scriptDefinition; } ///