diff --git a/lib/rules/newline-before-return.js b/lib/rules/newline-before-return.js index 86e4c650120..d64d37146c7 100644 --- a/lib/rules/newline-before-return.js +++ b/lib/rules/newline-before-return.js @@ -138,7 +138,6 @@ module.exports = { function hasNewlineBefore(node) { const lineNumNode = node.loc.start.line; const lineNumTokenBefore = getLineNumberOfTokenBefore(node); - const commentLines = calcCommentLines(node, lineNumTokenBefore); return (lineNumNode - lineNumTokenBefore - commentLines) > 1; @@ -191,7 +190,10 @@ module.exports = { message: "Expected newline before return statement.", fix(fixer) { if (canFix(node)) { - return fixer.insertTextBefore(node, "\n"); + const tokenBefore = sourceCode.getTokenBefore(node); + const newlines = node.loc.start.line === tokenBefore.loc.end.line ? "\n\n" : "\n"; + + return fixer.insertTextBefore(node, newlines); } return null; } diff --git a/tests/lib/rules/newline-before-return.js b/tests/lib/rules/newline-before-return.js index 931882b3290..d310455a3c1 100644 --- a/tests/lib/rules/newline-before-return.js +++ b/tests/lib/rules/newline-before-return.js @@ -113,7 +113,7 @@ ruleTester.run("newline-before-return", rule, { { code: "function a() {\nvar b; return;\n}", errors: ["Expected newline before return statement."], - output: "function a() {\nvar b; \nreturn;\n}" + output: "function a() {\nvar b; \n\nreturn;\n}" }, { code: "function a() {\nvar b;\nreturn;\n}", @@ -125,6 +125,11 @@ ruleTester.run("newline-before-return", rule, { errors: ["Expected newline before return statement."], output: "function a() {\nif (b) return b;\nelse if (c) return c;\nelse {\ne();\n\nreturn d;\n}\n}" }, + { + code: "function a() {\nif (b) return b;\nelse if (c) return c;\nelse {\ne(); return d;\n}\n}", + errors: ["Expected newline before return statement."], + output: "function a() {\nif (b) return b;\nelse if (c) return c;\nelse {\ne(); \n\nreturn d;\n}\n}" + }, { code: "function a() {\n while (b) {\nc();\nreturn;\n}\n}", errors: ["Expected newline before return statement."], @@ -187,11 +192,22 @@ ruleTester.run("newline-before-return", rule, { errors: ["Expected newline before return statement."], output: "var a;\n\nreturn;" }, + { + code: "var a; return;", + parserOptions: { ecmaFeatures: { globalReturn: true } }, + errors: ["Expected newline before return statement."], + output: "var a; \n\nreturn;" + }, { code: "function a() {\n{\n//comment\n}\nreturn\n}", errors: ["Expected newline before return statement."], output: "function a() {\n{\n//comment\n}\n\nreturn\n}" }, + { + code: "function a() {\n{\n//comment\n} return\n}", + errors: ["Expected newline before return statement."], + output: "function a() {\n{\n//comment\n} \n\nreturn\n}" + }, { code: "function a() {\nvar c;\nwhile (b) {\n c = d; //comment\n}\nreturn c;\n}", errors: ["Expected newline before return statement."], @@ -254,6 +270,11 @@ ruleTester.run("newline-before-return", rule, { code: "function a() {\nvar b;\nreturn; //comment\n}", errors: ["Expected newline before return statement."], output: "function a() {\nvar b;\n\nreturn; //comment\n}" + }, + { + code: "function a() {\nvar b; return; //comment\n}", + errors: ["Expected newline before return statement."], + output: "function a() {\nvar b; \n\nreturn; //comment\n}" } ] });