Skip to content

Commit

Permalink
Update: add endColumn to no-useless-escape (fixes #11629)
Browse files Browse the repository at this point in the history
  • Loading branch information
g-plane committed May 30, 2019
1 parent 9590587 commit 9ca35be
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 50 deletions.
7 changes: 6 additions & 1 deletion lib/rules/no-useless-escape.js
Expand Up @@ -102,9 +102,14 @@ module.exports = {
* @returns {void}
*/
function report(node, startOffset, character) {
const start = sourceCode.getLocFromIndex(sourceCode.getIndexFromLoc(node.loc.start) + startOffset);

context.report({
node,
loc: sourceCode.getLocFromIndex(sourceCode.getIndexFromLoc(node.loc.start) + startOffset),
loc: {
start,
end: { line: start.line, column: start.column + 1 }
},
message: "Unnecessary escape character: \\{{character}}.",
data: { character }
});
Expand Down
98 changes: 49 additions & 49 deletions tests/lib/rules/no-useless-escape.js
Expand Up @@ -127,163 +127,163 @@ ruleTester.run("no-useless-escape", rule, {
],

invalid: [
{ code: "var foo = /\\#/;", errors: [{ line: 1, column: 12, message: "Unnecessary escape character: \\#.", type: "Literal" }] },
{ code: "var foo = /\\;/;", errors: [{ line: 1, column: 12, message: "Unnecessary escape character: \\;.", type: "Literal" }] },
{ code: "var foo = \"\\'\";", errors: [{ line: 1, column: 12, message: "Unnecessary escape character: \\'.", type: "Literal" }] },
{ code: "var foo = \"\\#/\";", errors: [{ line: 1, column: 12, message: "Unnecessary escape character: \\#.", type: "Literal" }] },
{ code: "var foo = \"\\a\"", errors: [{ line: 1, column: 12, message: "Unnecessary escape character: \\a.", type: "Literal" }] },
{ code: "var foo = \"\\B\";", errors: [{ line: 1, column: 12, message: "Unnecessary escape character: \\B.", type: "Literal" }] },
{ code: "var foo = \"\\@\";", errors: [{ line: 1, column: 12, message: "Unnecessary escape character: \\@.", type: "Literal" }] },
{ code: "var foo = \"foo \\a bar\";", errors: [{ line: 1, column: 16, message: "Unnecessary escape character: \\a.", type: "Literal" }] },
{ code: "var foo = '\\\"';", errors: [{ line: 1, column: 12, message: "Unnecessary escape character: \\\".", type: "Literal" }] },
{ code: "var foo = '\\#';", errors: [{ line: 1, column: 12, message: "Unnecessary escape character: \\#.", type: "Literal" }] },
{ code: "var foo = '\\$';", errors: [{ line: 1, column: 12, message: "Unnecessary escape character: \\$.", type: "Literal" }] },
{ code: "var foo = '\\p';", errors: [{ line: 1, column: 12, message: "Unnecessary escape character: \\p.", type: "Literal" }] },
{ code: "var foo = /\\#/;", errors: [{ line: 1, column: 12, endColumn: 13, message: "Unnecessary escape character: \\#.", type: "Literal" }] },
{ code: "var foo = /\\;/;", errors: [{ line: 1, column: 12, endColumn: 13, message: "Unnecessary escape character: \\;.", type: "Literal" }] },
{ code: "var foo = \"\\'\";", errors: [{ line: 1, column: 12, endColumn: 13, message: "Unnecessary escape character: \\'.", type: "Literal" }] },
{ code: "var foo = \"\\#/\";", errors: [{ line: 1, column: 12, endColumn: 13, message: "Unnecessary escape character: \\#.", type: "Literal" }] },
{ code: "var foo = \"\\a\"", errors: [{ line: 1, column: 12, endColumn: 13, message: "Unnecessary escape character: \\a.", type: "Literal" }] },
{ code: "var foo = \"\\B\";", errors: [{ line: 1, column: 12, endColumn: 13, message: "Unnecessary escape character: \\B.", type: "Literal" }] },
{ code: "var foo = \"\\@\";", errors: [{ line: 1, column: 12, endColumn: 13, message: "Unnecessary escape character: \\@.", type: "Literal" }] },
{ code: "var foo = \"foo \\a bar\";", errors: [{ line: 1, column: 16, endColumn: 17, message: "Unnecessary escape character: \\a.", type: "Literal" }] },
{ code: "var foo = '\\\"';", errors: [{ line: 1, column: 12, endColumn: 13, message: "Unnecessary escape character: \\\".", type: "Literal" }] },
{ code: "var foo = '\\#';", errors: [{ line: 1, column: 12, endColumn: 13, message: "Unnecessary escape character: \\#.", type: "Literal" }] },
{ code: "var foo = '\\$';", errors: [{ line: 1, column: 12, endColumn: 13, message: "Unnecessary escape character: \\$.", type: "Literal" }] },
{ code: "var foo = '\\p';", errors: [{ line: 1, column: 12, endColumn: 13, message: "Unnecessary escape character: \\p.", type: "Literal" }] },
{
code: "var foo = '\\p\\a\\@';",
errors: [
{ line: 1, column: 12, message: "Unnecessary escape character: \\p.", type: "Literal" },
{ line: 1, column: 14, message: "Unnecessary escape character: \\a.", type: "Literal" },
{ line: 1, column: 16, message: "Unnecessary escape character: \\@.", type: "Literal" }
{ line: 1, column: 12, endColumn: 13, message: "Unnecessary escape character: \\p.", type: "Literal" },
{ line: 1, column: 14, endColumn: 15, message: "Unnecessary escape character: \\a.", type: "Literal" },
{ line: 1, column: 16, endColumn: 17, message: "Unnecessary escape character: \\@.", type: "Literal" }
]
},
{
code: "<foo attr={\"\\d\"}/>",
parserOptions: { ecmaFeatures: { jsx: true } },
errors: [{ line: 1, column: 13, message: "Unnecessary escape character: \\d.", type: "Literal" }]
errors: [{ line: 1, column: 13, endColumn: 14, message: "Unnecessary escape character: \\d.", type: "Literal" }]
},
{ code: "var foo = '\\`';", errors: [{ line: 1, column: 12, message: "Unnecessary escape character: \\`.", type: "Literal" }] },
{ code: "var foo = `\\\"`;", parserOptions: { ecmaVersion: 6 }, errors: [{ line: 1, column: 12, message: "Unnecessary escape character: \\\".", type: "TemplateElement" }] },
{ code: "var foo = `\\'`;", parserOptions: { ecmaVersion: 6 }, errors: [{ line: 1, column: 12, message: "Unnecessary escape character: \\'.", type: "TemplateElement" }] },
{ code: "var foo = `\\#`;", parserOptions: { ecmaVersion: 6 }, errors: [{ line: 1, column: 12, message: "Unnecessary escape character: \\#.", type: "TemplateElement" }] },
{ code: "var foo = '\\`';", errors: [{ line: 1, column: 12, endColumn: 13, message: "Unnecessary escape character: \\`.", type: "Literal" }] },
{ code: "var foo = `\\\"`;", parserOptions: { ecmaVersion: 6 }, errors: [{ line: 1, column: 12, endColumn: 13, message: "Unnecessary escape character: \\\".", type: "TemplateElement" }] },
{ code: "var foo = `\\'`;", parserOptions: { ecmaVersion: 6 }, errors: [{ line: 1, column: 12, endColumn: 13, message: "Unnecessary escape character: \\'.", type: "TemplateElement" }] },
{ code: "var foo = `\\#`;", parserOptions: { ecmaVersion: 6 }, errors: [{ line: 1, column: 12, endColumn: 13, message: "Unnecessary escape character: \\#.", type: "TemplateElement" }] },
{
code: "var foo = '\\`foo\\`';",
errors: [
{ line: 1, column: 12, message: "Unnecessary escape character: \\`.", type: "Literal" },
{ line: 1, column: 17, message: "Unnecessary escape character: \\`.", type: "Literal" }
{ line: 1, column: 12, endColumn: 13, message: "Unnecessary escape character: \\`.", type: "Literal" },
{ line: 1, column: 17, endColumn: 18, message: "Unnecessary escape character: \\`.", type: "Literal" }
]
},
{
code: "var foo = `\\\"${foo}\\\"`;",
parserOptions: { ecmaVersion: 6 },
errors: [
{ line: 1, column: 12, message: "Unnecessary escape character: \\\".", type: "TemplateElement" },
{ line: 1, column: 20, message: "Unnecessary escape character: \\\".", type: "TemplateElement" }
{ line: 1, column: 12, endColumn: 13, message: "Unnecessary escape character: \\\".", type: "TemplateElement" },
{ line: 1, column: 20, endColumn: 21, message: "Unnecessary escape character: \\\".", type: "TemplateElement" }
]
},
{
code: "var foo = `\\'${foo}\\'`;",
parserOptions: { ecmaVersion: 6 },
errors: [
{ line: 1, column: 12, message: "Unnecessary escape character: \\'.", type: "TemplateElement" },
{ line: 1, column: 20, message: "Unnecessary escape character: \\'.", type: "TemplateElement" }
{ line: 1, column: 12, endColumn: 13, message: "Unnecessary escape character: \\'.", type: "TemplateElement" },
{ line: 1, column: 20, endColumn: 21, message: "Unnecessary escape character: \\'.", type: "TemplateElement" }
]
},
{
code: "var foo = `\\#${foo}`;",
parserOptions: { ecmaVersion: 6 },
errors: [{ line: 1, column: 12, message: "Unnecessary escape character: \\#.", type: "TemplateElement" }]
errors: [{ line: 1, column: 12, endColumn: 13, message: "Unnecessary escape character: \\#.", type: "TemplateElement" }]
},
{
code: "let foo = '\\ ';",
parserOptions: { ecmaVersion: 6 },
errors: [{ line: 1, column: 12, message: "Unnecessary escape character: \\ .", type: "Literal" }]
errors: [{ line: 1, column: 12, endColumn: 13, message: "Unnecessary escape character: \\ .", type: "Literal" }]
},
{
code: "let foo = /\\ /;",
parserOptions: { ecmaVersion: 6 },
errors: [{ line: 1, column: 12, message: "Unnecessary escape character: \\ .", type: "Literal" }]
errors: [{ line: 1, column: 12, endColumn: 13, message: "Unnecessary escape character: \\ .", type: "Literal" }]
},
{
code: "var foo = `\\$\\{{${foo}`;",
parserOptions: { ecmaVersion: 6 },
errors: [
{ line: 1, column: 12, message: "Unnecessary escape character: \\$.", type: "TemplateElement" }
{ line: 1, column: 12, endColumn: 13, message: "Unnecessary escape character: \\$.", type: "TemplateElement" }
]
},
{
code: "var foo = `\\$a${foo}`;",
parserOptions: { ecmaVersion: 6 },
errors: [
{ line: 1, column: 12, message: "Unnecessary escape character: \\$.", type: "TemplateElement" }
{ line: 1, column: 12, endColumn: 13, message: "Unnecessary escape character: \\$.", type: "TemplateElement" }
]
},
{
code: "var foo = `a\\{{${foo}`;",
parserOptions: { ecmaVersion: 6 },
errors: [
{ line: 1, column: 13, message: "Unnecessary escape character: \\{.", type: "TemplateElement" }
{ line: 1, column: 13, endColumn: 14, message: "Unnecessary escape character: \\{.", type: "TemplateElement" }
]
},
{
code: String.raw`var foo = /[ab\-]/`,
errors: [{ line: 1, column: 15, message: "Unnecessary escape character: \\-.", type: "Literal" }]
errors: [{ line: 1, column: 15, endColumn: 16, message: "Unnecessary escape character: \\-.", type: "Literal" }]
},
{
code: String.raw`var foo = /[\-ab]/`,
errors: [{ line: 1, column: 13, message: "Unnecessary escape character: \\-.", type: "Literal" }]
errors: [{ line: 1, column: 13, endColumn: 14, message: "Unnecessary escape character: \\-.", type: "Literal" }]
},
{
code: String.raw`var foo = /[ab\?]/`,
errors: [{ line: 1, column: 15, message: "Unnecessary escape character: \\?.", type: "Literal" }]
errors: [{ line: 1, column: 15, endColumn: 16, message: "Unnecessary escape character: \\?.", type: "Literal" }]
},
{
code: String.raw`var foo = /[ab\.]/`,
errors: [{ line: 1, column: 15, message: "Unnecessary escape character: \\..", type: "Literal" }]
errors: [{ line: 1, column: 15, endColumn: 16, message: "Unnecessary escape character: \\..", type: "Literal" }]
},
{
code: String.raw`var foo = /[a\|b]/`,
errors: [{ line: 1, column: 14, message: "Unnecessary escape character: \\|.", type: "Literal" }]
errors: [{ line: 1, column: 14, endColumn: 15, message: "Unnecessary escape character: \\|.", type: "Literal" }]
},
{
code: String.raw`var foo = /\-/`,
errors: [{ line: 1, column: 12, message: "Unnecessary escape character: \\-.", type: "Literal" }]
errors: [{ line: 1, column: 12, endColumn: 13, message: "Unnecessary escape character: \\-.", type: "Literal" }]
},
{
code: String.raw`var foo = /[\-]/`,
errors: [{ line: 1, column: 13, message: "Unnecessary escape character: \\-.", type: "Literal" }]
errors: [{ line: 1, column: 13, endColumn: 14, message: "Unnecessary escape character: \\-.", type: "Literal" }]
},
{
code: String.raw`var foo = /[ab\$]/`,
errors: [{ line: 1, column: 15, message: "Unnecessary escape character: \\$.", type: "Literal" }]
errors: [{ line: 1, column: 15, endColumn: 16, message: "Unnecessary escape character: \\$.", type: "Literal" }]
},
{
code: String.raw`var foo = /[\(paren]/`,
errors: [{ line: 1, column: 13, message: "Unnecessary escape character: \\(.", type: "Literal" }]
errors: [{ line: 1, column: 13, endColumn: 14, message: "Unnecessary escape character: \\(.", type: "Literal" }]
},
{
code: String.raw`var foo = /[\[]/`,
errors: [{ line: 1, column: 13, message: "Unnecessary escape character: \\[.", type: "Literal" }]
errors: [{ line: 1, column: 13, endColumn: 14, message: "Unnecessary escape character: \\[.", type: "Literal" }]
},
{
code: String.raw`var foo = /[\/]/`, // A character class containing '/'
errors: [{ line: 1, column: 13, message: "Unnecessary escape character: \\/.", type: "Literal" }]
errors: [{ line: 1, column: 13, endColumn: 14, message: "Unnecessary escape character: \\/.", type: "Literal" }]
},
{
code: String.raw`var foo = /[\B]/`,
errors: [{ line: 1, column: 13, message: "Unnecessary escape character: \\B.", type: "Literal" }]
errors: [{ line: 1, column: 13, endColumn: 14, message: "Unnecessary escape character: \\B.", type: "Literal" }]
},
{
code: String.raw`var foo = /[a][\-b]/`,
errors: [{ line: 1, column: 16, message: "Unnecessary escape character: \\-.", type: "Literal" }]
errors: [{ line: 1, column: 16, endColumn: 17, message: "Unnecessary escape character: \\-.", type: "Literal" }]
},
{
code: String.raw`var foo = /\-[]/`,
errors: [{ line: 1, column: 12, message: "Unnecessary escape character: \\-.", type: "Literal" }]
errors: [{ line: 1, column: 12, endColumn: 13, message: "Unnecessary escape character: \\-.", type: "Literal" }]
},
{
code: String.raw`var foo = /[a\^]/`,
errors: [{ line: 1, column: 14, message: "Unnecessary escape character: \\^.", type: "Literal" }]
errors: [{ line: 1, column: 14, endColumn: 15, message: "Unnecessary escape character: \\^.", type: "Literal" }]
},
{
code: "`multiline template\nliteral with useless \\escape`",
parserOptions: { ecmaVersion: 6 },
errors: [{ line: 2, column: 22, message: "Unnecessary escape character: \\e.", type: "TemplateElement" }]
errors: [{ line: 2, column: 22, endColumn: 23, message: "Unnecessary escape character: \\e.", type: "TemplateElement" }]
},
{
code: "`\\a```",
parserOptions: { ecmaVersion: 6 },
errors: [{ line: 1, column: 2, message: "Unnecessary escape character: \\a.", type: "TemplateElement" }]
errors: [{ line: 1, column: 2, endColumn: 3, message: "Unnecessary escape character: \\a.", type: "TemplateElement" }]
}
]
});

0 comments on commit 9ca35be

Please sign in to comment.