diff --git a/eslint/babel-eslint-parser/.eslintrc.js b/eslint/babel-eslint-parser/.eslintrc.js index 64dc12e693..169516cb3f 100644 --- a/eslint/babel-eslint-parser/.eslintrc.js +++ b/eslint/babel-eslint-parser/.eslintrc.js @@ -5,12 +5,22 @@ module.exports = { "prettier" ], rules: { - "no-var": 0, - "max-len": 0, + "max-len": "off", + "strict": "error", "prettier/prettier": "error", }, env: { node: true, - mocha: true - } + }, + parserOptions: { + sourceType: "script", + }, + overrides: [ + { + files: ["test/**/*"], + env: { + mocha: true + } + } + ] }; diff --git a/eslint/babel-eslint-parser/.npmrc b/eslint/babel-eslint-parser/.npmrc new file mode 100644 index 0000000000..c1ca392fea --- /dev/null +++ b/eslint/babel-eslint-parser/.npmrc @@ -0,0 +1 @@ +package-lock = false diff --git a/eslint/babel-eslint-parser/lib/babylon-to-espree/attachComments.js b/eslint/babel-eslint-parser/lib/babylon-to-espree/attachComments.js index 8c608a45ad..6e19875384 100644 --- a/eslint/babel-eslint-parser/lib/babylon-to-espree/attachComments.js +++ b/eslint/babel-eslint-parser/lib/babylon-to-espree/attachComments.js @@ -3,8 +3,8 @@ // comment fixes module.exports = function(ast, comments, tokens) { if (comments.length) { - var firstComment = comments[0]; - var lastComment = comments[comments.length - 1]; + const firstComment = comments[0]; + const lastComment = comments[comments.length - 1]; // fixup program start if (!tokens.length) { // if no tokens, the program starts at the end of the last comment @@ -17,7 +17,7 @@ module.exports = function(ast, comments, tokens) { } } else if (firstComment.start < tokens[0].start) { // if there are comments before the first token, the program starts at the first token - var token = tokens[0]; + const token = tokens[0]; // ast.start = token.start; // ast.loc.start.line = token.loc.start.line; // ast.loc.start.column = token.loc.start.column; @@ -25,18 +25,18 @@ module.exports = function(ast, comments, tokens) { // estraverse do not put leading comments on first node when the comment // appear before the first token if (ast.body.length) { - var node = ast.body[0]; + const node = ast.body[0]; node.leadingComments = []; - var firstTokenStart = token.start; - var len = comments.length; - for (var i = 0; i < len && comments[i].start < firstTokenStart; i++) { + const firstTokenStart = token.start; + const len = comments.length; + for (let i = 0; i < len && comments[i].start < firstTokenStart; i++) { node.leadingComments.push(comments[i]); } } } // fixup program end if (tokens.length) { - var lastToken = tokens[tokens.length - 1]; + const lastToken = tokens[tokens.length - 1]; if (lastComment.end > lastToken.end) { // If there is a comment after the last token, the program ends at the // last token and not the comment diff --git a/eslint/babel-eslint-parser/lib/babylon-to-espree/convertComments.js b/eslint/babel-eslint-parser/lib/babylon-to-espree/convertComments.js index 17d7117372..57b0e44d4d 100644 --- a/eslint/babel-eslint-parser/lib/babylon-to-espree/convertComments.js +++ b/eslint/babel-eslint-parser/lib/babylon-to-espree/convertComments.js @@ -1,8 +1,8 @@ "use strict"; module.exports = function(comments) { - for (var i = 0; i < comments.length; i++) { - var comment = comments[i]; + for (let i = 0; i < comments.length; i++) { + const comment = comments[i]; if (comment.type === "CommentBlock") { comment.type = "Block"; } else if (comment.type === "CommentLine") { diff --git a/eslint/babel-eslint-parser/lib/babylon-to-espree/index.js b/eslint/babel-eslint-parser/lib/babylon-to-espree/index.js index 6d6e12bfc0..c0fdf323a8 100644 --- a/eslint/babel-eslint-parser/lib/babylon-to-espree/index.js +++ b/eslint/babel-eslint-parser/lib/babylon-to-espree/index.js @@ -1,9 +1,9 @@ "use strict"; -var attachComments = require("./attachComments"); -var convertComments = require("./convertComments"); -var toTokens = require("./toTokens"); -var toAST = require("./toAST"); +const attachComments = require("./attachComments"); +const convertComments = require("./convertComments"); +const toTokens = require("./toTokens"); +const toAST = require("./toAST"); module.exports = function(ast, traverse, tt, code) { // convert tokens diff --git a/eslint/babel-eslint-parser/lib/babylon-to-espree/toAST.js b/eslint/babel-eslint-parser/lib/babylon-to-espree/toAST.js index b3da41f0cb..e375f69dd1 100644 --- a/eslint/babel-eslint-parser/lib/babylon-to-espree/toAST.js +++ b/eslint/babel-eslint-parser/lib/babylon-to-espree/toAST.js @@ -1,10 +1,10 @@ "use strict"; -var t = require("@babel/types"); -var convertComments = require("./convertComments"); +const t = require("@babel/types"); +const convertComments = require("./convertComments"); module.exports = function(ast, traverse, code) { - var state = { source: code }; + const state = { source: code }; // Monkey patch visitor keys in order to be able to traverse the estree nodes t.VISITOR_KEYS.Property = t.VISITOR_KEYS.ObjectProperty; @@ -22,10 +22,10 @@ module.exports = function(ast, traverse, code) { delete t.VISITOR_KEYS.MethodDefinition; }; -var astTransformVisitor = { +const astTransformVisitor = { noScope: true, enter(path) { - var node = path.node; + const node = path.node; // private var to track original node type node._babelType = node.type; @@ -44,7 +44,7 @@ var astTransformVisitor = { } }, exit(path) { - var node = path.node; + const node = path.node; if (path.isJSXText()) { node.type = "Literal"; @@ -98,8 +98,8 @@ var astTransformVisitor = { // template string range fixes if (path.isTemplateLiteral()) { - for (var j = 0; j < node.quasis.length; j++) { - var q = node.quasis[j]; + for (let j = 0; j < node.quasis.length; j++) { + const q = node.quasis[j]; q.range[0] -= 1; if (q.tail) { q.range[1] += 1; diff --git a/eslint/babel-eslint-parser/lib/babylon-to-espree/toToken.js b/eslint/babel-eslint-parser/lib/babylon-to-espree/toToken.js index 44c73529a1..3e0ba453c9 100644 --- a/eslint/babel-eslint-parser/lib/babylon-to-espree/toToken.js +++ b/eslint/babel-eslint-parser/lib/babylon-to-espree/toToken.js @@ -1,7 +1,7 @@ "use strict"; module.exports = function(token, tt, source) { - var type = token.type; + const type = token.type; token.range = [token.start, token.end]; if (type === tt.name) { @@ -72,7 +72,7 @@ module.exports = function(token, tt, source) { token.value = source.slice(token.start, token.end); } else if (type === tt.regexp) { token.type = "RegularExpression"; - var value = token.value; + const value = token.value; token.regex = { pattern: value.pattern, flags: value.flags, diff --git a/eslint/babel-eslint-parser/lib/babylon-to-espree/toTokens.js b/eslint/babel-eslint-parser/lib/babylon-to-espree/toTokens.js index bb30819bac..2927c4b011 100644 --- a/eslint/babel-eslint-parser/lib/babylon-to-espree/toTokens.js +++ b/eslint/babel-eslint-parser/lib/babylon-to-espree/toTokens.js @@ -1,7 +1,7 @@ "use strict"; -var convertTemplateType = require("./convertTemplateType"); -var toToken = require("./toToken"); +const convertTemplateType = require("./convertTemplateType"); +const toToken = require("./toToken"); module.exports = function(tokens, tt, code) { return convertTemplateType(tokens, tt) diff --git a/eslint/babel-eslint-parser/lib/parse.js b/eslint/babel-eslint-parser/lib/parse.js index b23b9dc9fc..0817df4b07 100644 --- a/eslint/babel-eslint-parser/lib/parse.js +++ b/eslint/babel-eslint-parser/lib/parse.js @@ -1,16 +1,16 @@ "use strict"; -var babylonToEspree = require("./babylon-to-espree"); -var parse = require("@babel/parser").parse; -var tt = require("@babel/parser").tokTypes; -var traverse = require("@babel/traverse").default; -var codeFrameColumns = require("@babel/code-frame").codeFrameColumns; +const babylonToEspree = require("./babylon-to-espree"); +const parse = require("@babel/parser").parse; +const tt = require("@babel/parser").tokTypes; +const traverse = require("@babel/traverse").default; +const codeFrameColumns = require("@babel/code-frame").codeFrameColumns; module.exports = function(code, options) { const legacyDecorators = options.ecmaFeatures && options.ecmaFeatures.legacyDecorators; - var opts = { + const opts = { codeFrame: options.hasOwnProperty("codeFrame") ? options.codeFrame : true, sourceType: options.sourceType, allowImportExportEverywhere: options.allowImportExportEverywhere, // consistent with espree @@ -51,7 +51,7 @@ module.exports = function(code, options) { ], }; - var ast; + let ast; try { ast = parse(code, opts); } catch (err) { diff --git a/eslint/babel-eslint-parser/test/babel-eslint.js b/eslint/babel-eslint-parser/test/babel-eslint.js index 99b03f25c7..ce270f113b 100644 --- a/eslint/babel-eslint-parser/test/babel-eslint.js +++ b/eslint/babel-eslint-parser/test/babel-eslint.js @@ -1,10 +1,12 @@ -var assert = require("assert"); -var babelEslint = require(".."); -var espree = require("espree"); -var escope = require("eslint-scope"); -var util = require("util"); -var unpad = require("dedent"); -var assertImplementsAST = require("./fixtures/assert-implements-ast"); +"use strict"; + +const assert = require("assert"); +const babelEslint = require(".."); +const espree = require("espree"); +const escope = require("eslint-scope"); +const util = require("util"); +const unpad = require("dedent"); +const assertImplementsAST = require("./fixtures/assert-implements-ast"); function lookup(obj, keypath, backwardsDepth) { if (!keypath) { @@ -21,7 +23,7 @@ function lookup(obj, keypath, backwardsDepth) { function parseAndAssertSame(code) { code = unpad(code); - var esAST = espree.parse(code, { + const esAST = espree.parse(code, { ecmaFeatures: { // enable JSX parsing jsx: true, @@ -40,14 +42,14 @@ function parseAndAssertSame(code) { ecmaVersion: 2018, sourceType: "module", }); - var babylonAST = babelEslint.parseForESLint(code, { + const babylonAST = babelEslint.parseForESLint(code, { eslintVisitorKeys: true, eslintScopeManager: true, }).ast; try { assertImplementsAST(esAST, babylonAST); } catch (err) { - var traversal = err.message.slice(3, err.message.indexOf(":")); + const traversal = err.message.slice(3, err.message.indexOf(":")); err.message += unpad(` espree: ${util.inspect(lookup(esAST, traversal, 2), { @@ -68,7 +70,7 @@ function parseAndAssertSame(code) { describe("babylon-to-espree", () => { describe("compatibility", () => { it("should allow ast.analyze to be called without options", function() { - var esAST = babelEslint.parseForESLint("`test`", { + const esAST = babelEslint.parseForESLint("`test`", { eslintScopeManager: true, eslintVisitorKeys: true, }).ast; @@ -271,7 +273,7 @@ describe("babylon-to-espree", () => { // Espree doesn't support the optional chaining operator yet it("optional chaining operator (token)", () => { const code = "foo?.bar"; - var babylonAST = babelEslint.parseForESLint(code, { + const babylonAST = babelEslint.parseForESLint(code, { eslintVisitorKeys: true, eslintScopeManager: true, }).ast; @@ -281,7 +283,7 @@ describe("babylon-to-espree", () => { // Espree doesn't support the nullish coalescing operator yet it("nullish coalescing operator (token)", () => { const code = "foo ?? bar"; - var babylonAST = babelEslint.parseForESLint(code, { + const babylonAST = babelEslint.parseForESLint(code, { eslintVisitorKeys: true, eslintScopeManager: true, }).ast; @@ -291,7 +293,7 @@ describe("babylon-to-espree", () => { // Espree doesn't support the pipeline operator yet it("pipeline operator (token)", () => { const code = "foo |> bar"; - var babylonAST = babelEslint.parseForESLint(code, { + const babylonAST = babelEslint.parseForESLint(code, { eslintVisitorKeys: true, eslintScopeManager: true, }).ast; diff --git a/eslint/babel-eslint-parser/test/fixtures/assert-implements-ast.js b/eslint/babel-eslint-parser/test/fixtures/assert-implements-ast.js index 61e77e21b0..90dceb0dba 100644 --- a/eslint/babel-eslint-parser/test/fixtures/assert-implements-ast.js +++ b/eslint/babel-eslint-parser/test/fixtures/assert-implements-ast.js @@ -1,3 +1,5 @@ +"use strict" + // Checks if the source ast implements the target ast. Ignores extra keys on source ast module.exports = function assertImplementsAST(target, source, path) { if (!path) { @@ -5,13 +7,13 @@ module.exports = function assertImplementsAST(target, source, path) { } function error(text) { - var err = new Error(`At ${path.join(".")}: ${text}:`); + const err = new Error(`At ${path.join(".")}: ${text}:`); err.depth = path.length + 1; throw err; } - var typeA = target === null ? "null" : typeof target; - var typeB = source === null ? "null" : typeof source; + const typeA = target === null ? "null" : typeof target; + const typeB = source === null ? "null" : typeof source; if (typeA !== typeB) { error( `have different types (${typeA} !== ${typeB}) (${target} !== ${source})` @@ -26,9 +28,9 @@ module.exports = function assertImplementsAST(target, source, path) { .name} !== ${source.constructor.name}` ); } else if (typeA === "object") { - var keysTarget = Object.keys(target); - for (var i in keysTarget) { - var key = keysTarget[i]; + const keysTarget = Object.keys(target); + for (const i in keysTarget) { + const key = keysTarget[i]; path.push(key); assertImplementsAST(target[key], source[key], path); path.pop(); diff --git a/eslint/babel-eslint-parser/test/fixtures/preprocess-to-patch.js b/eslint/babel-eslint-parser/test/fixtures/preprocess-to-patch.js index 1dbfc172a1..8cb4c54fb6 100644 --- a/eslint/babel-eslint-parser/test/fixtures/preprocess-to-patch.js +++ b/eslint/babel-eslint-parser/test/fixtures/preprocess-to-patch.js @@ -1,4 +1,5 @@ "use strict" + const babelEslint = require("../..") // Apply monkeypatch to eslint-scope. diff --git a/eslint/babel-eslint-parser/test/integration.js b/eslint/babel-eslint-parser/test/integration.js index 09e4af9d64..2462cd5d38 100644 --- a/eslint/babel-eslint-parser/test/integration.js +++ b/eslint/babel-eslint-parser/test/integration.js @@ -1,16 +1,18 @@ -var assert = require("assert"); -var eslint = require("eslint"); -var fs = require("fs"); -var path = require("path"); +"use strict"; -var paths = { +const assert = require("assert"); +const eslint = require("eslint"); +const fs = require("fs"); +const path = require("path"); + +const paths = { fixtures: path.join(__dirname, "fixtures", "rules"), }; -var encoding = "utf8"; -var errorLevel = 2; +const encoding = "utf8"; +const errorLevel = 2; -var baseEslintOpts = { +const baseEslintOpts = { parser: require.resolve(".."), parserOptions: { sourceType: "script", @@ -48,10 +50,10 @@ describe("Rules:", () => { // describe function strictSuite() { - var ruleId = "strict"; + const ruleId = "strict"; describe("when set to 'never'", () => { - var eslintOpts = Object.assign({}, baseEslintOpts, { + const eslintOpts = Object.assign({}, baseEslintOpts, { rules: {}, }); eslintOpts.rules[ruleId] = [errorLevel, "never"]; @@ -76,7 +78,7 @@ function strictSuite() { // describe describe("when set to 'global'", () => { - var eslintOpts = Object.assign({}, baseEslintOpts, { + const eslintOpts = Object.assign({}, baseEslintOpts, { rules: {}, }); eslintOpts.rules[ruleId] = [errorLevel, "global"]; @@ -152,7 +154,7 @@ function strictSuite() { // describe describe("when set to 'function'", () => { - var eslintOpts = Object.assign({}, baseEslintOpts, { + const eslintOpts = Object.assign({}, baseEslintOpts, { rules: {}, }); eslintOpts.rules[ruleId] = [errorLevel, "function"]; diff --git a/eslint/babel-eslint-parser/test/non-regression.js b/eslint/babel-eslint-parser/test/non-regression.js index 4c43b29f3f..fc1d3416be 100644 --- a/eslint/babel-eslint-parser/test/non-regression.js +++ b/eslint/babel-eslint-parser/test/non-regression.js @@ -1,7 +1,7 @@ -/*eslint-env mocha*/ "use strict"; -var eslint = require("eslint"); -var unpad = require("dedent"); + +const eslint = require("eslint"); +const unpad = require("dedent"); function verifyAndAssertMessagesWithSpecificESLint( code, @@ -11,7 +11,7 @@ function verifyAndAssertMessagesWithSpecificESLint( overrideConfig, linter ) { - var config = { + const config = { parser: require.resolve(".."), rules, env: { @@ -30,12 +30,12 @@ function verifyAndAssertMessagesWithSpecificESLint( }; if (overrideConfig) { - for (var key in overrideConfig) { + for (const key in overrideConfig) { config[key] = overrideConfig[key]; } } - var messages = linter.verify(code, config); + const messages = linter.verify(code, config); if (messages.length !== expectedMessages.length) { throw new Error( @@ -46,7 +46,7 @@ function verifyAndAssertMessagesWithSpecificESLint( } messages.forEach((message, i) => { - var formatedMessage = `${message.line}:${message.column} ${ + const formatedMessage = `${message.line}:${message.column} ${ message.message }${message.ruleId ? ` ${message.ruleId}` : ""}`; if (formatedMessage !== expectedMessages[i]) { diff --git a/eslint/babel-eslint-parser/test/z_parser-for-eslint-after-patched.js b/eslint/babel-eslint-parser/test/z_parser-for-eslint-after-patched.js index a7d6882d35..265fb5f040 100644 --- a/eslint/babel-eslint-parser/test/z_parser-for-eslint-after-patched.js +++ b/eslint/babel-eslint-parser/test/z_parser-for-eslint-after-patched.js @@ -4,7 +4,7 @@ const eslint = require("eslint"); const assert = require("assert"); const babelEslint = require(".."); const espree = require("espree"); -var assertImplementsAST = require("./fixtures/assert-implements-ast"); +const assertImplementsAST = require("./fixtures/assert-implements-ast"); describe("https://github.com/babel/babel-eslint/issues/558", () => { it("don't crash with eslint-plugin-import", () => {