The rule PSAvoidAssignmentToAutomaticVariable alerts when no assignment has taken place.
It does so when $true or $false is used within the ValidateSet attribute of a parameter. Only the automatic variables $true and $false are permitted here - all other read-only automatic variables are a ParseError.
Currently:
param(
[ValidateSet($true, $false)]
$MyVar
)
Is flagged by PSAvoidAssignmentToAutomaticVariable.
The Variable 'true' cannot be assigned since it is a readonly automatic variable that is built into PowerShell, please use a different name.
Interestingly when a ValidateSet is used in this way outside of a param block - it does not get flagged.
This PR adds a check for variable expressions found within parameters which are the child of an Attribute, and skips them. Similarly to skipping over the variable expressions that are children of NamedAttributeArguments, which is already present.
This does not prevent the bodies of scriptblocks, within attributes, from being checked. So for instance the below is still flagged by PSAvoidAssignmentToAutomaticVariable.
PR Summary
The rule
PSAvoidAssignmentToAutomaticVariable
alerts when no assignment has taken place.It does so when
$true
or$false
is used within theValidateSet
attribute of a parameter. Only the automatic variables$true
and$false
are permitted here - all other read-only automatic variables are aParseError
.Currently:
Is flagged by
PSAvoidAssignmentToAutomaticVariable
.This PR adds a check for variable expressions found within parameters which are the child of an
Attribute
, and skips them. Similarly to skipping over the variable expressions that are children ofNamedAttributeArgument
s, which is already present.This does not prevent the bodies of scriptblocks, within attributes, from being checked. So for instance the below is still flagged by
PSAvoidAssignmentToAutomaticVariable
.Resolves #1970
PR Checklist
.cs
,.ps1
and.psm1
files have the correct copyright headerWIP:
to the beginning of the title and remove the prefix when the PR is ready.