GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — Enhance UseDeclaredVarsMoreThanAssignments to detect also take into account the usage of Get-Variable with an array of variables and usage of named parameter -Name by bergmeister · Pull Request #1310 · PowerShell/PSScriptAnalyzer

Conversation

@bergmeister

@bergmeister Christoph Bergmeister (bergmeister) commented Aug 16, 2019

Copy link
Copy Markdown
Collaborator

PR Summary

Fixes #1301 by enhancing the parsing of the Get-Variable AST to also check if an array is passed or if the -Name parameter is used as a named parameter (including cases where it is shortened to -n).
Also refactored logic into it's own static method for better readability and performance.
Since reverse engineering a CommandAst into the used parameters is quite complex, I am not going to further enhance it.

PR Checklist

  • PR has a meaningful title
    • Use the present tense and imperative mood when describing your changes
  • [x Summarized changes
  • Change is not breaking
  • Make sure all .cs, .ps1 and .psm1 files have the correct copyright header
  • Make sure you've added a new test if existing tests do not effectively test the code changed and/or updated documentation
  • This PR is ready to merge and is not Work in Progress.
    • If the PR is work in progress, please add the prefix WIP: to the beginning of the title and remove the prefix when the PR is ready.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Christoph Bergmeister (bergmeister) added 3 commits August 16, 2019 18:13
@bergmeister
Parse Array syntax of Get-Variable
de42295
@bergmeister
check named parameter better to be -Name or shortened versions and ad…
e6d52fe
…d more tests
@bergmeister
Fix last edge cases and refactor into method
5daadfd
@bergmeister Christoph Bergmeister (bergmeister) added Area - Rules False Positive Area - PSUseDeclaredVarsMoreThanAssignments labels Aug 16, 2019
@bergmeister
Christoph Bergmeister (bergmeister) marked this pull request as ready for review August 17, 2019 09:10
@bergmeister Christoph Bergmeister (bergmeister) assigned Rob Holt (rjmholt) and James Truher (JamesWTruher) Aug 17, 2019
rjmholt
Rob Holt (rjmholt) approved these changes Aug 19, 2019
View reviewed changes

@rjmholt Rob Holt (rjmholt) left a comment •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Contributor

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.

This makes me think we should really invest in some general purpose AST functionality (like parameter parsing/binding tools) (but probably don't have the time currently).

Otherwise, LGTM

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread Rules/UseDeclaredVarsMoreThanAssignments.cs Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread Rules/UseDeclaredVarsMoreThanAssignments.cs Resolved

Uh oh!

There was an error while loading. Please reload this page.

@bergmeister
Apply PR suggestions: Use shorter pattern matching syntax and inline/…
9036c23
…simplify local method
@bergmeister

Christoph Bergmeister (bergmeister) commented Aug 19, 2019

Copy link
Copy Markdown
Collaborator Author

Yes, I agree something like a parameter binder helper would be nice but I think it would require the runtime and be no purely static just based on the AST. Maybe some of the parameter binder functionality in PowerShell could be exposed?

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@bergmeister
Christoph Bergmeister (bergmeister) merged commit bba8fed into PowerShell:master Aug 19, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

1 more reviewer
@rjmholt Rob Holt (rjmholt) rjmholt approved these changes
Reviewers whose approvals may not affect merge requirements

Uh oh!

There was an error while loading. Please reload this page.

Assignees

@rjmholt Rob Holt (rjmholt)

@JamesWTruher James Truher (JamesWTruher)

Labels

Area - PSUseDeclaredVarsMoreThanAssignments Area - Rules

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

PSUseDeclaredVarsMoreThanAssignments reported on "get-variable -include var1,var2"

Uh oh!

There was an error while loading. Please reload this page.

3 participants

@bergmeister @rjmholt @JamesWTruher
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.