Skip to content

Commit f976b2f

Browse files
authored
fix: make rule severity case-sensitive in flat config (#17619)
Fixes #17570
1 parent 0edfe36 commit f976b2f

File tree

3 files changed

+51
-3
lines changed

3 files changed

+51
-3
lines changed

lib/config/flat-config-schema.js

+1-3
Original file line numberDiff line numberDiff line change
@@ -179,9 +179,7 @@ class InvalidRuleSeverityError extends Error {
179179
* @throws {InvalidRuleSeverityError} If the value isn't a valid rule severity.
180180
*/
181181
function assertIsRuleSeverity(ruleId, value) {
182-
const severity = typeof value === "string"
183-
? ruleSeverities.get(value.toLowerCase())
184-
: ruleSeverities.get(value);
182+
const severity = ruleSeverities.get(value);
185183

186184
if (typeof severity === "undefined") {
187185
throw new InvalidRuleSeverityError(ruleId, value);

tests/lib/config/flat-config-array.js

+11
Original file line numberDiff line numberDiff line change
@@ -1726,6 +1726,17 @@ describe("FlatConfigArray", () => {
17261726
], "Key \"rules\": Key \"foo\": Expected severity of \"off\", 0, \"warn\", 1, \"error\", or 2.");
17271727
});
17281728

1729+
it("should error when a string rule severity is not in lowercase", async () => {
1730+
1731+
await assertInvalidConfig([
1732+
{
1733+
rules: {
1734+
foo: "Error"
1735+
}
1736+
}
1737+
], "Key \"rules\": Key \"foo\": Expected severity of \"off\", 0, \"warn\", 1, \"error\", or 2.");
1738+
});
1739+
17291740
it("should error when an invalid rule severity is set in an array", async () => {
17301741

17311742
await assertInvalidConfig([

tests/lib/linter/linter.js

+39
Original file line numberDiff line numberDiff line change
@@ -1932,6 +1932,22 @@ describe("Linter", () => {
19321932
assert.strictEqual(suppressedMessages.length, 0);
19331933
});
19341934

1935+
it("should enable rule configured using a string severity that contains uppercase letters", () => {
1936+
const code = "/*eslint no-alert: \"Error\"*/ alert('test');";
1937+
const config = { rules: {} };
1938+
1939+
const messages = linter.verify(code, config, filename);
1940+
const suppressedMessages = linter.getSuppressedMessages();
1941+
1942+
assert.strictEqual(messages.length, 1);
1943+
assert.strictEqual(messages[0].ruleId, "no-alert");
1944+
assert.strictEqual(messages[0].severity, 2);
1945+
assert.strictEqual(messages[0].message, "Unexpected alert.");
1946+
assert.include(messages[0].nodeType, "CallExpression");
1947+
1948+
assert.strictEqual(suppressedMessages.length, 0);
1949+
});
1950+
19351951
it("rules should not change initial config", () => {
19361952
const config = { rules: { strict: 2 } };
19371953
const codeA = "/*eslint strict: 0*/ function bar() { return 2; }";
@@ -12353,6 +12369,29 @@ describe("Linter with FlatConfigArray", () => {
1235312369
assert.strictEqual(suppressedMessages.length, 0);
1235412370
});
1235512371

12372+
it("should report a violation when a rule is configured using a string severity that contains uppercase letters", () => {
12373+
const messages = linter.verify("/*eslint no-alert: \"Error\"*/ alert('test');", {});
12374+
const suppressedMessages = linter.getSuppressedMessages();
12375+
12376+
assert.deepStrictEqual(
12377+
messages,
12378+
[
12379+
{
12380+
severity: 2,
12381+
ruleId: "no-alert",
12382+
message: "Inline configuration for rule \"no-alert\" is invalid:\n\tExpected severity of \"off\", 0, \"warn\", 1, \"error\", or 2. You passed \"Error\".\n",
12383+
line: 1,
12384+
column: 1,
12385+
endLine: 1,
12386+
endColumn: 29,
12387+
nodeType: null
12388+
}
12389+
]
12390+
);
12391+
12392+
assert.strictEqual(suppressedMessages.length, 0);
12393+
});
12394+
1235612395
it("should report a violation when the config violates a rule's schema", () => {
1235712396
const messages = linter.verify("/* eslint no-alert: [error, {nonExistentPropertyName: true}]*/", {});
1235812397
const suppressedMessages = linter.getSuppressedMessages();

0 commit comments

Comments
 (0)