diff --git a/crates/biome_js_analyze/src/lint/nursery/use_default_case.rs b/crates/biome_js_analyze/src/lint/nursery/use_default_case.rs index 8da5a1c3c9d3..604f998af5c5 100644 --- a/crates/biome_js_analyze/src/lint/nursery/use_default_case.rs +++ b/crates/biome_js_analyze/src/lint/nursery/use_default_case.rs @@ -144,16 +144,16 @@ impl Rule for UseDefaultCase { Some( RuleDiagnostic::new( - rule_category!(), - node.range(), - markup! { - "Expected a default case." - }, + rule_category!(), + node.range(), + markup! { + "Expected a default case." + }, ) .note(markup! { "The lack of a default clause can result in unexpected behaviors in your code." }).note(markup! { - "Consider adding a default clause or a comment explicitly stating that the default clause is not required, following the regex /" {comment_pattern} "/" + "Consider adding a default clause or a comment explicitly stating that the default clause is not required, following the regex `/" {comment_pattern} "/`." }), ) } diff --git a/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/invalid.js.snap b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/invalid.js.snap index e367e1214aa7..a427cc9f85b5 100644 --- a/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/invalid.js.snap +++ b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/invalid.js.snap @@ -41,7 +41,7 @@ invalid.js:1:1 lint/nursery/useDefaultCase ━━━━━━━━━━━━ i The lack of a default clause can result in unexpected behaviors in your code. - i Consider adding a default clause or a comment explicitly stating that the default clause is not required, following the regex /^no default$/ + i Consider adding a default clause or a comment explicitly stating that the default clause is not required, following the regex `/^no default$/`. ``` @@ -65,7 +65,7 @@ invalid.js:6:1 lint/nursery/useDefaultCase ━━━━━━━━━━━━ i The lack of a default clause can result in unexpected behaviors in your code. - i Consider adding a default clause or a comment explicitly stating that the default clause is not required, following the regex /^no default$/ + i Consider adding a default clause or a comment explicitly stating that the default clause is not required, following the regex `/^no default$/`. ``` @@ -89,7 +89,7 @@ invalid.js:12:1 lint/nursery/useDefaultCase ━━━━━━━━━━━━ i The lack of a default clause can result in unexpected behaviors in your code. - i Consider adding a default clause or a comment explicitly stating that the default clause is not required, following the regex /^no default$/ + i Consider adding a default clause or a comment explicitly stating that the default clause is not required, following the regex `/^no default$/`. ``` diff --git a/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/invalidAny.js b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/invalidAny.js new file mode 100644 index 000000000000..7b92e5ec0048 --- /dev/null +++ b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/invalidAny.js @@ -0,0 +1,4 @@ +switch (a) { + case 1: + break; +} diff --git a/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/invalidAny.js.snap b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/invalidAny.js.snap new file mode 100644 index 000000000000..b7ac71e9ce68 --- /dev/null +++ b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/invalidAny.js.snap @@ -0,0 +1,33 @@ +--- +source: crates/biome_js_analyze/tests/spec_tests.rs +expression: invalidAny.js +--- +# Input +```jsx +switch (a) { + case 1: + break; +} + +``` + +# Diagnostics +``` +invalidAny.js:1:1 lint/nursery/useDefaultCase ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + + ! Expected a default case. + + > 1 │ switch (a) { + │ ^^^^^^^^^^^^ + > 2 │ case 1: + > 3 │ break; + > 4 │ } + │ ^ + 5 │ + + i The lack of a default clause can result in unexpected behaviors in your code. + + i Consider adding a default clause or a comment explicitly stating that the default clause is not required, following the regex `/.?/`. + + +``` diff --git a/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/invalidAny.options.json b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/invalidAny.options.json new file mode 100644 index 000000000000..79b1063b415f --- /dev/null +++ b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/invalidAny.options.json @@ -0,0 +1,15 @@ +{ + "$schema": "../../../../../../packages/@biomejs/biome/configuration_schema.json", + "linter": { + "rules": { + "nursery": { + "useDefaultCase": { + "level": "error", + "options": { + "commentPattern": ".?" + } + } + } + } + } +} diff --git a/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/invalidCommentPattern.js.snap b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/invalidCommentPattern.js.snap index a11eb278546f..5287b98bd24e 100644 --- a/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/invalidCommentPattern.js.snap +++ b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/invalidCommentPattern.js.snap @@ -53,7 +53,7 @@ invalidCommentPattern.js:1:1 lint/nursery/useDefaultCase ━━━━━━━ i The lack of a default clause can result in unexpected behaviors in your code. - i Consider adding a default clause or a comment explicitly stating that the default clause is not required, following the regex /skip default(\s\d)*/ + i Consider adding a default clause or a comment explicitly stating that the default clause is not required, following the regex `/skip default(\s\d)*/`. ``` @@ -77,7 +77,7 @@ invalidCommentPattern.js:6:1 lint/nursery/useDefaultCase ━━━━━━━ i The lack of a default clause can result in unexpected behaviors in your code. - i Consider adding a default clause or a comment explicitly stating that the default clause is not required, following the regex /skip default(\s\d)*/ + i Consider adding a default clause or a comment explicitly stating that the default clause is not required, following the regex `/skip default(\s\d)*/`. ``` @@ -102,7 +102,7 @@ invalidCommentPattern.js:12:1 lint/nursery/useDefaultCase ━━━━━━━ i The lack of a default clause can result in unexpected behaviors in your code. - i Consider adding a default clause or a comment explicitly stating that the default clause is not required, following the regex /skip default(\s\d)*/ + i Consider adding a default clause or a comment explicitly stating that the default clause is not required, following the regex `/skip default(\s\d)*/`. ``` @@ -126,7 +126,7 @@ invalidCommentPattern.js:19:1 lint/nursery/useDefaultCase ━━━━━━━ i The lack of a default clause can result in unexpected behaviors in your code. - i Consider adding a default clause or a comment explicitly stating that the default clause is not required, following the regex /skip default(\s\d)*/ + i Consider adding a default clause or a comment explicitly stating that the default clause is not required, following the regex `/skip default(\s\d)*/`. ``` @@ -149,7 +149,7 @@ invalidCommentPattern.js:25:1 lint/nursery/useDefaultCase ━━━━━━━ i The lack of a default clause can result in unexpected behaviors in your code. - i Consider adding a default clause or a comment explicitly stating that the default clause is not required, following the regex /skip default(\s\d)*/ + i Consider adding a default clause or a comment explicitly stating that the default clause is not required, following the regex `/skip default(\s\d)*/`. ``` diff --git a/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/invalidDefaultOmitted.js b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/invalidDefaultOmitted.js new file mode 100644 index 000000000000..28918f0a6edf --- /dev/null +++ b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/invalidDefaultOmitted.js @@ -0,0 +1,6 @@ +switch (a) { + case 1: + break; + // default omitted intentionally + // TODO: add default case +} diff --git a/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/invalidDefaultOmitted.js.snap b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/invalidDefaultOmitted.js.snap new file mode 100644 index 000000000000..a87267223383 --- /dev/null +++ b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/invalidDefaultOmitted.js.snap @@ -0,0 +1,37 @@ +--- +source: crates/biome_js_analyze/tests/spec_tests.rs +expression: invalidDefaultOmitted.js +--- +# Input +```jsx +switch (a) { + case 1: + break; + // default omitted intentionally + // TODO: add default case +} + +``` + +# Diagnostics +``` +invalidDefaultOmitted.js:1:1 lint/nursery/useDefaultCase ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + + ! Expected a default case. + + > 1 │ switch (a) { + │ ^^^^^^^^^^^^ + > 2 │ case 1: + > 3 │ break; + > 4 │ // default omitted intentionally + > 5 │ // TODO: add default case + > 6 │ } + │ ^ + 7 │ + + i The lack of a default clause can result in unexpected behaviors in your code. + + i Consider adding a default clause or a comment explicitly stating that the default clause is not required, following the regex `/default omitted/`. + + +``` diff --git a/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/invalidDefaultOmitted.options.json b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/invalidDefaultOmitted.options.json new file mode 100644 index 000000000000..39ddce5f6065 --- /dev/null +++ b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/invalidDefaultOmitted.options.json @@ -0,0 +1,15 @@ +{ + "$schema": "../../../../../../packages/@biomejs/biome/configuration_schema.json", + "linter": { + "rules": { + "nursery": { + "useDefaultCase": { + "level": "error", + "options": { + "commentPattern": "default omitted" + } + } + } + } + } +} diff --git a/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/invalidSkippedDefaultCase.js b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/invalidSkippedDefaultCase.js new file mode 100644 index 000000000000..0dbfe837f633 --- /dev/null +++ b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/invalidSkippedDefaultCase.js @@ -0,0 +1,5 @@ +switch (a) { + case 1: + break; + // no default +} diff --git a/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/invalidSkippedDefaultCase.js.snap b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/invalidSkippedDefaultCase.js.snap new file mode 100644 index 000000000000..97ed4989bc2b --- /dev/null +++ b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/invalidSkippedDefaultCase.js.snap @@ -0,0 +1,35 @@ +--- +source: crates/biome_js_analyze/tests/spec_tests.rs +expression: invalidSkippedDefaultCase.js +--- +# Input +```jsx +switch (a) { + case 1: + break; + // no default +} + +``` + +# Diagnostics +``` +invalidSkippedDefaultCase.js:1:1 lint/nursery/useDefaultCase ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + + ! Expected a default case. + + > 1 │ switch (a) { + │ ^^^^^^^^^^^^ + > 2 │ case 1: + > 3 │ break; + > 4 │ // no default + > 5 │ } + │ ^ + 6 │ + + i The lack of a default clause can result in unexpected behaviors in your code. + + i Consider adding a default clause or a comment explicitly stating that the default clause is not required, following the regex `/skipped default case/`. + + +``` diff --git a/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/invalidSkippedDefaultCase.options.json b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/invalidSkippedDefaultCase.options.json new file mode 100644 index 000000000000..a410fbd66bb1 --- /dev/null +++ b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/invalidSkippedDefaultCase.options.json @@ -0,0 +1,15 @@ +{ + "$schema": "../../../../../../packages/@biomejs/biome/configuration_schema.json", + "linter": { + "rules": { + "nursery": { + "useDefaultCase": { + "level": "error", + "options": { + "commentPattern": "skipped default case" + } + } + } + } + } +} diff --git a/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validAny.js b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validAny.js new file mode 100644 index 000000000000..d48412d5e22a --- /dev/null +++ b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validAny.js @@ -0,0 +1,5 @@ +switch (a) { + case 1: + break; + // +} diff --git a/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validAny.js.snap b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validAny.js.snap new file mode 100644 index 000000000000..dfa7c553d1b3 --- /dev/null +++ b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validAny.js.snap @@ -0,0 +1,13 @@ +--- +source: crates/biome_js_analyze/tests/spec_tests.rs +expression: validAny.js +--- +# Input +```jsx +switch (a) { + case 1: + break; + // +} + +``` diff --git a/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validAny.options.json b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validAny.options.json new file mode 100644 index 000000000000..79b1063b415f --- /dev/null +++ b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validAny.options.json @@ -0,0 +1,15 @@ +{ + "$schema": "../../../../../../packages/@biomejs/biome/configuration_schema.json", + "linter": { + "rules": { + "nursery": { + "useDefaultCase": { + "level": "error", + "options": { + "commentPattern": ".?" + } + } + } + } + } +} diff --git a/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validDefault.js b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validDefault.js new file mode 100644 index 000000000000..859d8a4c7f81 --- /dev/null +++ b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validDefault.js @@ -0,0 +1,8 @@ +switch (a) { + case 1: + break; + /* + TODO: + throw error in default case + */ +} diff --git a/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validDefault.js.snap b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validDefault.js.snap new file mode 100644 index 000000000000..e71214800a58 --- /dev/null +++ b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validDefault.js.snap @@ -0,0 +1,16 @@ +--- +source: crates/biome_js_analyze/tests/spec_tests.rs +expression: validDefault.js +--- +# Input +```jsx +switch (a) { + case 1: + break; + /* + TODO: + throw error in default case + */ +} + +``` diff --git a/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validDefault.options.json b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validDefault.options.json new file mode 100644 index 000000000000..6deaf636c379 --- /dev/null +++ b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validDefault.options.json @@ -0,0 +1,15 @@ +{ + "$schema": "../../../../../../packages/@biomejs/biome/configuration_schema.json", + "linter": { + "rules": { + "nursery": { + "useDefaultCase": { + "level": "error", + "options": { + "commentPattern": "default" + } + } + } + } + } +} diff --git a/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validDefaultCaseOmitted.js b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validDefaultCaseOmitted.js new file mode 100644 index 000000000000..c974de03b90e --- /dev/null +++ b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validDefaultCaseOmitted.js @@ -0,0 +1,6 @@ +switch (a) { + case 1: + break; + default: + break; +} diff --git a/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validDefaultCaseOmitted.js.snap b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validDefaultCaseOmitted.js.snap new file mode 100644 index 000000000000..3ffec105215d --- /dev/null +++ b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validDefaultCaseOmitted.js.snap @@ -0,0 +1,14 @@ +--- +source: crates/biome_js_analyze/tests/spec_tests.rs +expression: validDefaultCaseOmitted.js +--- +# Input +```jsx +switch (a) { + case 1: + break; + default: + break; +} + +``` diff --git a/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validDefaultCaseOmitted.options.json b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validDefaultCaseOmitted.options.json new file mode 100644 index 000000000000..634b570d4e74 --- /dev/null +++ b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validDefaultCaseOmitted.options.json @@ -0,0 +1,15 @@ +{ + "$schema": "../../../../../../packages/@biomejs/biome/configuration_schema.json", + "linter": { + "rules": { + "nursery": { + "useDefaultCase": { + "level": "error", + "options": { + "commentPattern": "default case omitted" + } + } + } + } + } +} diff --git a/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validSkipDefault.js b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validSkipDefault.js new file mode 100644 index 000000000000..9c93d7e7bf51 --- /dev/null +++ b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validSkipDefault.js @@ -0,0 +1,5 @@ +switch (a) { + case 1: + break; + // skip default case +} diff --git a/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validSkipDefault.js.snap b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validSkipDefault.js.snap new file mode 100644 index 000000000000..3eaf4a53fb07 --- /dev/null +++ b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validSkipDefault.js.snap @@ -0,0 +1,13 @@ +--- +source: crates/biome_js_analyze/tests/spec_tests.rs +expression: validSkipDefault.js +--- +# Input +```jsx +switch (a) { + case 1: + break; + // skip default case +} + +``` diff --git a/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validSkipDefault.options.json b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validSkipDefault.options.json new file mode 100644 index 000000000000..b49504700999 --- /dev/null +++ b/crates/biome_js_analyze/tests/specs/nursery/useDefaultCase/validSkipDefault.options.json @@ -0,0 +1,15 @@ +{ + "$schema": "../../../../../../packages/@biomejs/biome/configuration_schema.json", + "linter": { + "rules": { + "nursery": { + "useDefaultCase": { + "level": "error", + "options": { + "commentPattern": "^skip default" + } + } + } + } + } +}