Skip to content

Commit a035491

Browse files
kalgizbergmeister
authored andcommitted
AvoidDefaultValueForMandatoryParameter triggers when the field has specification: Mandatory=value and value!=0 (#969)
* AvoidDefaultValueForMandatoryParameter triggers when the field has specification: Mandatory=value and value!=0 * Add tests for AvoidDefaultValueForMandatoryParameter rule. * Code cleanup for AvoidDefaultValueForMandatoryParameter rule fix.
1 parent 703ebe4 commit a035491

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

Rules/AvoidDefaultValueForMandatoryParameter.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,10 @@ public IEnumerable<DiagnosticRecord> AnalyzeScript(Ast ast, string fileName)
5151
{
5252
if (String.Equals(namedArgument.ArgumentName, "mandatory", StringComparison.OrdinalIgnoreCase))
5353
{
54-
// 2 cases: [Parameter(Mandatory)] and [Parameter(Mandatory=$true)]
55-
if (namedArgument.ExpressionOmitted || (!namedArgument.ExpressionOmitted && String.Equals(namedArgument.Argument.Extent.Text, "$true", StringComparison.OrdinalIgnoreCase)))
54+
// 3 cases: [Parameter(Mandatory)], [Parameter(Mandatory=$true)] and [Parameter(Mandatory=value)] where value is not equal to 0.
55+
if (namedArgument.ExpressionOmitted
56+
|| (String.Equals(namedArgument.Argument.Extent.Text, "$true", StringComparison.OrdinalIgnoreCase))
57+
|| (int.TryParse(namedArgument.Argument.Extent.Text, out int mandatoryValue) && mandatoryValue != 0))
5658
{
5759
mandatory = true;
5860
break;

Tests/Rules/AvoidDefaultValueForMandatoryParameter.tests.ps1

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,12 @@ Describe "AvoidDefaultValueForMandatoryParameter" {
1313
Where-Object { $_.RuleName -eq $ruleName }
1414
$violations.Count | Should -Be 1
1515
}
16+
17+
It "returns violations when the parameter is specified as mandatory=1 and has a default value" {
18+
$violations = Invoke-ScriptAnalyzer -ScriptDefinition 'Function foo{ Param([Parameter(Mandatory=1)]$Param1=''defaultValue'') }' |
19+
Where-Object { $_.RuleName -eq $ruleName }
20+
$violations.Count | Should -Be 1
21+
}
1622
}
1723

1824
Context "When there are no violations" {
@@ -21,5 +27,11 @@ Describe "AvoidDefaultValueForMandatoryParameter" {
2127
Where-Object { $_.RuleName -eq $ruleName }
2228
$violations.Count | Should -Be 0
2329
}
30+
31+
It "returns no violations when the parameter is specified as mandatory=0 and has a default value" {
32+
$violations = Invoke-ScriptAnalyzer -ScriptDefinition 'Function foo{ Param([Parameter(Mandatory=0)]$Param1=''val1'') }' |
33+
Where-Object { $_.RuleName -eq $ruleName }
34+
$violations.Count | Should -Be 0
35+
}
2436
}
2537
}

0 commit comments

Comments
 (0)