- Notifications
You must be signed in to change notification settings - Fork407
Fixed erroneous PSUseDeclaredVarsMoreThanAssignments for some globals variables#2013
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Uh oh!
There was an error while loading.Please reload this page.
Conversation
liamjpeters commentedJul 11, 2024
Really clear explanation, thanks for getting to the root of the issue! 🙂 LGTM! |
bergmeister left a comment• edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Looks good. Sorry for late review. Updated branch from main since CI is now on GitHub Actions. If it passed, happy to merge if@andyleejordan is ok as well?
andyleejordan commentedFeb 18, 2025
Nice fix! |
3a91195 intoPowerShell:mainUh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
PR Summary
This PR fixes the following longstanding issue:#1300 (Global variables are erroneously reported as "never used")
The issue exists because
Helper.IsVariableGlobalOrEnvironmentuses anAstto key intoVariableAnalysisDictionary, callingVariableAnalysis.IsGlobalOrEnvironmenton the value returned to determine whether or not the variable is a global. However, in some cases, the key does not exist in the dictionary, resulting in the method returningfalse. Fortunately,VariableAnalysis.IsGlobalOrEnvironmentdepends on no instance members, instead relying solely on the properties ofVariableExpressionAst, which is passed in. As such,VariableAnalysis.IsGlobalOrEnvironmentcan be madestaticwith no consequence, allowingHelper.IsVariableGlobalOrEnvironmentto call the method without the dictionary operations.Also of note, the current implementation is somewhat redundant, with
UseDeclaredVarsMoreThanAssignments.AnalyzeScriptBlockAstcheckingVariablePath.DriveNameseparately, which is why the issue does not affect environment variables despiteVariableAnalysis.IsGlobalOrEnvironmenterroneously returningfalsein some cases.PR Checklist
.cs,.ps1and.psm1files have the correct copyright headerWIP:to the beginning of the title and remove the prefix when the PR is ready.