Skip to content

Commit ff75584

Browse files
committed
Revert "Fix exceptions in importing CustomizedRule"
This reverts commit 8919af7.
1 parent 8919af7 commit ff75584

11 files changed

+55
-66
lines changed

Engine/Commands/InvokeScriptAnalyzerCommand.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,14 @@
1414
using Microsoft.Windows.Powershell.ScriptAnalyzer.Generic;
1515
using System;
1616
using System.Collections.Generic;
17+
using System.ComponentModel.Composition;
1718
using System.Diagnostics.CodeAnalysis;
1819
using System.Globalization;
1920
using System.Linq;
2021
using System.Management.Automation;
2122
using System.Management.Automation.Language;
23+
using System.Resources;
24+
using System.Threading;
2225
using System.Reflection;
2326
using System.IO;
2427
using System.Text;

Engine/Generic/SourceType.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@
1010
// THE SOFTWARE.
1111
//
1212

13+
using System;
14+
using System.Collections.Generic;
15+
using System.Linq;
16+
using System.Text;
17+
using System.Threading.Tasks;
18+
1319
namespace Microsoft.Windows.Powershell.ScriptAnalyzer.Generic
1420
{
1521
/// <summary>

Engine/ScriptAnalyzer.cs

Lines changed: 29 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ public void Initilaize(Dictionary<string, List<string>> result)
142142
paths = result.ContainsKey("ValidDllPaths") ? result["ValidDllPaths"] : result["ValidPaths"];
143143
foreach (string path in paths)
144144
{
145-
if (String.Equals(Path.GetExtension(path),".dll", StringComparison.OrdinalIgnoreCase))
145+
if (Path.GetExtension(path).ToLower(CultureInfo.CurrentCulture) == ".dll")
146146
{
147147
catalog.Catalogs.Add(new AssemblyCatalog(path));
148148
}
@@ -241,8 +241,8 @@ public List<ExternalRule> GetExternalRule(string[] moduleNames)
241241

242242
FunctionInfo funcInfo = (FunctionInfo)psobject.ImmediateBaseObject;
243243
ParameterMetadata param = funcInfo.Parameters.Values
244-
.First<ParameterMetadata>(item => item.Name.EndsWith("ast", StringComparison.OrdinalIgnoreCase) ||
245-
item.Name.EndsWith("token", StringComparison.OrdinalIgnoreCase));
244+
.First<ParameterMetadata>(item => item.Name.ToLower(CultureInfo.CurrentCulture).EndsWith("ast", StringComparison.CurrentCulture) ||
245+
item.Name.ToLower(CultureInfo.CurrentCulture).EndsWith("token", StringComparison.CurrentCulture));
246246

247247
//Only add functions that are defined as rules.
248248
if (param != null)
@@ -251,7 +251,7 @@ public List<ExternalRule> GetExternalRule(string[] moduleNames)
251251
string desc =posh.AddScript(script).Invoke()[0].ImmediateBaseObject.ToString()
252252
.Replace("\r\n", " ").Trim();
253253

254-
rules.Add(new ExternalRule(funcInfo.Name, funcInfo.Name, desc, param.ParameterType.Name,
254+
rules.Add(new ExternalRule(funcInfo.Name, funcInfo.Name, desc, param.Name,
255255
funcInfo.ModuleName, funcInfo.Module.Path));
256256
}
257257
}
@@ -337,7 +337,7 @@ public IEnumerable<DiagnosticRecord> GetExternalRecord(Ast ast, Token[] token, E
337337
{
338338
// Find all AstTypes that appeared in rule groups.
339339
IEnumerable<Ast> childAsts = ast.FindAll(new Func<Ast, bool>((testAst) =>
340-
Strings.Equals(testAst.GetType().Name, astRuleGroup.Key)), false);
340+
(testAst.GetType().Name.ToLower(CultureInfo.CurrentCulture) == astRuleGroup.Key.ToLower(CultureInfo.CurrentCulture))), false);
341341

342342
foreach (Ast childAst in childAsts)
343343
{
@@ -381,34 +381,30 @@ public IEnumerable<DiagnosticRecord> GetExternalRecord(Ast ast, Token[] token, E
381381
string message = string.Empty;
382382
string ruleName = string.Empty;
383383

384-
//Make sure returned DiagnosticRecord is not null
385-
if (psobject!= null && psobject.ImmediateBaseObject != null)
384+
// Because error stream is merged to output stream,
385+
// we need to handle the error records.
386+
if (psobject.ImmediateBaseObject is ErrorRecord)
386387
{
387-
// Because error stream is merged to output stream,
388-
// we need to handle the error records.
389-
if (psobject.ImmediateBaseObject is ErrorRecord)
390-
{
391-
ErrorRecord record = (ErrorRecord)psobject.ImmediateBaseObject;
392-
command.WriteError(record);
393-
continue;
394-
}
395-
396-
// DiagnosticRecord may not be correctly returned from external rule.
397-
try
398-
{
399-
Enum.TryParse<DiagnosticSeverity>(psobject.Properties["Severity"].Value.ToString().ToUpper(), out severity);
400-
message = psobject.Properties["Message"].Value.ToString();
401-
extent = (IScriptExtent)psobject.Properties["Extent"].Value;
402-
ruleName = psobject.Properties["RuleName"].Value.ToString();
403-
}
404-
catch (Exception ex)
405-
{
406-
command.WriteError(new ErrorRecord(ex, ex.HResult.ToString("X"), ErrorCategory.NotSpecified, this));
407-
continue;
408-
}
409-
410-
if (!string.IsNullOrEmpty(message)) yield return new DiagnosticRecord(message, extent, ruleName, severity, null);
388+
ErrorRecord record = (ErrorRecord)psobject.ImmediateBaseObject;
389+
command.WriteError(record);
390+
continue;
391+
}
392+
393+
// DiagnosticRecord may not be correctly returned from external rule.
394+
try
395+
{
396+
Enum.TryParse<DiagnosticSeverity>(psobject.Properties["Severity"].Value.ToString().ToUpper(), out severity);
397+
message = psobject.Properties["Message"].Value.ToString();
398+
extent = (IScriptExtent)psobject.Properties["Extent"].Value;
399+
ruleName = psobject.Properties["RuleName"].Value.ToString();
400+
}
401+
catch (Exception ex)
402+
{
403+
command.WriteError(new ErrorRecord(ex, ex.HResult.ToString("X"), ErrorCategory.NotSpecified, this));
404+
continue;
411405
}
406+
407+
if (!string.IsNullOrEmpty(message)) yield return new DiagnosticRecord(message, extent, ruleName, severity, null);
412408
}
413409
}
414410

@@ -457,11 +453,7 @@ public Dictionary<string, List<string>> CheckRuleExtension(string[] path, PSCmdl
457453
// Adds original path, otherwise path.Except<string>(validModPaths) will fail.
458454
// It's possible that user can provide something like this:
459455
// "..\..\..\ScriptAnalyzer.UnitTest\modules\CommunityAnalyzerRules\CommunityAnalyzerRules.psd1"
460-
if (moduleInfo.ExportedFunctions.Count > 0)
461-
{
462-
validModPaths.Add(childPath);
463-
cmdlet.WriteVerbose(string.Format(CultureInfo.CurrentCulture, Strings.ImportCustomizedRuleSuccess, childPath));
464-
}
456+
if (moduleInfo.ExportedFunctions.Count > 0) validModPaths.Add(childPath);
465457
}
466458
}
467459
catch
@@ -486,7 +478,7 @@ public Dictionary<string, List<string>> CheckRuleExtension(string[] path, PSCmdl
486478

487479
cmdlet.WriteDebug(string.Format(CultureInfo.CurrentCulture, Strings.CheckAssemblyFile, resolvedPath));
488480

489-
if (String.Equals(Path.GetExtension(resolvedPath),".dll",StringComparison.OrdinalIgnoreCase))
481+
if (Path.GetExtension(resolvedPath).ToLower(CultureInfo.CurrentCulture) == ".dll")
490482
{
491483
if (!File.Exists(resolvedPath))
492484
{

Engine/ScriptAnalyzerEngine.csproj

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,9 +82,7 @@
8282
</ItemGroup>
8383
<ItemGroup>
8484
<None Include="PSScriptAnalyzer.psd1" />
85-
<None Include="ScriptAnalyzer.format.ps1xml">
86-
<SubType>Designer</SubType>
87-
</None>
85+
<None Include="ScriptAnalyzer.format.ps1xml" />
8886
<None Include="ScriptAnalyzer.types.ps1xml" />
8987
</ItemGroup>
9088
<ItemGroup>

Engine/Strings.Designer.cs

Lines changed: 10 additions & 17 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Engine/Strings.resx

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -135,9 +135,6 @@
135135
<data name="FileNotFound" xml:space="preserve">
136136
<value>Cannot find file '{0}'.</value>
137137
</data>
138-
<data name="ImportCustomizedRuleSuccess" xml:space="preserve">
139-
<value>Customized rules found. Imported to PSScriptAnalyzer rule collections successfully...</value>
140-
</data>
141138
<data name="InvalidPath" xml:space="preserve">
142139
<value>Cannot find the path '{0}'.</value>
143140
</data>

Rules/Strings.Designer.cs

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Rules/Strings.resx

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -678,7 +678,4 @@
678678
<data name="AvoidUsingWMIObjectCmdletName" xml:space="preserve">
679679
<value>AvoidUsingWMIObjectCmdlet</value>
680680
</data>
681-
<data name="ImportCustomizedRuleSuccess" xml:space="preserve">
682-
<value>Customized rules found. Imported to PSScriptAnalyzer engine successfully...</value>
683-
</data>
684681
</root>

Rules/UseCmdletCorrectly.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ public IEnumerable<DiagnosticRecord> AnalyzeScript(Ast ast, string fileName)
4545
{
4646
CommandAst cmdAst = (CommandAst)foundAst;
4747

48+
// Handles the exception caused by commands like, {& $PLINK $args 2> $TempErrorFile}.
49+
// You can also review the remark section in following document,
50+
// MSDN: CommandAst.GetCommandName Method
4851
if (cmdAst.GetCommandName() == null) continue;
4952

5053
// Checks mandatory parameters.

Tests/Disabled Rules/AvoidOneChar.tests.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ $oneCharMessage = "The cmdlet name O only has one character."
33
$oneCharName = "PSOneChar"
44
$directory = Split-Path -Parent $MyInvocation.MyCommand.Path
55
$invoke = Invoke-ScriptAnalyzer $directory\AvoidUsingReservedCharOneCharNames.ps1 | Where-Object {$_.RuleName -eq $oneCharName}
6-
$noViolations = Invoke-ScriptAnalyzer $directory\..\Rules\GoodCmdlet.ps1 | Where-Object {$_.RuleName -eq $oneCharName}
6+
$noViolations = Invoke-ScriptAnalyzer $directory\GoodCmdlet.ps1 | Where-Object {$_.RuleName -eq $oneCharName}
77

88
Describe "Avoid Using One Char" {
99
Context "When there are violations" {

Tests/Disabled Rules/CommandNotFound.tests.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Import-Module -Verbose PSScriptAnalyzer
1+
Import-Module -Verbose ScriptAnalyzer
22
$violationMessage = "Command Get-WrongCommand Is Not Found"
33
$violationName = "PSCommandNotFound"
44
$directory = Split-Path -Parent $MyInvocation.MyCommand.Path

0 commit comments

Comments
 (0)