Skip to content

Commit

Permalink
Chore: refactor fix of semi
Browse files Browse the repository at this point in the history
  • Loading branch information
mysticatea committed Feb 24, 2017
1 parent d8d97ac commit 6c64259
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 5 deletions.
8 changes: 6 additions & 2 deletions lib/rules/semi.js
Expand Up @@ -71,6 +71,7 @@ module.exports = {
*/
function report(node, missing) {
const lastToken = sourceCode.getLastToken(node);
const nextToken = sourceCode.getTokenAfter(node);
let message,
fix,
loc = lastToken.loc;
Expand All @@ -84,8 +85,11 @@ module.exports = {
} else {
message = "Extra semicolon.";
loc = loc.start;
fix = function(fixer) {
return fixer.remove(lastToken);
fix = function *(fixer) {
yield fixer.remove(lastToken);
if (nextToken) {
yield fixer.keep(nextToken);
}
};
}

Expand Down
6 changes: 4 additions & 2 deletions lib/testers/rule-tester.js
Expand Up @@ -450,9 +450,11 @@ RuleTester.prototype = {
util.format("Should have %d error%s but had %d: %s",
item.errors.length, item.errors.length === 1 ? "" : "s", messages.length, util.inspect(messages)));

const hasMessageOfThisRule = messages.some(m => m.ruleId === ruleName);

for (let i = 0, l = item.errors.length; i < l; i++) {
assert.ok(!("fatal" in messages[i]), `A fatal parsing error occurred: ${messages[i].message}`);
assert.equal(messages[i].ruleId, ruleName, "Error rule name should be the same as the name of the rule being tested");
assert(!messages[i].fatal, `A fatal parsing error occurred: ${messages[i].message}`);
assert(hasMessageOfThisRule, "Error rule name should be the same as the name of the rule being tested");

if (typeof item.errors[i] === "string") {

Expand Down
21 changes: 20 additions & 1 deletion tests/lib/rules/semi.js
Expand Up @@ -169,6 +169,25 @@ ruleTester.run("semi", rule, {
{ code: "export default (foo) => foo.bar();", output: "export default (foo) => foo.bar()", options: ["never"], parserOptions: { sourceType: "module" }, errors: [{ message: "Extra semicolon.", type: "ExportDefaultDeclaration" }] },
{ code: "export default foo = 42;", output: "export default foo = 42", options: ["never"], parserOptions: { sourceType: "module" }, errors: [{ message: "Extra semicolon.", type: "ExportDefaultDeclaration" }] },
{ code: "export default foo += 42;", output: "export default foo += 42", options: ["never"], parserOptions: { sourceType: "module" }, errors: [{ message: "Extra semicolon.", type: "ExportDefaultDeclaration" }] },
{ code: "a;\n++b", output: "a\n++b", options: ["never"], errors: [{ message: "Extra semicolon." }] }
{ code: "a;\n++b", output: "a\n++b", options: ["never"], errors: [{ message: "Extra semicolon." }] },

// https://github.com/eslint/eslint/issues/7928
{
options: ["never"],
code: [
"/*eslint no-extra-semi: error */",
"foo();",
";[0,1,2].forEach(bar)"
].join("\n"),
errors: [
"Extra semicolon.",
"Unnecessary semicolon."
],
output: [
"/*eslint no-extra-semi: error */",
"foo()",
";[0,1,2].forEach(bar)"
].join("\n")
}
]
});

0 comments on commit 6c64259

Please sign in to comment.