From cbc57fb7d07c00663ed5781f5e6bc8f534cc2d76 Mon Sep 17 00:00:00 2001 From: Anix Date: Sat, 5 Dec 2020 11:07:18 +0530 Subject: [PATCH] Fix: one-var autofixing for export (fixes #13834) (#13891) * Fix: one-var autofixing for export (fixes #13834) * Chore: added export placement for adjacent tokens --- lib/rules/one-var.js | 8 ++-- tests/lib/rules/one-var.js | 88 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+), 3 deletions(-) diff --git a/lib/rules/one-var.js b/lib/rules/one-var.js index c31a0d2b13c..b370c6d5e19 100644 --- a/lib/rules/one-var.js +++ b/lib/rules/one-var.js @@ -314,12 +314,14 @@ module.exports = { return null; } + const exportPlacement = declaration.parent.type === "ExportNamedDeclaration" ? "export " : ""; + /* * `var x,y` * tokenAfterDeclarator ^^ afterComma */ if (afterComma.range[0] === tokenAfterDeclarator.range[1]) { - return fixer.replaceText(tokenAfterDeclarator, `; ${declaration.kind} `); + return fixer.replaceText(tokenAfterDeclarator, `; ${exportPlacement}${declaration.kind} `); } /* @@ -341,11 +343,11 @@ module.exports = { return fixer.replaceTextRange( [tokenAfterDeclarator.range[0], lastComment.range[0]], - `;${sourceCode.text.slice(tokenAfterDeclarator.range[1], lastComment.range[0])}${declaration.kind} ` + `;${sourceCode.text.slice(tokenAfterDeclarator.range[1], lastComment.range[0])}${exportPlacement}${declaration.kind} ` ); } - return fixer.replaceText(tokenAfterDeclarator, `; ${declaration.kind}`); + return fixer.replaceText(tokenAfterDeclarator, `; ${exportPlacement}${declaration.kind}`); }).filter(x => x); } diff --git a/tests/lib/rules/one-var.js b/tests/lib/rules/one-var.js index f17c0b3c7d7..026862e10a7 100644 --- a/tests/lib/rules/one-var.js +++ b/tests/lib/rules/one-var.js @@ -1854,6 +1854,94 @@ ruleTester.run("one-var", rule, { line: 2, column: 1 }] + }, + { + code: "export const foo=1, bar=2;", + output: "export const foo=1; export const bar=2;", + options: ["never"], + parserOptions: { ecmaVersion: 2021, sourceType: "module" }, + errors: [{ + messageId: "split", + data: { type: "const" }, + type: "VariableDeclaration" + }] + }, + { + code: "const foo=1,\n bar=2;", + output: "const foo=1;\n const bar=2;", + options: ["never"], + parserOptions: { ecmaVersion: 2021, sourceType: "module" }, + errors: [{ + messageId: "split", + data: { type: "const" }, + type: "VariableDeclaration" + }] + }, + { + code: "export const foo=1,\n bar=2;", + output: "export const foo=1;\n export const bar=2;", + options: ["never"], + parserOptions: { ecmaVersion: 2021, sourceType: "module" }, + errors: [{ + messageId: "split", + data: { type: "const" }, + type: "VariableDeclaration" + }] + }, + { + code: "export const foo=1\n, bar=2;", + output: "export const foo=1\n; export const bar=2;", + options: ["never"], + parserOptions: { ecmaVersion: 2021, sourceType: "module" }, + errors: [{ + messageId: "split", + data: { type: "const" }, + type: "VariableDeclaration" + }] + }, + { + code: "export const foo= a, bar=2;", + output: "export const foo= a; export const bar=2;", + options: ["never"], + parserOptions: { ecmaVersion: 2021, sourceType: "module" }, + errors: [{ + messageId: "split", + data: { type: "const" }, + type: "VariableDeclaration" + }] + }, + { + code: "export const foo=() => a, bar=2;", + output: "export const foo=() => a; export const bar=2;", + options: ["never"], + parserOptions: { ecmaVersion: 2021, sourceType: "module" }, + errors: [{ + messageId: "split", + data: { type: "const" }, + type: "VariableDeclaration" + }] + }, + { + code: "export const foo= a, bar=2, bar2=2;", + output: "export const foo= a; export const bar=2; export const bar2=2;", + options: ["never"], + parserOptions: { ecmaVersion: 2021, sourceType: "module" }, + errors: [{ + messageId: "split", + data: { type: "const" }, + type: "VariableDeclaration" + }] + }, + { + code: "export const foo = 1,bar = 2;", + output: "export const foo = 1; export const bar = 2;", + options: ["never"], + parserOptions: { ecmaVersion: 2021, sourceType: "module" }, + errors: [{ + messageId: "split", + data: { type: "const" }, + type: "VariableDeclaration" + }] } ] });