Skip to content

Commit 5d1dfa5

Browse files
committed
Merge pull request #145 from PowerShell/ProgressPreferenceFixBranch
Fix for including ProgressPreference built-in variable in the list of approved uninitialized variables
2 parents 6c388d1 + e52216e commit 5d1dfa5

File tree

4 files changed

+50
-2
lines changed

4 files changed

+50
-2
lines changed

Engine/SpecialVars.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ static SpecialVars()
9191
internal const string WhatIfPreference = "WhatIfPreference";
9292
internal const string WarningPreference = "WarningPreference";
9393
internal const string ConfirmPreference = "ConfirmPreference";
94+
internal const string ProgressPreference = "ProgressPreference";
9495

9596
internal static readonly string[] PreferenceVariables = new string[]
9697
{
@@ -99,7 +100,8 @@ static SpecialVars()
99100
ErrorActionPreference,
100101
WhatIfPreference,
101102
WarningPreference,
102-
ConfirmPreference,
103+
ConfirmPreference,
104+
ProgressPreference
103105
};
104106

105107
internal static readonly Type[] PreferenceVariableTypes = new Type[]
@@ -109,7 +111,8 @@ static SpecialVars()
109111
/* ErrorPreference */ typeof(ActionPreference),
110112
/* WhatIfPreference */ typeof(SwitchParameter),
111113
/* WarningPreference */ typeof(ActionPreference),
112-
/* ConfirmPreference */ typeof(ConfirmImpact),
114+
/* ConfirmPreference */ typeof(ConfirmImpact),
115+
/* ProgressPreference */ typeof(Enum),
113116
};
114117

115118
internal enum AutomaticVariable
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
Import-Module PSScriptAnalyzer
2+
$AvoidUninitializedVariable = "PSAvoidUninitializedVariable"
3+
$violationMessage = "Variable 'MyProgressPreference' is not initialized. Non-global variables must be initialized. To fix a violation of this rule, please initialize non-global variables."
4+
$directory = Split-Path -Parent $MyInvocation.MyCommand.Path
5+
$violations = Invoke-ScriptAnalyzer $directory\AvoidUsingUninitializedVariable.ps1 -IncludeRule $AvoidUninitializedVariable
6+
$noViolations = Invoke-ScriptAnalyzer $directory\AvoidUsingUninitializedVariableNoViolations.ps1 -IncludeRule $AvoidUninitializedVariable
7+
8+
Describe "AvoidUsingUninitializedVariable" {
9+
Context "Script uses uninitialized variables - Violation" {
10+
It "Have 3 rule violations" {
11+
$violations.Count | Should Be 3
12+
}
13+
14+
It "has the correct description message for UninitializedVariable rule violation" {
15+
$violations[0].Message | Should Be $violationMessage
16+
}
17+
}
18+
19+
Context "Script uses initialized variables - No violation" {
20+
It "results in no rule violations" {
21+
$noViolations.Count | Should Be 0
22+
}
23+
}
24+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# Script has uninitialized variables
2+
# Must result in AvoidUsingUninitializedVariablerule violations along with other violations
3+
4+
function Test-MyPreference
5+
{
6+
Write-Verbose $MyProgressPreference
7+
Write-Verbose $MyVerbosePreference
8+
}
9+
10+
Write-Verbose $MyProgressPreference
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Script uses built-in preference variables
2+
# Must not result in AvoidUsingUninitializedVariablerule violations
3+
# However there are other violations in this script - Write-Verbose is not using positional parameters
4+
5+
function Test-Preference
6+
{
7+
Write-Verbose $ProgressPreference
8+
Write-Verbose $VerbosePreference
9+
}
10+
11+
Write-Verbose $ProgressPreference

0 commit comments

Comments
 (0)