Skip to content

Commit c98a95f

Browse files
committed
Fix #153: Script Analyzer is not returning markers
This change fixes an issue in 0.4.1 where Script Analyzer analysis markers are not being returned by the AnalysisService. This issue was caused by a new optional parameter to the ScriptAnalyzer.Initialize method called 'includeDefaultRules' which was introduced in 1.3.0. Since this parameter has a default value of 'false', the default Script Analyzer rules were not being loaded or applied in analysis runs.
1 parent 3c1e119 commit c98a95f

File tree

1 file changed

+27
-11
lines changed

1 file changed

+27
-11
lines changed

src/PowerShellEditorServices/Analysis/AnalysisService.cs

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,13 @@
33
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
44
//
55

6+
using Microsoft.PowerShell.EditorServices.Utility;
67
using Microsoft.Windows.PowerShell.ScriptAnalyzer;
78
using System;
9+
using System.IO;
810
using System.Linq;
911
using System.Management.Automation.Runspaces;
12+
using System.Reflection;
1013
using System.Threading;
1114
using System.Threading.Tasks;
1215

@@ -47,17 +50,30 @@ public class AnalysisService : IDisposable
4750
/// </summary>
4851
public AnalysisService()
4952
{
50-
this.analysisRunspace = RunspaceFactory.CreateRunspace(InitialSessionState.CreateDefault2());
51-
this.analysisRunspace.ApartmentState = ApartmentState.STA;
52-
this.analysisRunspace.ThreadOptions = PSThreadOptions.ReuseThread;
53-
this.analysisRunspace.Open();
53+
try
54+
{
55+
// Attempt to create a ScriptAnalyzer instance first
56+
// just in case the assembly can't be found and we
57+
// can skip creating an extra runspace.
58+
this.scriptAnalyzer = new ScriptAnalyzer();
59+
60+
this.analysisRunspace = RunspaceFactory.CreateRunspace(InitialSessionState.CreateDefault2());
61+
this.analysisRunspace.ApartmentState = ApartmentState.STA;
62+
this.analysisRunspace.ThreadOptions = PSThreadOptions.ReuseThread;
63+
this.analysisRunspace.Open();
5464

55-
this.scriptAnalyzer = new ScriptAnalyzer();
56-
this.scriptAnalyzer.Initialize(
57-
this.analysisRunspace,
58-
new AnalysisOutputWriter(),
59-
null,
60-
IncludedRules);
65+
this.scriptAnalyzer.Initialize(
66+
this.analysisRunspace,
67+
new AnalysisOutputWriter(),
68+
includeRuleNames: IncludedRules,
69+
includeDefaultRules: true);
70+
}
71+
catch (FileNotFoundException)
72+
{
73+
Logger.Write(
74+
LogLevel.Warning,
75+
"Script Analyzer binaries not found, AnalysisService will be disabled.");
76+
}
6177
}
6278

6379
#endregion
@@ -72,7 +88,7 @@ public AnalysisService()
7288
/// <returns>An array of ScriptFileMarkers containing semantic analysis results.</returns>
7389
public ScriptFileMarker[] GetSemanticMarkers(ScriptFile file)
7490
{
75-
if (file.IsAnalysisEnabled)
91+
if (this.scriptAnalyzer != null && file.IsAnalysisEnabled)
7692
{
7793
// TODO: This is a temporary fix until we can change how
7894
// ScriptAnalyzer invokes their async tasks.

0 commit comments

Comments
 (0)