Skip to content

Commit 6bac47e

Browse files
committed
Merge pull request #70 from PowerShell/GetRuleWildCard
Add wild card support to Get-ScriptAnalyzerRule
2 parents 25a974b + b43039e commit 6bac47e

File tree

2 files changed

+45
-22
lines changed

2 files changed

+45
-22
lines changed

Engine/ScriptAnalyzer.cs

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

13+
using System.Text.RegularExpressions;
1314
using Microsoft.Windows.Powershell.ScriptAnalyzer.Commands;
1415
using Microsoft.Windows.Powershell.ScriptAnalyzer.Generic;
1516
using System;
@@ -192,8 +193,18 @@ public IEnumerable<IRule> GetRule(string[] moduleNames, string[] ruleNames)
192193

193194
if (ruleNames != null)
194195
{
195-
results = rules.Where<IRule>(item =>
196-
ruleNames.Contains(item.GetName(), StringComparer.OrdinalIgnoreCase));
196+
//Check wild card input for -Name parameter and create regex match patterns
197+
List<Regex> regexList = new List<Regex>();
198+
foreach (string ruleName in ruleNames)
199+
{
200+
Regex includeRegex = new Regex(String.Format("^{0}$", Regex.Escape(ruleName).Replace(@"\*", ".*")), RegexOptions.IgnoreCase);
201+
regexList.Add(includeRegex);
202+
}
203+
204+
results = from rule in rules
205+
from regex in regexList
206+
where regex.IsMatch(rule.GetName())
207+
select rule;
197208
}
198209
else
199210
{

Tests/Engine/GetScriptAnalyzerRule.tests.ps1

Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ $dscIdentical = "PSDSCUseIdenticalParametersForDSC"
88
Describe "Test available parameters" {
99
$params = $sa.Parameters
1010
Context "Name parameter" {
11-
It "has a Name parameter" {
12-
$params.ContainsKey("Name") | Should Be $true
11+
It "has a RuleName parameter" {
12+
$params.ContainsKey("RuleName") | Should Be $true
1313
}
1414

1515
It "accepts string" {
16-
$params["Name"].ParameterType.FullName | Should Be "System.String[]"
16+
$params["RuleName"].ParameterType.FullName | Should Be "System.String[]"
1717
}
1818
}
1919

@@ -32,35 +32,35 @@ Describe "Test available parameters" {
3232
Describe "Test Name parameters" {
3333
Context "When used correctly" {
3434
It "works with 1 name" {
35-
$rule = Get-ScriptAnalyzerRule -Name $singularNouns
35+
$rule = Get-ScriptAnalyzerRule -RuleName $singularNouns
3636
$rule.Count | Should Be 1
37-
$rule[0].Name | Should Be $singularNouns
37+
$rule[0].RuleName | Should Be $singularNouns
3838
}
3939

4040
It "works for DSC Rule" {
41-
$rule = Get-ScriptAnalyzerRule -Name $dscIdentical
41+
$rule = Get-ScriptAnalyzerRule -RuleName $dscIdentical
4242
$rule.Count | Should Be 1
43-
$rule[0].Name | Should Be $dscIdentical
43+
$rule[0].RuleName | Should Be $dscIdentical
4444
}
4545

4646
It "works with 3 names" {
47-
$rules = Get-ScriptAnalyzerRule -Name $approvedVerbs, $singularNouns
47+
$rules = Get-ScriptAnalyzerRule -RuleName $approvedVerbs, $singularNouns
4848
$rules.Count | Should Be 2
49-
($rules | Where-Object {$_.Name -eq $singularNouns}).Count | Should Be 1
50-
($rules | Where-Object {$_.Name -eq $approvedVerbs}).Count | Should Be 1
49+
($rules | Where-Object {$_.RuleName -eq $singularNouns}).Count | Should Be 1
50+
($rules | Where-Object {$_.RuleName -eq $approvedVerbs}).Count | Should Be 1
5151
}
5252
}
5353

5454
Context "When used incorrectly" {
5555
It "1 incorrect name" {
56-
$rule = Get-ScriptAnalyzerRule -Name "This is a wrong name"
56+
$rule = Get-ScriptAnalyzerRule -RuleName "This is a wrong name"
5757
$rule.Count | Should Be 0
5858
}
5959

6060
It "1 incorrect and 1 correct" {
61-
$rule = Get-ScriptAnalyzerRule -Name $singularNouns, "This is a wrong name"
61+
$rule = Get-ScriptAnalyzerRule -RuleName $singularNouns, "This is a wrong name"
6262
$rule.Count | Should Be 1
63-
$rule[0].Name | Should Be $singularNouns
63+
$rule[0].RuleName | Should Be $singularNouns
6464
}
6565
}
6666
}
@@ -86,25 +86,25 @@ Describe "Test RuleExtension" {
8686
}
8787

8888
It "with Name of a built-in rules" {
89-
$ruleExtension = Get-ScriptAnalyzerRule -CustomizedRulePath $directory\CommunityAnalyzerRules\CommunityAnalyzerRules.psm1 -Name $singularNouns
89+
$ruleExtension = Get-ScriptAnalyzerRule -CustomizedRulePath $directory\CommunityAnalyzerRules\CommunityAnalyzerRules.psm1 -RuleName $singularNouns
9090
$ruleExtension.Count | Should Be 1
91-
$ruleExtension[0].Name | Should Be $singularNouns
91+
$ruleExtension[0].RuleName | Should Be $singularNouns
9292
}
9393

9494
It "with Names of built-in, DSC and non-built-in rules" {
95-
$ruleExtension = Get-ScriptAnalyzerRule -CustomizedRulePath $directory\CommunityAnalyzerRules\CommunityAnalyzerRules.psm1 -Name $singularNouns, $measureRequired, $dscIdentical
95+
$ruleExtension = Get-ScriptAnalyzerRule -CustomizedRulePath $directory\CommunityAnalyzerRules\CommunityAnalyzerRules.psm1 -RuleName $singularNouns, $measureRequired, $dscIdentical
9696
$ruleExtension.Count | Should be 3
97-
($ruleExtension | Where-Object {$_.Name -eq $measureRequired}).Count | Should Be 1
98-
($ruleExtension | Where-Object {$_.Name -eq $singularNouns}).Count | Should Be 1
99-
($ruleExtension | Where-Object {$_.Name -eq $dscIdentical}).Count | Should Be 1
97+
($ruleExtension | Where-Object {$_.RuleName -eq $measureRequired}).Count | Should Be 1
98+
($ruleExtension | Where-Object {$_.RuleName -eq $singularNouns}).Count | Should Be 1
99+
($ruleExtension | Where-Object {$_.RuleName -eq $dscIdentical}).Count | Should Be 1
100100
}
101101
}
102102

103103
Context "When used incorrectly" {
104104
It "file cannot be found" {
105105
$wrongFile = Get-ScriptAnalyzerRule -CustomizedRulePath "This is a wrong rule" 3>&1
106106
($wrongFile | Select-Object -First 1) | Should Match "Cannot find rule extension 'This is a wrong rule'."
107-
($wrongFile | Where-Object {$_.Name -eq $singularNouns}).Count | Should Be 1
107+
($wrongFile | Where-Object {$_.RuleName -eq $singularNouns}).Count | Should Be 1
108108
}
109109

110110
}
@@ -120,4 +120,16 @@ Describe "TestSeverity" {
120120
$rules = Get-ScriptAnalyzerRule -Severity Error,Information
121121
$rules.Count | Should be 8
122122
}
123+
}
124+
125+
Describe "TestWildCard" {
126+
It "filters rules based on the -RuleName wild card input" {
127+
$rules = Get-ScriptAnalyzerRule -RuleName PSDSC*
128+
$rules.Count | Should be 4
129+
}
130+
131+
It "filters rules based on wild card input and severity"{
132+
$rules = Get-ScriptAnalyzerRule -RuleName PSDSC* -Severity Information
133+
$rules.Count | Should be 2
134+
}
123135
}

0 commit comments

Comments
 (0)