diff --git a/lib/rules/no-var.js b/lib/rules/no-var.js index cfb64efafcc..80ff8f1a027 100644 --- a/lib/rules/no-var.js +++ b/lib/rules/no-var.js @@ -159,7 +159,7 @@ function hasReferenceInTDZ(node) { return !reference.init && ( start < idStart || (defaultValue !== null && start >= defaultStart && end <= defaultEnd) || - (start >= initStart && end <= initEnd) + (!astUtils.isFunction(node) && start >= initStart && end <= initEnd) ); }); }; diff --git a/tests/lib/rules/no-var.js b/tests/lib/rules/no-var.js index 84e14ae19c9..26b0a8464f4 100644 --- a/tests/lib/rules/no-var.js +++ b/tests/lib/rules/no-var.js @@ -319,6 +319,74 @@ ruleTester.run("no-var", rule, { code: "function foo() { var { let } = {}; }", output: null, errors: [{ messageId: "unexpectedVar" }] + }, + + // https://github.com/eslint/eslint/issues/16610 + { + code: "var fx = function (i = 0) { if (i < 5) { return fx(i + 1); } console.log(i); }; fx();", + output: "let fx = function (i = 0) { if (i < 5) { return fx(i + 1); } console.log(i); }; fx();", + parserOptions: { ecmaVersion: 6, sourceType: "module" }, + errors: [{ messageId: "unexpectedVar" }] + }, + { + code: "var foo = function () { foo() };", + output: "let foo = function () { foo() };", + parserOptions: { ecmaVersion: 6, sourceType: "module" }, + errors: [{ messageId: "unexpectedVar" }] + }, + { + code: "var foo = () => foo();", + output: "let foo = () => foo();", + parserOptions: { ecmaVersion: 6, sourceType: "module" }, + errors: [{ messageId: "unexpectedVar" }] + }, + { + code: "var foo = (function () { foo(); })();", + output: null, + parserOptions: { ecmaVersion: 6, sourceType: "module" }, + errors: [{ messageId: "unexpectedVar" }] + }, + { + code: "var foo = bar(function () { foo(); });", + output: null, + parserOptions: { ecmaVersion: 6, sourceType: "module" }, + errors: [{ messageId: "unexpectedVar" }] + }, + { + code: "var bar = foo, foo = function () { foo(); };", + output: null, + parserOptions: { ecmaVersion: 6, sourceType: "module" }, + errors: [{ messageId: "unexpectedVar" }] + }, + { + code: "var bar = foo; var foo = function () { foo(); };", + output: "let bar = foo; var foo = function () { foo(); };", + parserOptions: { ecmaVersion: 6, sourceType: "module" }, + errors: [ + { messageId: "unexpectedVar" }, + { messageId: "unexpectedVar" } + ] + }, + { + code: "var { foo = foo } = function () { foo(); };", + output: null, + parserOptions: { ecmaVersion: 6, sourceType: "module" }, + errors: [{ messageId: "unexpectedVar" }] + }, + { + code: "var { bar = foo, foo } = function () { foo(); };", + output: null, + parserOptions: { ecmaVersion: 6, sourceType: "module" }, + errors: [{ messageId: "unexpectedVar" }] + }, + { + code: "var bar = function () { foo(); }; var foo = function() {};", + output: "let bar = function () { foo(); }; var foo = function() {};", + parserOptions: { ecmaVersion: 6, sourceType: "module" }, + errors: [ + { messageId: "unexpectedVar" }, + { messageId: "unexpectedVar" } + ] } ] });