style: Add new ESLint rule no-empty-string-for-ifbreak (#10172)

* Add new ESLint rule for ifBreak

* Fix for third argument

* Run fix with new rule

* Address review

* Fix

* Update no-empty-flat-contents-for-if-break.js

* Fix CI config

Co-authored-by: fisker Cheung <lionkay@gmail.com>
This commit is contained in:
Sosuke Suzukiandfisker Cheung authored and GitHub committed 2021-01-29 20:03:11 +09:00
1 parent c3a59148cf
commit 07b30645ec
9 files changed
+94 -7

No files matched your search

@@ -10,5 +10,6 @@ module.exports = {
"prefer-fast-path-each": require("./prefer-fast-path-each"),
"prefer-is-non-empty-array": require("./prefer-is-non-empty-array"),
"require-json-extensions": require("./require-json-extensions"),
"no-empty-flat-contents-for-if-break": require("./no-empty-flat-contents-for-if-break"),
},
};
@@ -0,0 +1,42 @@
"use strict";
const selector = [
"CallExpression",
"[optional=false]",
'[callee.type="Identifier"]',
'[callee.name="ifBreak"]',
"[arguments.length=2]",
'[arguments.1.type="Literal"]',
'[arguments.1.value=""]',
':not([arguments.0.type="SpreadElement"])',
].join("");
const messageId = "no-empty-flat-contents-for-if-break";
module.exports = {
meta: {
type: "suggestion",
docs: {
url:
"https://github.com/prettier/prettier/blob/main/scripts/eslint-plugin-prettier-internal-rules/no-empty-flat-contents-for-if-break.js",
},
messages: {
[messageId]:
"Please don't pass an empty string to second parameter of ifBreak.",
},
fixable: "code",
},
create(context) {
return {
[selector](node) {
const [breakContents] = node.arguments;
context.report({
node,
messageId,
fix: (fixer) =>
fixer.removeRange([breakContents.range[1], node.range[1] - 1]),
});
},
};
},
};
@@ -204,3 +204,46 @@ test("require-json-extensions", {
},
],
});
test("no-empty-flat-contents-for-if-break", {
valid: [
"ifBreak('foo', 'bar')",
"ifBreak(doc1, doc2)",
"ifBreak(',')",
"ifBreak(doc)",
"ifBreak('foo', '', { groupId })",
"ifBreak(...foo, { groupId })",
],
invalid: [
{
code: "ifBreak('foo', '')",
output: "ifBreak('foo')",
errors: [
{
message:
"Please don't pass an empty string to second parameter of ifBreak.",
},
],
},
{
code: "ifBreak('foo' , '' )",
output: "ifBreak('foo')",
errors: [
{
message:
"Please don't pass an empty string to second parameter of ifBreak.",
},
],
},
{
code: "ifBreak(doc, '')",
output: "ifBreak(doc)",
errors: [
{
message:
"Please don't pass an empty string to second parameter of ifBreak.",
},
],
},
],
});