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 our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix: no-param-reassign false positive on destructuring (fixes #8279) #8281
Conversation
This updates no-param-reassign to stop traversing up the AST if it encounters a Property node where the variable reference is part of the key.
LGTM |
tests/lib/rules/no-param-reassign.js
Outdated
code: "function foo(bar) { ({foo: bar.a} = {}); }", | ||
parserOptions: { ecmaVersion: 6 }, | ||
options: [{ props: true }], | ||
errors: [{ message: "Assignment to property of function parameter 'bar'." }] | ||
} |
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.
I'd like to see the test function foo(a) { ({a} = obj); }
as invalid.
LGTM |
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.
LGTM, thank you!
I had been worried that it does not check computed
property.
What is the purpose of this pull request? (put an "X" next to item)
[x] Bug fix (#8279)
What changes did you make? (Give an overview)
This updates no-param-reassign to stop traversing up the AST if it encounters a Property node where the variable reference is part of the key.
This fix keeps the general strategy of the rule in place. However, while I haven't investigated it in depth, the rule strategy seems a bit fragile -- it reports any reference to a variable on the left side of an assignment, excluding some specific cases such as computed properties. It's possible there are more cases like this that cause false positives -- if so, we might want to rethink how this rule is implemented.
Is there anything you'd like reviewers to focus on?
Nothing in particular