From 1b15e8444ae88c23ef497bd3c993e1c76555e0d2 Mon Sep 17 00:00:00 2001 From: quoctruong Date: Fri, 22 May 2015 19:32:49 -0700 Subject: [PATCH 1/2] Fix UseDeclaredVarsMoreThanAssignment not recognizing script variables --- Rules/UseDeclaredVarsMoreThanAssignments.cs | 3 ++- Tests/Rules/UseDeclaredVarsMoreThanAssignmentsNoViolations.ps1 | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Rules/UseDeclaredVarsMoreThanAssignments.cs b/Rules/UseDeclaredVarsMoreThanAssignments.cs index c6e346a4f..b921f4df6 100644 --- a/Rules/UseDeclaredVarsMoreThanAssignments.cs +++ b/Rules/UseDeclaredVarsMoreThanAssignments.cs @@ -54,7 +54,8 @@ public IEnumerable AnalyzeScript(Ast ast, string fileName) foreach (VariableExpressionAst assignmentVarAst in assingmentVarAsts) { //Ignore if variable is global or environment variable - if (!Helper.Instance.IsVariableGlobalOrEnvironment(assignmentVarAst, ast)) + if (!Helper.Instance.IsVariableGlobalOrEnvironment(assignmentVarAst, ast) + && !assignmentVarAst.VariablePath.IsScript) { if (!assignments.ContainsKey(assignmentVarAst.VariablePath.UserPath)) { diff --git a/Tests/Rules/UseDeclaredVarsMoreThanAssignmentsNoViolations.ps1 b/Tests/Rules/UseDeclaredVarsMoreThanAssignmentsNoViolations.ps1 index 237f66589..2884d7de1 100644 --- a/Tests/Rules/UseDeclaredVarsMoreThanAssignmentsNoViolations.ps1 +++ b/Tests/Rules/UseDeclaredVarsMoreThanAssignmentsNoViolations.ps1 @@ -1,2 +1,3 @@ $declaredVars = "Declared Vars" -Write-Ouput $declaredVars \ No newline at end of file +Write-Ouput $declaredVars +$script:thisshouldnotraiseerrors = "this should not raise errors" \ No newline at end of file From 4c45a162273f9576f9e2c1044f48d69b84b33094 Mon Sep 17 00:00:00 2001 From: quoctruong Date: Fri, 22 May 2015 19:40:06 -0700 Subject: [PATCH 2/2] Fix UseDeclaredVarsMoreThanAssignments being raised for setting properties --- Rules/UseDeclaredVarsMoreThanAssignments.cs | 7 ++++--- .../UseDeclaredVarsMoreThanAssignmentsNoViolations.ps1 | 3 ++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Rules/UseDeclaredVarsMoreThanAssignments.cs b/Rules/UseDeclaredVarsMoreThanAssignments.cs index b921f4df6..b1b893497 100644 --- a/Rules/UseDeclaredVarsMoreThanAssignments.cs +++ b/Rules/UseDeclaredVarsMoreThanAssignments.cs @@ -49,11 +49,12 @@ public IEnumerable AnalyzeScript(Ast ast, string fileName) { foreach (AssignmentStatementAst assignmentAst in assignmentAsts) { - assingmentVarAsts = assignmentAst.Left.FindAll(testAst => testAst is VariableExpressionAst, true); ; + // Only checks for the case where lhs is a variable. Ignore things like $foo.property + VariableExpressionAst assignmentVarAst = assignmentAst.Left as VariableExpressionAst; - foreach (VariableExpressionAst assignmentVarAst in assingmentVarAsts) + if (assignmentVarAst != null) { - //Ignore if variable is global or environment variable + //Ignore if variable is global or environment variable if (!Helper.Instance.IsVariableGlobalOrEnvironment(assignmentVarAst, ast) && !assignmentVarAst.VariablePath.IsScript) { diff --git a/Tests/Rules/UseDeclaredVarsMoreThanAssignmentsNoViolations.ps1 b/Tests/Rules/UseDeclaredVarsMoreThanAssignmentsNoViolations.ps1 index 2884d7de1..769c9a2e3 100644 --- a/Tests/Rules/UseDeclaredVarsMoreThanAssignmentsNoViolations.ps1 +++ b/Tests/Rules/UseDeclaredVarsMoreThanAssignmentsNoViolations.ps1 @@ -1,3 +1,4 @@ $declaredVars = "Declared Vars" Write-Ouput $declaredVars -$script:thisshouldnotraiseerrors = "this should not raise errors" \ No newline at end of file +$script:thisshouldnotraiseerrors = "this should not raise errors" +$foo.property = "This also should not raise errors" \ No newline at end of file