From faf48868c002f35d13d69f3472120b66c1e6a234 Mon Sep 17 00:00:00 2001 From: Chris Date: Sun, 3 Dec 2017 14:02:53 +0000 Subject: [PATCH 1/2] Fix FixPSUseDeclaredVarsMoreThanAssignments to also detect variables that are strongly typed. --- Rules/UseDeclaredVarsMoreThanAssignments.cs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Rules/UseDeclaredVarsMoreThanAssignments.cs b/Rules/UseDeclaredVarsMoreThanAssignments.cs index f2731474a..09db386f7 100644 --- a/Rules/UseDeclaredVarsMoreThanAssignments.cs +++ b/Rules/UseDeclaredVarsMoreThanAssignments.cs @@ -135,6 +135,17 @@ private IEnumerable AnalyzeScriptBlockAst(ScriptBlockAst scrip // Only checks for the case where lhs is a variable. Ignore things like $foo.property VariableExpressionAst assignmentVarAst = assignmentAst.Left as VariableExpressionAst; + if (assignmentVarAst == null) + { + // If the variable is declared in a strongly typed way, e.g. [string]$s = 'foo' then the type is ConvertExpressionAst. + // Therefore we need to the VariableExpressionAst from its Child property. + var assignmentVarAstAsConvertExpressionAst = assignmentAst.Left as ConvertExpressionAst; + if (assignmentVarAstAsConvertExpressionAst != null && assignmentVarAstAsConvertExpressionAst.Child != null) + { + assignmentVarAst = assignmentVarAstAsConvertExpressionAst.Child as VariableExpressionAst; + } + } + if (assignmentVarAst != null) { // Ignore if variable is global or environment variable or scope is function From 68840ace7ac2145c1d5aad2d54e079c9af365b5e Mon Sep 17 00:00:00 2001 From: Chris Date: Sun, 3 Dec 2017 14:21:02 +0000 Subject: [PATCH 2/2] Add PSUseDeclaredVarsMoreThanAssignments test for strongly typed variables --- Tests/Rules/UseDeclaredVarsMoreThanAssignments.tests.ps1 | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Tests/Rules/UseDeclaredVarsMoreThanAssignments.tests.ps1 b/Tests/Rules/UseDeclaredVarsMoreThanAssignments.tests.ps1 index 4f94c35d3..7d3f0eba3 100644 --- a/Tests/Rules/UseDeclaredVarsMoreThanAssignments.tests.ps1 +++ b/Tests/Rules/UseDeclaredVarsMoreThanAssignments.tests.ps1 @@ -38,6 +38,12 @@ function MyFunc2() { Should Be 1 } + It "flags strongly typed variables" { + Invoke-ScriptAnalyzer -ScriptDefinition '[string]$s=''mystring''' -IncludeRule $violationName | ` + Get-Count | ` + Should Be 1 + } + It "does not flag `$InformationPreference variable" { Invoke-ScriptAnalyzer -ScriptDefinition '$InformationPreference=Stop' -IncludeRule $violationName | ` Get-Count | `