Skip to content

Commit 4937f56

Browse files
ignore parseerrors from PSSA
1 parent b8f56fa commit 4937f56

File tree

5 files changed

+34
-34
lines changed

5 files changed

+34
-34
lines changed

src/PowerShellEditorServices.Protocol/Server/LanguageServer.cs

+9-7
Original file line numberDiff line numberDiff line change
@@ -1192,7 +1192,7 @@ protected async Task HandleCommentHelpRequestAsync(
11921192
funcText = string.Join("\n", lines);
11931193
}
11941194

1195-
ScriptFileMarker[] analysisResults = await this.editorSession.AnalysisService.GetSemanticMarkersAsync(
1195+
List<ScriptFileMarker> analysisResults = await this.editorSession.AnalysisService.GetSemanticMarkersAsync(
11961196
funcText,
11971197
AnalysisService.GetCommentHelpRuleSettings(
11981198
enable: true,
@@ -1743,7 +1743,7 @@ await PublishScriptDiagnosticsAsync(
17431743
// Get the requested files
17441744
foreach (ScriptFile scriptFile in filesToAnalyze)
17451745
{
1746-
ScriptFileMarker[] semanticMarkers = null;
1746+
List<ScriptFileMarker> semanticMarkers = null;
17471747
if (isScriptAnalysisEnabled && editorSession.AnalysisService != null)
17481748
{
17491749
using (Logger.LogExecutionTime($"Script analysis of {scriptFile.FilePath} completed."))
@@ -1755,13 +1755,15 @@ await PublishScriptDiagnosticsAsync(
17551755
{
17561756
// Semantic markers aren't available if the AnalysisService
17571757
// isn't available
1758-
semanticMarkers = new ScriptFileMarker[0];
1758+
semanticMarkers = new List<ScriptFileMarker>();
17591759
}
17601760

1761+
scriptFile.SyntaxMarkers.AddRange(semanticMarkers);
1762+
17611763
await PublishScriptDiagnosticsAsync(
17621764
scriptFile,
17631765
// Concat script analysis errors to any existing parse errors
1764-
scriptFile.SyntaxMarkers.Concat(semanticMarkers).ToArray(),
1766+
scriptFile.SyntaxMarkers,
17651767
correctionIndex,
17661768
eventSender);
17671769
}
@@ -1772,14 +1774,14 @@ private async Task ClearMarkersAsync(ScriptFile scriptFile, EventContext eventCo
17721774
// send empty diagnostic markers to clear any markers associated with the given file
17731775
await PublishScriptDiagnosticsAsync(
17741776
scriptFile,
1775-
new ScriptFileMarker[0],
1777+
new List<ScriptFileMarker>(),
17761778
this.codeActionsPerFile,
17771779
eventContext);
17781780
}
17791781

17801782
private static async Task PublishScriptDiagnosticsAsync(
17811783
ScriptFile scriptFile,
1782-
ScriptFileMarker[] markers,
1784+
List<ScriptFileMarker> markers,
17831785
Dictionary<string, Dictionary<string, MarkerCorrection>> correctionIndex,
17841786
EventContext eventContext)
17851787
{
@@ -1792,7 +1794,7 @@ await PublishScriptDiagnosticsAsync(
17921794

17931795
private static async Task PublishScriptDiagnosticsAsync(
17941796
ScriptFile scriptFile,
1795-
ScriptFileMarker[] markers,
1797+
List<ScriptFileMarker> markers,
17961798
Dictionary<string, Dictionary<string, MarkerCorrection>> correctionIndex,
17971799
Func<NotificationType<PublishDiagnosticsNotification, object>, PublishDiagnosticsNotification, Task> eventSender)
17981800
{

src/PowerShellEditorServices/Analysis/AnalysisService.cs

+10-8
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public class AnalysisService : IDisposable
5555
/// <summary>
5656
/// An empty script marker result to return when no script markers can be returned.
5757
/// </summary>
58-
private static readonly ScriptFileMarker[] s_emptyScriptMarkerResult = new ScriptFileMarker[0];
58+
private static readonly List<ScriptFileMarker> s_emptyScriptMarkerResult = new List<ScriptFileMarker>();
5959

6060
private static readonly string[] s_emptyGetRuleResult = new string[0];
6161

@@ -266,7 +266,7 @@ public static Hashtable GetPSSASettingsHashtable(IDictionary<string, Hashtable>
266266
/// </summary>
267267
/// <param name="file">The ScriptFile which will be analyzed for semantic markers.</param>
268268
/// <returns>An array of ScriptFileMarkers containing semantic analysis results.</returns>
269-
public async Task<ScriptFileMarker[]> GetSemanticMarkersAsync(ScriptFile file)
269+
public async Task<List<ScriptFileMarker>> GetSemanticMarkersAsync(ScriptFile file)
270270
{
271271
return await GetSemanticMarkersAsync<string>(file, ActiveRules, SettingsPath);
272272
}
@@ -277,7 +277,7 @@ public async Task<ScriptFileMarker[]> GetSemanticMarkersAsync(ScriptFile file)
277277
/// <param name="file">The ScriptFile to be analyzed.</param>
278278
/// <param name="settings">ScriptAnalyzer settings</param>
279279
/// <returns></returns>
280-
public async Task<ScriptFileMarker[]> GetSemanticMarkersAsync(ScriptFile file, Hashtable settings)
280+
public async Task<List<ScriptFileMarker>> GetSemanticMarkersAsync(ScriptFile file, Hashtable settings)
281281
{
282282
return await GetSemanticMarkersAsync<Hashtable>(file, null, settings);
283283
}
@@ -288,7 +288,7 @@ public async Task<ScriptFileMarker[]> GetSemanticMarkersAsync(ScriptFile file, H
288288
/// <param name="scriptContent">The script content to be analyzed.</param>
289289
/// <param name="settings">ScriptAnalyzer settings</param>
290290
/// <returns></returns>
291-
public async Task<ScriptFileMarker[]> GetSemanticMarkersAsync(
291+
public async Task<List<ScriptFileMarker>> GetSemanticMarkersAsync(
292292
string scriptContent,
293293
Hashtable settings)
294294
{
@@ -379,7 +379,7 @@ public async Task<string> FormatAsync(
379379

380380
#region Private Methods
381381

382-
private async Task<ScriptFileMarker[]> GetSemanticMarkersAsync<TSettings>(
382+
private async Task<List<ScriptFileMarker>> GetSemanticMarkersAsync<TSettings>(
383383
ScriptFile file,
384384
string[] rules,
385385
TSettings settings) where TSettings : class
@@ -398,7 +398,7 @@ private async Task<ScriptFileMarker[]> GetSemanticMarkersAsync<TSettings>(
398398
}
399399
}
400400

401-
private async Task<ScriptFileMarker[]> GetSemanticMarkersAsync<TSettings>(
401+
private async Task<List<ScriptFileMarker>> GetSemanticMarkersAsync<TSettings>(
402402
string scriptContent,
403403
string[] rules,
404404
TSettings settings) where TSettings : class
@@ -407,7 +407,7 @@ private async Task<ScriptFileMarker[]> GetSemanticMarkersAsync<TSettings>(
407407
&& (rules != null || settings != null))
408408
{
409409
var scriptFileMarkers = await GetDiagnosticRecordsAsync(scriptContent, rules, settings);
410-
return scriptFileMarkers.Select(ScriptFileMarker.FromDiagnosticRecord).ToArray();
410+
return scriptFileMarkers.Select(ScriptFileMarker.FromDiagnosticRecord).ToList();
411411
}
412412
else
413413
{
@@ -514,7 +514,9 @@ private async Task<PSObject[]> GetDiagnosticRecordsAsync<TSettings>(
514514
new Dictionary<string, object>
515515
{
516516
{ "ScriptDefinition", scriptContent },
517-
{ settingParameter, settingArgument }
517+
{ settingParameter, settingArgument },
518+
// We ignore ParseErrors from PSSA because we already send them when we parse the file.
519+
{ "Severity", new [] { ScriptFileMarkerLevel.Error, ScriptFileMarkerLevel.Information, ScriptFileMarkerLevel.Warning }}
518520
});
519521

520522
diagnosticRecords = result?.Output;

src/PowerShellEditorServices/Workspace/ScriptFile.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ public string Contents
100100
/// Gets the list of syntax markers found by parsing this
101101
/// file's contents.
102102
/// </summary>
103-
public ScriptFileMarker[] SyntaxMarkers
103+
public List<ScriptFileMarker> SyntaxMarkers
104104
{
105105
get;
106106
private set;
@@ -657,7 +657,7 @@ private void ParseFileContents()
657657
this.SyntaxMarkers =
658658
parseErrors
659659
.Select(ScriptFileMarker.FromParseError)
660-
.ToArray();
660+
.ToList();
661661

662662
// Untitled files have no directory
663663
// Discussed in https://github.com/PowerShell/PowerShellEditorServices/pull/815.

src/PowerShellEditorServices/Workspace/ScriptFileMarker.cs

+11-15
Original file line numberDiff line numberDiff line change
@@ -164,31 +164,27 @@ internal static ScriptFileMarker FromDiagnosticRecord(PSObject psObject)
164164
};
165165
}
166166

167+
string severity = diagnosticRecord.Severity.ToString();
168+
if(!Enum.TryParse(severity, out ScriptFileMarkerLevel level))
169+
{
170+
throw new ArgumentException(
171+
string.Format(
172+
"The provided DiagnosticSeverity value '{0}' is unknown.",
173+
severity),
174+
"diagnosticSeverity");
175+
}
176+
167177
return new ScriptFileMarker
168178
{
169179
Message = $"{diagnosticRecord.Message as string}",
170180
RuleName = $"{diagnosticRecord.RuleName as string}",
171-
Level = GetMarkerLevelFromDiagnosticSeverity((diagnosticRecord.Severity as Enum).ToString()),
181+
Level = level,
172182
ScriptRegion = ScriptRegion.Create(diagnosticRecord.Extent as IScriptExtent),
173183
Correction = correction,
174184
Source = "PSScriptAnalyzer"
175185
};
176186
}
177187

178-
private static ScriptFileMarkerLevel GetMarkerLevelFromDiagnosticSeverity(
179-
string diagnosticSeverity)
180-
{
181-
if(Enum.TryParse(diagnosticSeverity, out ScriptFileMarkerLevel level))
182-
{
183-
return level;
184-
}
185-
186-
throw new ArgumentException(
187-
string.Format(
188-
"The provided DiagnosticSeverity value '{0}' is unknown.",
189-
diagnosticSeverity),
190-
"diagnosticSeverity");
191-
}
192188
#endregion
193189
}
194190
}

test/PowerShellEditorServices.Test/Session/ScriptFileTests.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -550,7 +550,7 @@ public void PropertiesInitializedCorrectlyForFile()
550550
Assert.True(scriptFile.IsAnalysisEnabled);
551551
Assert.False(scriptFile.IsInMemory);
552552
Assert.Empty(scriptFile.ReferencedFiles);
553-
Assert.Empty(scriptFile.SyntaxMarkers);
553+
Assert.Null(scriptFile.SyntaxMarkers);
554554
Assert.Single(scriptFile.ScriptTokens);
555555
Assert.Single(scriptFile.FileLines);
556556
}
@@ -576,7 +576,7 @@ public void PropertiesInitializedCorrectlyForUntitled()
576576
Assert.True(scriptFile.IsAnalysisEnabled);
577577
Assert.True(scriptFile.IsInMemory);
578578
Assert.Empty(scriptFile.ReferencedFiles);
579-
Assert.Empty(scriptFile.SyntaxMarkers);
579+
Assert.Null(scriptFile.SyntaxMarkers);
580580
Assert.Equal(10, scriptFile.ScriptTokens.Length);
581581
Assert.Equal(3, scriptFile.FileLines.Count);
582582
}

0 commit comments

Comments
 (0)