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: validate options when comment with just severity enables rule #18133
Conversation
✅ Deploy Preview for docs-eslint canceled.
|
const ruleOptions = Array.isArray(ruleValue) ? ruleValue : [ruleValue]; | ||
let ruleOptions = Array.isArray(ruleValue) ? ruleValue : [ruleValue]; | ||
|
||
assertIsRuleOptions(ruleId, ruleValue); |
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.
Note: I removed this because at this point ruleValue
is always an array, so this wasn't actually checking anything.
eslint/lib/config/flat-config-schema.js
Lines 173 to 177 in 8e13a6b
function assertIsRuleOptions(ruleId, value) { | |
if (typeof value !== "string" && typeof value !== "number" && !Array.isArray(value)) { | |
throw new InvalidRuleOptionsError(ruleId, value); | |
} | |
} |
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. Leaving open for a couple of days to allow others a chance to review.
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, thanks!
Prerequisites checklist
What is the purpose of this pull request? (put an "X" next to an item)
[ ] Documentation update
[x] Bug fix (template)
[ ] New rule (template)
[ ] Changes an existing rule (template)
[ ] Add autofix to a rule
[ ] Add a CLI option
[ ] Add something to the core
[ ] Other, please explain:
Tell us about your environment (
npx eslint --env-info
):What parser are you using (place an "X" next to just one item)?
[x]
Default (Espree)
[ ]
@typescript-eslint/parser
[ ]
@babel/eslint-parser
[ ]
vue-eslint-parser
[ ]
@angular-eslint/template-parser
[ ]
Other
Please show your full configuration:
Configuration
What did you do? Please include the actual source code causing the issue.
/* eslint accessor-pairs: "error" */
What did you expect to happen?
A lint error about invalid configuration for rule
accessor-pairs
, because the final configuration for this rule is["error", "foo"]
(severity from the inline config comment, options from the config file), which isn't valid.What actually happened? Please include the actual, raw output from ESLint.
No errors.
This happens because config arrays (both eslintrc and flat) don't validate options when rule is set to
"off"
in the configuration, which is intended behavior, but when that rule is later enabled by a comment and inherits options from the configurations, those options should be validated.What changes did you make? (Give an overview)
This scenario wasn't covered in #17945. Now I moved the logic that calculates options for a configuration comment to an earlier point so that the validation gets the final options.
Is there anything you'd like reviewers to focus on?