diff options
author | Michaël Zasso <targos@protonmail.com> | 2018-01-09 11:04:20 +0100 |
---|---|---|
committer | Michaël Zasso <targos@protonmail.com> | 2018-01-11 09:50:42 +0100 |
commit | 7a52c51e811cd59db0d2b1b6d6b8b2e7f917d65c (patch) | |
tree | 05f30e28191e1b9804e295ee092c6bbb14f5be85 /tools/node_modules/eslint/lib | |
parent | 3dc30632755713179f345f4af024bd904c6162d0 (diff) | |
download | android-node-v8-7a52c51e811cd59db0d2b1b6d6b8b2e7f917d65c.tar.gz android-node-v8-7a52c51e811cd59db0d2b1b6d6b8b2e7f917d65c.tar.bz2 android-node-v8-7a52c51e811cd59db0d2b1b6d6b8b2e7f917d65c.zip |
tools: update ESLint to 4.15.0
PR-URL: https://github.com/nodejs/node/pull/17820
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Diffstat (limited to 'tools/node_modules/eslint/lib')
269 files changed, 1230 insertions, 537 deletions
diff --git a/tools/node_modules/eslint/lib/cli-engine.js b/tools/node_modules/eslint/lib/cli-engine.js index 55450fd633..0c1afcbceb 100644 --- a/tools/node_modules/eslint/lib/cli-engine.js +++ b/tools/node_modules/eslint/lib/cli-engine.js @@ -420,6 +420,10 @@ class CLIEngine { this.config = new Config(this.options, this.linter); } + getRules() { + return this.linter.getRules(); + } + /** * Returns results that only contains errors. * @param {LintResult[]} results The results to filter. diff --git a/tools/node_modules/eslint/lib/formatters/checkstyle.js b/tools/node_modules/eslint/lib/formatters/checkstyle.js index 720e831a3e..c807871930 100644 --- a/tools/node_modules/eslint/lib/formatters/checkstyle.js +++ b/tools/node_modules/eslint/lib/formatters/checkstyle.js @@ -32,7 +32,7 @@ module.exports = function(results) { let output = ""; - output += "<?xml version=\"1.1\" encoding=\"utf-8\"?>"; + output += "<?xml version=\"1.0\" encoding=\"utf-8\"?>"; output += "<checkstyle version=\"4.3\">"; results.forEach(result => { diff --git a/tools/node_modules/eslint/lib/formatters/jslint-xml.js b/tools/node_modules/eslint/lib/formatters/jslint-xml.js index e152d8bdd7..14743430d8 100644 --- a/tools/node_modules/eslint/lib/formatters/jslint-xml.js +++ b/tools/node_modules/eslint/lib/formatters/jslint-xml.js @@ -14,7 +14,7 @@ module.exports = function(results) { let output = ""; - output += "<?xml version=\"1.1\" encoding=\"utf-8\"?>"; + output += "<?xml version=\"1.0\" encoding=\"utf-8\"?>"; output += "<jslint>"; results.forEach(result => { diff --git a/tools/node_modules/eslint/lib/formatters/junit.js b/tools/node_modules/eslint/lib/formatters/junit.js index ca666bb14c..77d548f380 100644 --- a/tools/node_modules/eslint/lib/formatters/junit.js +++ b/tools/node_modules/eslint/lib/formatters/junit.js @@ -32,7 +32,7 @@ module.exports = function(results) { let output = ""; - output += "<?xml version=\"1.1\" encoding=\"utf-8\"?>\n"; + output += "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; output += "<testsuites>\n"; results.forEach(result => { diff --git a/tools/node_modules/eslint/lib/linter.js b/tools/node_modules/eslint/lib/linter.js index 21d62f73ae..2238c5be0e 100755 --- a/tools/node_modules/eslint/lib/linter.js +++ b/tools/node_modules/eslint/lib/linter.js @@ -10,6 +10,7 @@ //------------------------------------------------------------------------------ const eslintScope = require("eslint-scope"), + evk = require("eslint-visitor-keys"), levn = require("levn"), lodash = require("lodash"), blankScriptAST = require("../conf/blank-script.json"), @@ -43,6 +44,8 @@ const MAX_AUTOFIX_PASSES = 10; * @property {ASTNode} ast The ESTree AST Program node. * @property {Object} services An object containing additional services related * to the parser. + * @property {ScopeManager|null} scopeManager The scope manager object of this AST. + * @property {Object|null} visitorKeys The visitor keys to traverse this AST. */ //------------------------------------------------------------------------------ @@ -502,6 +505,28 @@ function getRuleOptions(ruleConfig) { } /** + * Analyze scope of the given AST. + * @param {ASTNode} ast The `Program` node to analyze. + * @param {Object} parserOptions The parser options. + * @param {Object} visitorKeys The visitor keys. + * @returns {ScopeManager} The analysis result. + */ +function analyzeScope(ast, parserOptions, visitorKeys) { + const ecmaFeatures = parserOptions.ecmaFeatures || {}; + const ecmaVersion = parserOptions.ecmaVersion || 5; + + return eslintScope.analyze(ast, { + ignoreEval: true, + nodejsScope: ecmaFeatures.globalReturn, + impliedStrict: ecmaFeatures.impliedStrict, + ecmaVersion, + sourceType: parserOptions.sourceType || "script", + childVisitorKeys: visitorKeys || evk.KEYS, + fallback: Traverser.getKeys + }); +} + +/** * Parses text into an AST. Moved out here because the try-catch prevents * optimization of functions, so it's best to keep the try-catch as isolated * as possible @@ -509,18 +534,20 @@ function getRuleOptions(ruleConfig) { * @param {Object} providedParserOptions Options to pass to the parser * @param {Object} parser The parser module * @param {string} filePath The path to the file being parsed. - * @returns {{success: false, error: Problem}|{success: true,ast: ASTNode, services: Object}} + * @returns {{success: false, error: Problem}|{success: true, sourceCode: SourceCode}} * An object containing the AST and parser services if parsing was successful, or the error if parsing failed * @private */ function parse(text, providedParserOptions, parser, filePath) { - + const textToParse = stripUnicodeBOM(text).replace(astUtils.SHEBANG_MATCHER, (match, captured) => `//${captured}`); const parserOptions = Object.assign({}, providedParserOptions, { loc: true, range: true, raw: true, tokens: true, comment: true, + eslintVisitorKeys: true, + eslintScopeManager: true, filePath }); @@ -531,20 +558,30 @@ function parse(text, providedParserOptions, parser, filePath) { * problem that ESLint identified just like any other. */ try { - if (typeof parser.parseForESLint === "function") { - const parseResult = parser.parseForESLint(text, parserOptions); - - return { - success: true, - ast: parseResult.ast, - services: parseResult.services || {} - }; - } + const parseResult = (typeof parser.parseForESLint === "function") + ? parser.parseForESLint(textToParse, parserOptions) + : { ast: parser.parse(textToParse, parserOptions) }; + const ast = parseResult.ast; + const parserServices = parseResult.services || {}; + const visitorKeys = parseResult.visitorKeys || evk.KEYS; + const scopeManager = parseResult.scopeManager || analyzeScope(ast, parserOptions, visitorKeys); return { success: true, - ast: parser.parse(text, parserOptions), - services: {} + + /* + * Save all values that `parseForESLint()` returned. + * If a `SourceCode` object is given as the first parameter instead of source code text, + * linter skips the parsing process and reuses the source code object. + * In that case, linter needs all the values that `parseForESLint()` returned. + */ + sourceCode: new SourceCode({ + text, + ast, + parserServices, + scopeManager, + visitorKeys + }) }; } catch (ex) { @@ -717,7 +754,6 @@ module.exports = class Linter { */ _verifyWithoutProcessors(textOrSourceCode, config, filenameOrOptions) { let text, - parserServices, allowInlineConfig, providedFilename, reportUnusedDisableDirectives; @@ -731,8 +767,6 @@ module.exports = class Linter { providedFilename = filenameOrOptions; } - const filename = typeof providedFilename === "string" ? providedFilename : "<input>"; - if (typeof textOrSourceCode === "string") { lastSourceCodes.set(this, null); text = textOrSourceCode; @@ -741,6 +775,8 @@ module.exports = class Linter { text = textOrSourceCode.text; } + const filename = typeof providedFilename === "string" ? providedFilename : "<input>"; + // search and apply "eslint-env *". const envInFile = findEslintEnv(text); @@ -757,9 +793,7 @@ module.exports = class Linter { // process initial config to make it safe to extend config = prepareConfig(config, this.environments); - if (lastSourceCodes.get(this)) { - parserServices = {}; - } else { + if (!lastSourceCodes.get(this)) { // there's no input, just exit here if (text.trim().length === 0) { @@ -783,7 +817,7 @@ module.exports = class Linter { }]; } const parseResult = parse( - stripUnicodeBOM(text).replace(astUtils.SHEBANG_MATCHER, (match, captured) => `//${captured}`), + text, config.parserOptions, parser, filename @@ -793,8 +827,24 @@ module.exports = class Linter { return [parseResult.error]; } - parserServices = parseResult.services; - lastSourceCodes.set(this, new SourceCode(text, parseResult.ast)); + lastSourceCodes.set(this, parseResult.sourceCode); + } else { + + /* + * If the given source code object as the first argument does not have scopeManager, analyze the scope. + * This is for backward compatibility (SourceCode is frozen so it cannot rebind). + */ + const lastSourceCode = lastSourceCodes.get(this); + + if (!lastSourceCode.scopeManager) { + lastSourceCodes.set(this, new SourceCode({ + text: lastSourceCode.text, + ast: lastSourceCode.ast, + parserServices: lastSourceCode.parserServices, + visitorKeys: lastSourceCode.visitorKeys, + scopeManager: analyzeScope(lastSourceCode.ast, config.parserOptions) + })); + } } const problems = []; @@ -814,16 +864,7 @@ module.exports = class Linter { const emitter = createEmitter(); const traverser = new Traverser(); - const ecmaFeatures = config.parserOptions.ecmaFeatures || {}; - const ecmaVersion = config.parserOptions.ecmaVersion || 5; - const scopeManager = eslintScope.analyze(sourceCode.ast, { - ignoreEval: true, - nodejsScope: ecmaFeatures.globalReturn, - impliedStrict: ecmaFeatures.impliedStrict, - ecmaVersion, - sourceType: config.parserOptions.sourceType || "script", - fallback: Traverser.getKeys - }); + const scopeManager = sourceCode.scopeManager; /* * Create a frozen object with the ruleContext properties and methods that are shared by all rules. @@ -842,7 +883,7 @@ module.exports = class Linter { markVariableAsUsed: name => markVariableAsUsed(scopeManager, traverser.current(), config.parserOptions, name), parserOptions: config.parserOptions, parserPath: config.parser, - parserServices, + parserServices: sourceCode.parserServices, settings: config.settings, /** @@ -870,6 +911,7 @@ module.exports = class Linter { } const rule = this.rules.get(ruleId); + const messageIds = rule && rule.meta && rule.meta.messages; let reportTranslator = null; const ruleContext = Object.freeze( Object.assign( @@ -890,7 +932,7 @@ module.exports = class Linter { * with Node 8.4.0. */ if (reportTranslator === null) { - reportTranslator = createReportTranslator({ ruleId, severity, sourceCode }); + reportTranslator = createReportTranslator({ ruleId, severity, sourceCode, messageIds }); } const problem = reportTranslator.apply(null, arguments); @@ -957,7 +999,8 @@ module.exports = class Linter { }, leave(node) { eventGenerator.leaveNode(node); - } + }, + visitorKeys: sourceCode.visitorKeys }); return applyDisableDirectives({ diff --git a/tools/node_modules/eslint/lib/options.js b/tools/node_modules/eslint/lib/options.js index ee1d3369ce..c8005d4445 100644 --- a/tools/node_modules/eslint/lib/options.js +++ b/tools/node_modules/eslint/lib/options.js @@ -65,26 +65,6 @@ module.exports = optionator({ description: "Specify parser options" }, { - heading: "Caching" - }, - { - option: "cache", - type: "Boolean", - default: "false", - description: "Only check changed files" - }, - { - option: "cache-file", - type: "path::String", - default: ".eslintcache", - description: "Path to the cache file. Deprecated: use --cache-location" - }, - { - option: "cache-location", - type: "path::String", - description: "Path to the cache file or directory" - }, - { heading: "Specifying rules and plugins" }, { @@ -103,6 +83,21 @@ module.exports = optionator({ description: "Specify rules" }, { + heading: "Fixing problems" + }, + { + option: "fix", + type: "Boolean", + default: false, + description: "Automatically fix problems" + }, + { + option: "fix-dry-run", + type: "Boolean", + default: false, + description: "Automatically fix problems without saving the changes to the file system" + }, + { heading: "Ignoring files" }, { @@ -176,25 +171,48 @@ module.exports = optionator({ description: "Force enabling/disabling of color" }, { - heading: "Miscellaneous" + heading: "Inline configuration comments" }, { - option: "init", + option: "inline-config", type: "Boolean", - default: "false", - description: "Run config initialization wizard" + default: "true", + description: "Prevent comments from changing config or rules" }, { - option: "fix", + option: "report-unused-disable-directives", type: "Boolean", default: false, - description: "Automatically fix problems" + description: "Adds reported errors for unused eslint-disable directives" }, { - option: "fix-dry-run", + heading: "Caching" + }, + { + option: "cache", type: "Boolean", - default: false, - description: "Automatically fix problems without saving the changes to the file system" + default: "false", + description: "Only check changed files" + }, + { + option: "cache-file", + type: "path::String", + default: ".eslintcache", + description: "Path to the cache file. Deprecated: use --cache-location" + }, + { + option: "cache-location", + type: "path::String", + description: "Path to the cache file or directory" + }, + { + heading: "Miscellaneous" + }, + { + option: "init", + type: "Boolean", + default: "false", + description: "Run config initialization wizard" }, { option: "debug", @@ -215,18 +233,6 @@ module.exports = optionator({ description: "Output the version number" }, { - option: "inline-config", - type: "Boolean", - default: "true", - description: "Prevent comments from changing config or rules" - }, - { - option: "report-unused-disable-directives", - type: "Boolean", - default: false, - description: "Adds reported errors for unused eslint-disable directives" - }, - { option: "print-config", type: "path::String", description: "Print the configuration for the given file" diff --git a/tools/node_modules/eslint/lib/report-translator.js b/tools/node_modules/eslint/lib/report-translator.js index 9c4ab8b9a9..8e5b587f96 100644 --- a/tools/node_modules/eslint/lib/report-translator.js +++ b/tools/node_modules/eslint/lib/report-translator.js @@ -11,6 +11,7 @@ const assert = require("assert"); const ruleFixer = require("./util/rule-fixer"); +const interpolate = require("./util/interpolate"); //------------------------------------------------------------------------------ // Typedefs @@ -41,7 +42,9 @@ function normalizeMultiArgReportCall() { // If there is one argument, it is considered to be a new-style call already. if (arguments.length === 1) { - return arguments[0]; + + // Shallow clone the object to avoid surprises if reusing the descriptor + return Object.assign({}, arguments[0]); } // If the second argument is a string, the arguments are interpreted as [node, message, data, fix]. @@ -100,16 +103,7 @@ function normalizeReportLoc(descriptor) { * @returns {string} The interpolated message for the descriptor */ function normalizeMessagePlaceholders(descriptor) { - if (!descriptor.data) { - return descriptor.message; - } - return descriptor.message.replace(/\{\{\s*([^{}]+?)\s*\}\}/g, (fullMatch, term) => { - if (term in descriptor.data) { - return descriptor.data[term]; - } - - return fullMatch; - }); + return interpolate(descriptor.message, descriptor.data); } /** @@ -216,6 +210,14 @@ function createProblem(options) { source: options.sourceLines[options.loc.start.line - 1] || "" }; + /* + * If this isn’t in the conditional, some of the tests fail + * because `messageId` is present in the problem object + */ + if (options.messageId) { + problem.messageId = options.messageId; + } + if (options.loc.end) { problem.endLine = options.loc.end.line; problem.endColumn = options.loc.end.column + 1; @@ -231,12 +233,13 @@ function createProblem(options) { /** * Returns a function that converts the arguments of a `context.report` call from a rule into a reported * problem for the Node.js API. - * @param {{ruleId: string, severity: number, sourceCode: SourceCode}} metadata Metadata for the reported problem + * @param {{ruleId: string, severity: number, sourceCode: SourceCode, messageIds: Object}} metadata Metadata for the reported problem * @param {SourceCode} sourceCode The `SourceCode` instance for the text being linted * @returns {function(...args): { * ruleId: string, * severity: (0|1|2), - * message: string, + * message: (string|undefined), + * messageId: (string|undefined), * line: number, * column: number, * endLine: (number|undefined), @@ -261,11 +264,29 @@ module.exports = function createReportTranslator(metadata) { assertValidNodeInfo(descriptor); + if (descriptor.messageId) { + if (!metadata.messageIds) { + throw new TypeError("context.report() called with a messageId, but no messages were present in the rule metadata."); + } + const id = descriptor.messageId; + const messages = metadata.messageIds; + + if (descriptor.message) { + throw new TypeError("context.report() called with a message and a messageId. Please only pass one."); + } + if (!messages || !Object.prototype.hasOwnProperty.call(messages, id)) { + throw new TypeError(`context.report() called with a messageId of '${id}' which is not present in the 'messages' config: ${JSON.stringify(messages, null, 2)}`); + } + descriptor.message = messages[id]; + } + + return createProblem({ ruleId: metadata.ruleId, severity: metadata.severity, node: descriptor.node, message: normalizeMessagePlaceholders(descriptor), + messageId: descriptor.messageId, loc: normalizeReportLoc(descriptor), fix: normalizeFixes(descriptor, metadata.sourceCode), sourceLines: metadata.sourceCode.lines diff --git a/tools/node_modules/eslint/lib/rules/.eslintrc.yml b/tools/node_modules/eslint/lib/rules/.eslintrc.yml index 2a8d907935..64b3cee7f0 100644 --- a/tools/node_modules/eslint/lib/rules/.eslintrc.yml +++ b/tools/node_modules/eslint/lib/rules/.eslintrc.yml @@ -1,3 +1,4 @@ rules: rulesdir/no-invalid-meta: "error" rulesdir/consistent-docs-description: "error" + rulesdir/consistent-docs-url: "error" diff --git a/tools/node_modules/eslint/lib/rules/accessor-pairs.js b/tools/node_modules/eslint/lib/rules/accessor-pairs.js index 4afdc7136c..b01b29b176 100644 --- a/tools/node_modules/eslint/lib/rules/accessor-pairs.js +++ b/tools/node_modules/eslint/lib/rules/accessor-pairs.js @@ -75,7 +75,8 @@ module.exports = { docs: { description: "enforce getter and setter pairs in objects", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/accessor-pairs" }, schema: [{ type: "object", diff --git a/tools/node_modules/eslint/lib/rules/array-bracket-newline.js b/tools/node_modules/eslint/lib/rules/array-bracket-newline.js index cb7350a825..b939d65b3f 100644 --- a/tools/node_modules/eslint/lib/rules/array-bracket-newline.js +++ b/tools/node_modules/eslint/lib/rules/array-bracket-newline.js @@ -16,7 +16,8 @@ module.exports = { docs: { description: "enforce linebreaks after opening and before closing array brackets", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/array-bracket-newline" }, fixable: "whitespace", schema: [ diff --git a/tools/node_modules/eslint/lib/rules/array-bracket-spacing.js b/tools/node_modules/eslint/lib/rules/array-bracket-spacing.js index aecef2c4f2..933458a42a 100644 --- a/tools/node_modules/eslint/lib/rules/array-bracket-spacing.js +++ b/tools/node_modules/eslint/lib/rules/array-bracket-spacing.js @@ -15,7 +15,8 @@ module.exports = { docs: { description: "enforce consistent spacing inside array brackets", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/array-bracket-spacing" }, fixable: "whitespace", schema: [ diff --git a/tools/node_modules/eslint/lib/rules/array-callback-return.js b/tools/node_modules/eslint/lib/rules/array-callback-return.js index 37d6ebe3a7..69655481d8 100644 --- a/tools/node_modules/eslint/lib/rules/array-callback-return.js +++ b/tools/node_modules/eslint/lib/rules/array-callback-return.js @@ -142,13 +142,27 @@ module.exports = { docs: { description: "enforce `return` statements in callbacks of array methods", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/array-callback-return" }, - schema: [] + schema: [ + { + type: "object", + properties: { + allowImplicit: { + type: "boolean" + } + }, + additionalProperties: false + } + ] }, create(context) { + + const options = context.options[0] || { allowImplicit: false }; + let funcInfo = { upper: null, codePath: null, @@ -212,7 +226,8 @@ module.exports = { if (funcInfo.shouldCheck) { funcInfo.hasReturn = true; - if (!node.argument) { + // if allowImplicit: false, should also check node.argument + if (!options.allowImplicit && !node.argument) { context.report({ node, message: "{{name}} expected a return value.", diff --git a/tools/node_modules/eslint/lib/rules/array-element-newline.js b/tools/node_modules/eslint/lib/rules/array-element-newline.js index 26dc9bfa0b..22352c7e33 100644 --- a/tools/node_modules/eslint/lib/rules/array-element-newline.js +++ b/tools/node_modules/eslint/lib/rules/array-element-newline.js @@ -16,7 +16,8 @@ module.exports = { docs: { description: "enforce line breaks after each array element", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/array-element-newline" }, fixable: "whitespace", schema: [ diff --git a/tools/node_modules/eslint/lib/rules/arrow-body-style.js b/tools/node_modules/eslint/lib/rules/arrow-body-style.js index 78a391334d..afbf46fd54 100644 --- a/tools/node_modules/eslint/lib/rules/arrow-body-style.js +++ b/tools/node_modules/eslint/lib/rules/arrow-body-style.js @@ -19,7 +19,8 @@ module.exports = { docs: { description: "require braces around arrow function bodies", category: "ECMAScript 6", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/arrow-body-style" }, schema: { @@ -109,10 +110,22 @@ module.exports = { } if (never || asNeeded && blockBody[0].type === "ReturnStatement") { + let message; + + if (blockBody.length === 0) { + message = "Unexpected block statement surrounding arrow body; put a value of `undefined` immediately after the `=>`."; + } else if (blockBody.length > 1) { + message = "Unexpected block statement surrounding arrow body."; + } else if (astUtils.isOpeningBraceToken(sourceCode.getFirstToken(blockBody[0], { skip: 1 }))) { + message = "Unexpected block statement surrounding arrow body; parenthesize the returned value and move it immediately after the `=>`."; + } else { + message = "Unexpected block statement surrounding arrow body; move the returned value immediately after the `=>`."; + } + context.report({ node, loc: arrowBody.loc.start, - message: "Unexpected block statement surrounding arrow body.", + message, fix(fixer) { const fixes = []; diff --git a/tools/node_modules/eslint/lib/rules/arrow-parens.js b/tools/node_modules/eslint/lib/rules/arrow-parens.js index e8f8ddd8e7..5a0fd61b34 100644 --- a/tools/node_modules/eslint/lib/rules/arrow-parens.js +++ b/tools/node_modules/eslint/lib/rules/arrow-parens.js @@ -19,7 +19,8 @@ module.exports = { docs: { description: "require parentheses around arrow function arguments", category: "ECMAScript 6", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/arrow-parens" }, fixable: "code", diff --git a/tools/node_modules/eslint/lib/rules/arrow-spacing.js b/tools/node_modules/eslint/lib/rules/arrow-spacing.js index 37e03907cb..d2c5b9b77b 100644 --- a/tools/node_modules/eslint/lib/rules/arrow-spacing.js +++ b/tools/node_modules/eslint/lib/rules/arrow-spacing.js @@ -19,7 +19,8 @@ module.exports = { docs: { description: "enforce consistent spacing before and after the arrow in arrow functions", category: "ECMAScript 6", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/arrow-spacing" }, fixable: "whitespace", diff --git a/tools/node_modules/eslint/lib/rules/block-scoped-var.js b/tools/node_modules/eslint/lib/rules/block-scoped-var.js index 0b4d855fae..58cef1741a 100644 --- a/tools/node_modules/eslint/lib/rules/block-scoped-var.js +++ b/tools/node_modules/eslint/lib/rules/block-scoped-var.js @@ -13,7 +13,8 @@ module.exports = { docs: { description: "enforce the use of variables within the scope they are defined", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/block-scoped-var" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/block-spacing.js b/tools/node_modules/eslint/lib/rules/block-spacing.js index b3ea8405e2..4fbf6d4c0b 100644 --- a/tools/node_modules/eslint/lib/rules/block-spacing.js +++ b/tools/node_modules/eslint/lib/rules/block-spacing.js @@ -16,7 +16,8 @@ module.exports = { docs: { description: "disallow or enforce spaces inside of blocks after opening block and before closing block", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/block-spacing" }, fixable: "whitespace", diff --git a/tools/node_modules/eslint/lib/rules/brace-style.js b/tools/node_modules/eslint/lib/rules/brace-style.js index 320da9dac9..bc0ddbd78f 100644 --- a/tools/node_modules/eslint/lib/rules/brace-style.js +++ b/tools/node_modules/eslint/lib/rules/brace-style.js @@ -16,7 +16,8 @@ module.exports = { docs: { description: "enforce consistent brace style for blocks", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/brace-style" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/callback-return.js b/tools/node_modules/eslint/lib/rules/callback-return.js index 0fa7f278a1..ed85c7181a 100644 --- a/tools/node_modules/eslint/lib/rules/callback-return.js +++ b/tools/node_modules/eslint/lib/rules/callback-return.js @@ -13,7 +13,8 @@ module.exports = { docs: { description: "require `return` statements after callbacks", category: "Node.js and CommonJS", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/callback-return" }, schema: [{ diff --git a/tools/node_modules/eslint/lib/rules/camelcase.js b/tools/node_modules/eslint/lib/rules/camelcase.js index 6fb1475b21..86822f9752 100644 --- a/tools/node_modules/eslint/lib/rules/camelcase.js +++ b/tools/node_modules/eslint/lib/rules/camelcase.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "enforce camelcase naming convention", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/camelcase" }, schema: [ @@ -92,34 +93,45 @@ module.exports = { } // Always report underscored object names - if (node.parent.object.type === "Identifier" && - node.parent.object.name === node.name && - isUnderscored(name)) { + if (node.parent.object.type === "Identifier" && node.parent.object.name === node.name && isUnderscored(name)) { report(node); // Report AssignmentExpressions only if they are the left side of the assignment - } else if (effectiveParent.type === "AssignmentExpression" && - isUnderscored(name) && - (effectiveParent.right.type !== "MemberExpression" || - effectiveParent.left.type === "MemberExpression" && - effectiveParent.left.property.name === node.name)) { + } else if (effectiveParent.type === "AssignmentExpression" && isUnderscored(name) && (effectiveParent.right.type !== "MemberExpression" || effectiveParent.left.type === "MemberExpression" && effectiveParent.left.property.name === node.name)) { report(node); } - // Properties have their own rules - } else if (node.parent.type === "Property") { + /* + * Properties have their own rules, and + * AssignmentPattern nodes can be treated like Properties: + * e.g.: const { no_camelcased = false } = bar; + */ + } else if (node.parent.type === "Property" || node.parent.type === "AssignmentPattern") { - // "never" check properties - if (properties === "never") { - return; + if (node.parent.parent && node.parent.parent.type === "ObjectPattern") { + + if (node.parent.shorthand && node.parent.value.left && isUnderscored(name)) { + + report(node); + } + + // prevent checking righthand side of destructured object + if (node.parent.key === node && node.parent.value !== node) { + return; + } + + if (node.parent.value.name && isUnderscored(name)) { + report(node); + } } - if (node.parent.parent && node.parent.parent.type === "ObjectPattern" && - node.parent.key === node && node.parent.value !== node) { + // "never" check properties + if (properties === "never") { return; } - if (isUnderscored(name) && !ALLOWED_PARENT_TYPES.has(effectiveParent.type)) { + // don't check right hand side of AssignmentExpression to prevent duplicate warnings + if (isUnderscored(name) && !ALLOWED_PARENT_TYPES.has(effectiveParent.type) && !(node.parent.right === node)) { report(node); } diff --git a/tools/node_modules/eslint/lib/rules/capitalized-comments.js b/tools/node_modules/eslint/lib/rules/capitalized-comments.js index 1a27608067..19b5f6a717 100644 --- a/tools/node_modules/eslint/lib/rules/capitalized-comments.js +++ b/tools/node_modules/eslint/lib/rules/capitalized-comments.js @@ -113,7 +113,8 @@ module.exports = { docs: { description: "enforce or disallow capitalization of the first letter of a comment", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/capitalized-comments" }, fixable: "code", schema: [ diff --git a/tools/node_modules/eslint/lib/rules/class-methods-use-this.js b/tools/node_modules/eslint/lib/rules/class-methods-use-this.js index d429c579b9..774086780a 100644 --- a/tools/node_modules/eslint/lib/rules/class-methods-use-this.js +++ b/tools/node_modules/eslint/lib/rules/class-methods-use-this.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "enforce that class methods utilize `this`", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/class-methods-use-this" }, schema: [{ type: "object", diff --git a/tools/node_modules/eslint/lib/rules/comma-dangle.js b/tools/node_modules/eslint/lib/rules/comma-dangle.js index ddcc0cd229..180979d403 100644 --- a/tools/node_modules/eslint/lib/rules/comma-dangle.js +++ b/tools/node_modules/eslint/lib/rules/comma-dangle.js @@ -79,7 +79,8 @@ module.exports = { docs: { description: "require or disallow trailing commas", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/comma-dangle" }, fixable: "code", schema: { diff --git a/tools/node_modules/eslint/lib/rules/comma-spacing.js b/tools/node_modules/eslint/lib/rules/comma-spacing.js index 25a0e7d82c..dd3de7f354 100644 --- a/tools/node_modules/eslint/lib/rules/comma-spacing.js +++ b/tools/node_modules/eslint/lib/rules/comma-spacing.js @@ -15,7 +15,8 @@ module.exports = { docs: { description: "enforce consistent spacing before and after commas", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/comma-spacing" }, fixable: "whitespace", diff --git a/tools/node_modules/eslint/lib/rules/comma-style.js b/tools/node_modules/eslint/lib/rules/comma-style.js index 4c65338a44..8b96e5e25a 100644 --- a/tools/node_modules/eslint/lib/rules/comma-style.js +++ b/tools/node_modules/eslint/lib/rules/comma-style.js @@ -16,7 +16,8 @@ module.exports = { docs: { description: "enforce consistent comma style", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/comma-style" }, fixable: "code", schema: [ diff --git a/tools/node_modules/eslint/lib/rules/complexity.js b/tools/node_modules/eslint/lib/rules/complexity.js index e0313fa78f..1838d4bf8e 100644 --- a/tools/node_modules/eslint/lib/rules/complexity.js +++ b/tools/node_modules/eslint/lib/rules/complexity.js @@ -23,7 +23,8 @@ module.exports = { docs: { description: "enforce a maximum cyclomatic complexity allowed in a program", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/complexity" }, schema: [ @@ -126,20 +127,6 @@ module.exports = { } } - /** - * Increase the logical path complexity in context - * @param {ASTNode} node node to evaluate - * @returns {void} - * @private - */ - function increaseLogicalComplexity(node) { - - // Avoiding && - if (node.operator === "||") { - increaseComplexity(); - } - } - //-------------------------------------------------------------------------- // Public API //-------------------------------------------------------------------------- @@ -154,7 +141,7 @@ module.exports = { CatchClause: increaseComplexity, ConditionalExpression: increaseComplexity, - LogicalExpression: increaseLogicalComplexity, + LogicalExpression: increaseComplexity, ForStatement: increaseComplexity, ForInStatement: increaseComplexity, ForOfStatement: increaseComplexity, diff --git a/tools/node_modules/eslint/lib/rules/computed-property-spacing.js b/tools/node_modules/eslint/lib/rules/computed-property-spacing.js index 19c28fd22e..57408afb45 100644 --- a/tools/node_modules/eslint/lib/rules/computed-property-spacing.js +++ b/tools/node_modules/eslint/lib/rules/computed-property-spacing.js @@ -15,7 +15,8 @@ module.exports = { docs: { description: "enforce consistent spacing inside computed property brackets", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/computed-property-spacing" }, fixable: "whitespace", diff --git a/tools/node_modules/eslint/lib/rules/consistent-return.js b/tools/node_modules/eslint/lib/rules/consistent-return.js index a42faaa1ed..a436dd1fc0 100644 --- a/tools/node_modules/eslint/lib/rules/consistent-return.js +++ b/tools/node_modules/eslint/lib/rules/consistent-return.js @@ -56,7 +56,8 @@ module.exports = { docs: { description: "require `return` statements to either always or never specify values", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/consistent-return" }, schema: [{ diff --git a/tools/node_modules/eslint/lib/rules/consistent-this.js b/tools/node_modules/eslint/lib/rules/consistent-this.js index 151cdcf9c9..60690007f2 100644 --- a/tools/node_modules/eslint/lib/rules/consistent-this.js +++ b/tools/node_modules/eslint/lib/rules/consistent-this.js @@ -13,7 +13,8 @@ module.exports = { docs: { description: "enforce consistent naming when capturing the current execution context", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/consistent-this" }, schema: { diff --git a/tools/node_modules/eslint/lib/rules/constructor-super.js b/tools/node_modules/eslint/lib/rules/constructor-super.js index d0a238df8e..30637472f1 100644 --- a/tools/node_modules/eslint/lib/rules/constructor-super.js +++ b/tools/node_modules/eslint/lib/rules/constructor-super.js @@ -95,7 +95,8 @@ module.exports = { docs: { description: "require `super()` calls in constructors", category: "ECMAScript 6", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/constructor-super" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/curly.js b/tools/node_modules/eslint/lib/rules/curly.js index 37f07d95ee..7fdf57eda1 100644 --- a/tools/node_modules/eslint/lib/rules/curly.js +++ b/tools/node_modules/eslint/lib/rules/curly.js @@ -19,7 +19,8 @@ module.exports = { docs: { description: "enforce consistent brace style for all control statements", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/curly" }, schema: { diff --git a/tools/node_modules/eslint/lib/rules/default-case.js b/tools/node_modules/eslint/lib/rules/default-case.js index 32cd8dfe49..a66300a99b 100644 --- a/tools/node_modules/eslint/lib/rules/default-case.js +++ b/tools/node_modules/eslint/lib/rules/default-case.js @@ -15,7 +15,8 @@ module.exports = { docs: { description: "require `default` cases in `switch` statements", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/default-case" }, schema: [{ diff --git a/tools/node_modules/eslint/lib/rules/dot-location.js b/tools/node_modules/eslint/lib/rules/dot-location.js index 60f4af7013..c02476e035 100644 --- a/tools/node_modules/eslint/lib/rules/dot-location.js +++ b/tools/node_modules/eslint/lib/rules/dot-location.js @@ -16,7 +16,8 @@ module.exports = { docs: { description: "enforce consistent newlines before and after dots", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/dot-location" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/dot-notation.js b/tools/node_modules/eslint/lib/rules/dot-notation.js index 21e3df1741..10c73b41f0 100644 --- a/tools/node_modules/eslint/lib/rules/dot-notation.js +++ b/tools/node_modules/eslint/lib/rules/dot-notation.js @@ -22,7 +22,8 @@ module.exports = { docs: { description: "enforce dot notation whenever possible", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/dot-notation" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/eol-last.js b/tools/node_modules/eslint/lib/rules/eol-last.js index 1f3676b0e9..f96352676c 100644 --- a/tools/node_modules/eslint/lib/rules/eol-last.js +++ b/tools/node_modules/eslint/lib/rules/eol-last.js @@ -19,7 +19,8 @@ module.exports = { docs: { description: "require or disallow newline at the end of files", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/eol-last" }, fixable: "whitespace", schema: [ @@ -46,6 +47,14 @@ module.exports = { CRLF = `\r${LF}`, endsWithNewline = lodash.endsWith(src, LF); + /* + * Empty source is always valid: No content in file so we don't + * need to lint for a newline on the last line of content. + */ + if (!src.length) { + return; + } + let mode = context.options[0] || "always", appendCRLF = false; diff --git a/tools/node_modules/eslint/lib/rules/eqeqeq.js b/tools/node_modules/eslint/lib/rules/eqeqeq.js index 8801102e64..fc65450af4 100644 --- a/tools/node_modules/eslint/lib/rules/eqeqeq.js +++ b/tools/node_modules/eslint/lib/rules/eqeqeq.js @@ -20,7 +20,8 @@ module.exports = { docs: { description: "require the use of `===` and `!==`", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/eqeqeq" }, schema: { diff --git a/tools/node_modules/eslint/lib/rules/for-direction.js b/tools/node_modules/eslint/lib/rules/for-direction.js index 7178ced9db..c91888da22 100644 --- a/tools/node_modules/eslint/lib/rules/for-direction.js +++ b/tools/node_modules/eslint/lib/rules/for-direction.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "enforce \"for\" loop update clause moving the counter in the right direction.", category: "Possible Errors", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/for-direction" }, fixable: null, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/func-call-spacing.js b/tools/node_modules/eslint/lib/rules/func-call-spacing.js index 00e677d33b..b13613cf80 100644 --- a/tools/node_modules/eslint/lib/rules/func-call-spacing.js +++ b/tools/node_modules/eslint/lib/rules/func-call-spacing.js @@ -20,7 +20,8 @@ module.exports = { docs: { description: "require or disallow spacing between function identifiers and their invocations", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/func-call-spacing" }, fixable: "whitespace", diff --git a/tools/node_modules/eslint/lib/rules/func-name-matching.js b/tools/node_modules/eslint/lib/rules/func-name-matching.js index db06d5d468..85fd7d4f1e 100644 --- a/tools/node_modules/eslint/lib/rules/func-name-matching.js +++ b/tools/node_modules/eslint/lib/rules/func-name-matching.js @@ -70,7 +70,8 @@ module.exports = { docs: { description: "require function names to match the name of the variable or property to which they are assigned", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/func-name-matching" }, schema: { diff --git a/tools/node_modules/eslint/lib/rules/func-names.js b/tools/node_modules/eslint/lib/rules/func-names.js index 848ce97574..722f276c1d 100644 --- a/tools/node_modules/eslint/lib/rules/func-names.js +++ b/tools/node_modules/eslint/lib/rules/func-names.js @@ -29,7 +29,8 @@ module.exports = { docs: { description: "require or disallow named `function` expressions", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/func-names" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/func-style.js b/tools/node_modules/eslint/lib/rules/func-style.js index 123eae3d8a..ea6d74fb3a 100644 --- a/tools/node_modules/eslint/lib/rules/func-style.js +++ b/tools/node_modules/eslint/lib/rules/func-style.js @@ -13,7 +13,8 @@ module.exports = { docs: { description: "enforce the consistent use of either `function` declarations or expressions", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/func-style" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/function-paren-newline.js b/tools/node_modules/eslint/lib/rules/function-paren-newline.js index 10ad960a4d..7e4f2792cf 100644 --- a/tools/node_modules/eslint/lib/rules/function-paren-newline.js +++ b/tools/node_modules/eslint/lib/rules/function-paren-newline.js @@ -19,7 +19,8 @@ module.exports = { docs: { description: "enforce consistent line breaks inside function parentheses", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/function-paren-newline" }, fixable: "whitespace", schema: [ diff --git a/tools/node_modules/eslint/lib/rules/generator-star-spacing.js b/tools/node_modules/eslint/lib/rules/generator-star-spacing.js index a718b59afc..282b37510b 100644 --- a/tools/node_modules/eslint/lib/rules/generator-star-spacing.js +++ b/tools/node_modules/eslint/lib/rules/generator-star-spacing.js @@ -30,7 +30,8 @@ module.exports = { docs: { description: "enforce consistent spacing around `*` operators in generator functions", category: "ECMAScript 6", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/generator-star-spacing" }, fixable: "whitespace", diff --git a/tools/node_modules/eslint/lib/rules/getter-return.js b/tools/node_modules/eslint/lib/rules/getter-return.js index 6eb1efc00c..58f2a3978b 100644 --- a/tools/node_modules/eslint/lib/rules/getter-return.js +++ b/tools/node_modules/eslint/lib/rules/getter-return.js @@ -47,7 +47,8 @@ module.exports = { docs: { description: "enforce `return` statements in getters", category: "Possible Errors", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/getter-return" }, fixable: null, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/global-require.js b/tools/node_modules/eslint/lib/rules/global-require.js index beda8d99f1..a5f5335d01 100644 --- a/tools/node_modules/eslint/lib/rules/global-require.js +++ b/tools/node_modules/eslint/lib/rules/global-require.js @@ -51,7 +51,8 @@ module.exports = { docs: { description: "require `require()` calls to be placed at top-level module scope", category: "Node.js and CommonJS", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/global-require" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/guard-for-in.js b/tools/node_modules/eslint/lib/rules/guard-for-in.js index 754830f6a6..88a9106b3f 100644 --- a/tools/node_modules/eslint/lib/rules/guard-for-in.js +++ b/tools/node_modules/eslint/lib/rules/guard-for-in.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "require `for-in` loops to include an `if` statement", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/guard-for-in" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/handle-callback-err.js b/tools/node_modules/eslint/lib/rules/handle-callback-err.js index de36a0c1b0..f6e6c108ce 100644 --- a/tools/node_modules/eslint/lib/rules/handle-callback-err.js +++ b/tools/node_modules/eslint/lib/rules/handle-callback-err.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "require error handling in callbacks", category: "Node.js and CommonJS", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/handle-callback-err" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/id-blacklist.js b/tools/node_modules/eslint/lib/rules/id-blacklist.js index ee28c0b5a8..ba9b5d4b39 100644 --- a/tools/node_modules/eslint/lib/rules/id-blacklist.js +++ b/tools/node_modules/eslint/lib/rules/id-blacklist.js @@ -15,7 +15,8 @@ module.exports = { docs: { description: "disallow specified identifiers", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/id-blacklist" }, schema: { diff --git a/tools/node_modules/eslint/lib/rules/id-length.js b/tools/node_modules/eslint/lib/rules/id-length.js index dad9c40649..eaed26217d 100644 --- a/tools/node_modules/eslint/lib/rules/id-length.js +++ b/tools/node_modules/eslint/lib/rules/id-length.js @@ -15,7 +15,8 @@ module.exports = { docs: { description: "enforce minimum and maximum identifier lengths", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/id-length" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/id-match.js b/tools/node_modules/eslint/lib/rules/id-match.js index 0420fdc74e..608ef17d11 100644 --- a/tools/node_modules/eslint/lib/rules/id-match.js +++ b/tools/node_modules/eslint/lib/rules/id-match.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "require identifiers to match a specified regular expression", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/id-match" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/implicit-arrow-linebreak.js b/tools/node_modules/eslint/lib/rules/implicit-arrow-linebreak.js index b8802f4de5..a7ad1122b5 100644 --- a/tools/node_modules/eslint/lib/rules/implicit-arrow-linebreak.js +++ b/tools/node_modules/eslint/lib/rules/implicit-arrow-linebreak.js @@ -12,7 +12,8 @@ module.exports = { docs: { description: "enforce the location of arrow function bodies", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/implicit-arrow-linebreak" }, fixable: "whitespace", schema: [ diff --git a/tools/node_modules/eslint/lib/rules/indent-legacy.js b/tools/node_modules/eslint/lib/rules/indent-legacy.js index cf91406806..701cf01632 100644 --- a/tools/node_modules/eslint/lib/rules/indent-legacy.js +++ b/tools/node_modules/eslint/lib/rules/indent-legacy.js @@ -25,7 +25,8 @@ module.exports = { description: "enforce consistent indentation", category: "Stylistic Issues", recommended: false, - replacedBy: ["indent"] + replacedBy: ["indent"], + url: "https://eslint.org/docs/rules/indent-legacy" }, deprecated: true, diff --git a/tools/node_modules/eslint/lib/rules/indent.js b/tools/node_modules/eslint/lib/rules/indent.js index 42cebf9ea5..2159880f88 100644 --- a/tools/node_modules/eslint/lib/rules/indent.js +++ b/tools/node_modules/eslint/lib/rules/indent.js @@ -492,7 +492,8 @@ module.exports = { docs: { description: "enforce consistent indentation", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/indent" }, fixable: "whitespace", @@ -600,6 +601,9 @@ module.exports = { pattern: ":exit$" } } + }, + ignoreComments: { + type: "boolean" } }, additionalProperties: false @@ -638,7 +642,8 @@ module.exports = { ObjectExpression: 1, ImportDeclaration: 1, flatTernaryExpressions: false, - ignoredNodes: [] + ignoredNodes: [], + ignoreComments: false }; if (context.options.length) { @@ -1457,6 +1462,12 @@ module.exports = { }, "Program:exit"() { + // If ignoreComments option is enabled, ignore all comment tokens. + if (options.ignoreComments) { + sourceCode.getAllComments() + .forEach(comment => offsets.ignoreToken(comment)); + } + // Invoke the queued offset listeners for the nodes that aren't ignored. listenerCallQueue .filter(nodeInfo => !ignoredNodes.has(nodeInfo.node)) diff --git a/tools/node_modules/eslint/lib/rules/init-declarations.js b/tools/node_modules/eslint/lib/rules/init-declarations.js index 1f53f3dfc4..412b96dc0a 100644 --- a/tools/node_modules/eslint/lib/rules/init-declarations.js +++ b/tools/node_modules/eslint/lib/rules/init-declarations.js @@ -47,7 +47,8 @@ module.exports = { docs: { description: "require or disallow initialization in variable declarations", category: "Variables", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/init-declarations" }, schema: { diff --git a/tools/node_modules/eslint/lib/rules/jsx-quotes.js b/tools/node_modules/eslint/lib/rules/jsx-quotes.js index 5653922d94..54ec481a80 100644 --- a/tools/node_modules/eslint/lib/rules/jsx-quotes.js +++ b/tools/node_modules/eslint/lib/rules/jsx-quotes.js @@ -41,7 +41,8 @@ module.exports = { docs: { description: "enforce the consistent use of either double or single quotes in JSX attributes", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/jsx-quotes" }, fixable: "whitespace", diff --git a/tools/node_modules/eslint/lib/rules/key-spacing.js b/tools/node_modules/eslint/lib/rules/key-spacing.js index 1c62ad4289..1ae4990a59 100644 --- a/tools/node_modules/eslint/lib/rules/key-spacing.js +++ b/tools/node_modules/eslint/lib/rules/key-spacing.js @@ -131,7 +131,8 @@ module.exports = { docs: { description: "enforce consistent spacing between keys and values in object literal properties", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/key-spacing" }, fixable: "whitespace", diff --git a/tools/node_modules/eslint/lib/rules/keyword-spacing.js b/tools/node_modules/eslint/lib/rules/keyword-spacing.js index 218cfd02be..d0dd640255 100644 --- a/tools/node_modules/eslint/lib/rules/keyword-spacing.js +++ b/tools/node_modules/eslint/lib/rules/keyword-spacing.js @@ -68,7 +68,8 @@ module.exports = { docs: { description: "enforce consistent spacing before and after keywords", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/keyword-spacing" }, fixable: "whitespace", diff --git a/tools/node_modules/eslint/lib/rules/line-comment-position.js b/tools/node_modules/eslint/lib/rules/line-comment-position.js index 0df806cca8..ebdb024f6e 100644 --- a/tools/node_modules/eslint/lib/rules/line-comment-position.js +++ b/tools/node_modules/eslint/lib/rules/line-comment-position.js @@ -15,7 +15,8 @@ module.exports = { docs: { description: "enforce position of line comments", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/line-comment-position" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/linebreak-style.js b/tools/node_modules/eslint/lib/rules/linebreak-style.js index 907bc02ec4..d5a170f730 100644 --- a/tools/node_modules/eslint/lib/rules/linebreak-style.js +++ b/tools/node_modules/eslint/lib/rules/linebreak-style.js @@ -20,7 +20,8 @@ module.exports = { docs: { description: "enforce consistent linebreak style", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/linebreak-style" }, fixable: "whitespace", diff --git a/tools/node_modules/eslint/lib/rules/lines-around-comment.js b/tools/node_modules/eslint/lib/rules/lines-around-comment.js index 3df9cb86f4..5d98473be1 100644 --- a/tools/node_modules/eslint/lib/rules/lines-around-comment.js +++ b/tools/node_modules/eslint/lib/rules/lines-around-comment.js @@ -55,7 +55,8 @@ module.exports = { docs: { description: "require empty lines around comments", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/lines-around-comment" }, fixable: "whitespace", diff --git a/tools/node_modules/eslint/lib/rules/lines-around-directive.js b/tools/node_modules/eslint/lib/rules/lines-around-directive.js index b560009f71..3ba3ab5bb3 100644 --- a/tools/node_modules/eslint/lib/rules/lines-around-directive.js +++ b/tools/node_modules/eslint/lib/rules/lines-around-directive.js @@ -18,7 +18,8 @@ module.exports = { description: "require or disallow newlines around directives", category: "Stylistic Issues", recommended: false, - replacedBy: ["padding-line-between-statements"] + replacedBy: ["padding-line-between-statements"], + url: "https://eslint.org/docs/rules/lines-around-directive" }, schema: [{ oneOf: [ diff --git a/tools/node_modules/eslint/lib/rules/lines-between-class-members.js b/tools/node_modules/eslint/lib/rules/lines-between-class-members.js index 85e8c69358..252984da5a 100644 --- a/tools/node_modules/eslint/lib/rules/lines-between-class-members.js +++ b/tools/node_modules/eslint/lib/rules/lines-between-class-members.js @@ -15,7 +15,8 @@ module.exports = { docs: { description: "require or disallow an empty line between class members", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/lines-between-class-members" }, fixable: "whitespace", @@ -55,7 +56,56 @@ module.exports = { * @returns {boolean} True if there is at least a line between the tokens */ function isPaddingBetweenTokens(first, second) { - return second.loc.start.line - first.loc.end.line >= 2; + const comments = sourceCode.getCommentsBefore(second); + const len = comments.length; + + // If there is no comments + if (len === 0) { + const linesBetweenFstAndSnd = second.loc.start.line - first.loc.end.line - 1; + + return linesBetweenFstAndSnd >= 1; + } + + + // If there are comments + let sumOfCommentLines = 0; // the numbers of lines of comments + let prevCommentLineNum = -1; // line number of the end of the previous comment + + for (let i = 0; i < len; i++) { + const commentLinesOfThisComment = comments[i].loc.end.line - comments[i].loc.start.line + 1; + + sumOfCommentLines += commentLinesOfThisComment; + + /* + * If this comment and the previous comment are in the same line, + * the count of comment lines is duplicated. So decrement sumOfCommentLines. + */ + if (prevCommentLineNum === comments[i].loc.start.line) { + sumOfCommentLines -= 1; + } + + prevCommentLineNum = comments[i].loc.end.line; + } + + /* + * If the first block and the first comment are in the same line, + * the count of comment lines is duplicated. So decrement sumOfCommentLines. + */ + if (first.loc.end.line === comments[0].loc.start.line) { + sumOfCommentLines -= 1; + } + + /* + * If the last comment and the second block are in the same line, + * the count of comment lines is duplicated. So decrement sumOfCommentLines. + */ + if (comments[len - 1].loc.end.line === second.loc.start.line) { + sumOfCommentLines -= 1; + } + + const linesBetweenFstAndSnd = second.loc.start.line - first.loc.end.line - 1; + + return linesBetweenFstAndSnd - sumOfCommentLines >= 1; } return { @@ -65,8 +115,7 @@ module.exports = { for (let i = 0; i < body.length - 1; i++) { const curFirst = sourceCode.getFirstToken(body[i]); const curLast = sourceCode.getLastToken(body[i]); - const comments = sourceCode.getCommentsBefore(body[i + 1]); - const nextFirst = comments.length ? comments[0] : sourceCode.getFirstToken(body[i + 1]); + const nextFirst = sourceCode.getFirstToken(body[i + 1]); const isPadded = isPaddingBetweenTokens(curLast, nextFirst); const isMulti = !astUtils.isTokenOnSameLine(curFirst, curLast); const skip = !isMulti && options[1].exceptAfterSingleLine; diff --git a/tools/node_modules/eslint/lib/rules/max-depth.js b/tools/node_modules/eslint/lib/rules/max-depth.js index 74c13ffa9f..ead44b90cb 100644 --- a/tools/node_modules/eslint/lib/rules/max-depth.js +++ b/tools/node_modules/eslint/lib/rules/max-depth.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "enforce a maximum depth that blocks can be nested", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/max-depth" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/max-len.js b/tools/node_modules/eslint/lib/rules/max-len.js index 27d549c9c5..35ac803b65 100644 --- a/tools/node_modules/eslint/lib/rules/max-len.js +++ b/tools/node_modules/eslint/lib/rules/max-len.js @@ -68,7 +68,8 @@ module.exports = { docs: { description: "enforce a maximum line length", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/max-len" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/max-lines.js b/tools/node_modules/eslint/lib/rules/max-lines.js index 297c75dc13..9bb4420edc 100644 --- a/tools/node_modules/eslint/lib/rules/max-lines.js +++ b/tools/node_modules/eslint/lib/rules/max-lines.js @@ -20,7 +20,8 @@ module.exports = { docs: { description: "enforce a maximum number of lines per file", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/max-lines" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/max-nested-callbacks.js b/tools/node_modules/eslint/lib/rules/max-nested-callbacks.js index a89f49ae02..7d7386ec1e 100644 --- a/tools/node_modules/eslint/lib/rules/max-nested-callbacks.js +++ b/tools/node_modules/eslint/lib/rules/max-nested-callbacks.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "enforce a maximum depth that callbacks can be nested", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/max-nested-callbacks" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/max-params.js b/tools/node_modules/eslint/lib/rules/max-params.js index 85838adacc..d7c22c5274 100644 --- a/tools/node_modules/eslint/lib/rules/max-params.js +++ b/tools/node_modules/eslint/lib/rules/max-params.js @@ -22,7 +22,8 @@ module.exports = { docs: { description: "enforce a maximum number of parameters in function definitions", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/max-params" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/max-statements-per-line.js b/tools/node_modules/eslint/lib/rules/max-statements-per-line.js index 3d18da4ee1..a6776bdea9 100644 --- a/tools/node_modules/eslint/lib/rules/max-statements-per-line.js +++ b/tools/node_modules/eslint/lib/rules/max-statements-per-line.js @@ -19,7 +19,8 @@ module.exports = { docs: { description: "enforce a maximum number of statements allowed per line", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/max-statements-per-line" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/max-statements.js b/tools/node_modules/eslint/lib/rules/max-statements.js index f98aa3a21d..faa0d5d844 100644 --- a/tools/node_modules/eslint/lib/rules/max-statements.js +++ b/tools/node_modules/eslint/lib/rules/max-statements.js @@ -22,7 +22,8 @@ module.exports = { docs: { description: "enforce a maximum number of statements allowed in function blocks", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/max-statements" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/multiline-comment-style.js b/tools/node_modules/eslint/lib/rules/multiline-comment-style.js index db4f768443..4da9a619fc 100644 --- a/tools/node_modules/eslint/lib/rules/multiline-comment-style.js +++ b/tools/node_modules/eslint/lib/rules/multiline-comment-style.js @@ -15,7 +15,8 @@ module.exports = { docs: { description: "enforce a particular style for multiline comments", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/multiline-comment-style" }, fixable: "whitespace", schema: [{ enum: ["starred-block", "separate-lines", "bare-block"] }] diff --git a/tools/node_modules/eslint/lib/rules/multiline-ternary.js b/tools/node_modules/eslint/lib/rules/multiline-ternary.js index a74f241d86..10cf269fb1 100644 --- a/tools/node_modules/eslint/lib/rules/multiline-ternary.js +++ b/tools/node_modules/eslint/lib/rules/multiline-ternary.js @@ -16,7 +16,8 @@ module.exports = { docs: { description: "enforce newlines between operands of ternary expressions", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/multiline-ternary" }, schema: [ { diff --git a/tools/node_modules/eslint/lib/rules/new-cap.js b/tools/node_modules/eslint/lib/rules/new-cap.js index f01e8f90ac..cc33e3b817 100644 --- a/tools/node_modules/eslint/lib/rules/new-cap.js +++ b/tools/node_modules/eslint/lib/rules/new-cap.js @@ -77,7 +77,8 @@ module.exports = { docs: { description: "require constructor names to begin with a capital letter", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/new-cap" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/new-parens.js b/tools/node_modules/eslint/lib/rules/new-parens.js index aa0f7fe931..abf2e032b7 100644 --- a/tools/node_modules/eslint/lib/rules/new-parens.js +++ b/tools/node_modules/eslint/lib/rules/new-parens.js @@ -24,7 +24,8 @@ module.exports = { docs: { description: "require parentheses when invoking a constructor with no arguments", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/new-parens" }, schema: [], diff --git a/tools/node_modules/eslint/lib/rules/newline-after-var.js b/tools/node_modules/eslint/lib/rules/newline-after-var.js index 80f73c836f..b11d9d9952 100644 --- a/tools/node_modules/eslint/lib/rules/newline-after-var.js +++ b/tools/node_modules/eslint/lib/rules/newline-after-var.js @@ -22,7 +22,8 @@ module.exports = { description: "require or disallow an empty line after variable declarations", category: "Stylistic Issues", recommended: false, - replacedBy: ["padding-line-between-statements"] + replacedBy: ["padding-line-between-statements"], + url: "https://eslint.org/docs/rules/newline-after-var" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/newline-before-return.js b/tools/node_modules/eslint/lib/rules/newline-before-return.js index 02bd66db13..5bc1f7031b 100644 --- a/tools/node_modules/eslint/lib/rules/newline-before-return.js +++ b/tools/node_modules/eslint/lib/rules/newline-before-return.js @@ -15,7 +15,8 @@ module.exports = { description: "require an empty line before `return` statements", category: "Stylistic Issues", recommended: false, - replacedBy: ["padding-line-between-statements"] + replacedBy: ["padding-line-between-statements"], + url: "https://eslint.org/docs/rules/newline-before-return" }, fixable: "whitespace", schema: [], diff --git a/tools/node_modules/eslint/lib/rules/newline-per-chained-call.js b/tools/node_modules/eslint/lib/rules/newline-per-chained-call.js index 356c4baf32..9691da44e0 100644 --- a/tools/node_modules/eslint/lib/rules/newline-per-chained-call.js +++ b/tools/node_modules/eslint/lib/rules/newline-per-chained-call.js @@ -17,7 +17,8 @@ module.exports = { docs: { description: "require a newline after each call in a method chain", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/newline-per-chained-call" }, fixable: "whitespace", schema: [{ diff --git a/tools/node_modules/eslint/lib/rules/no-alert.js b/tools/node_modules/eslint/lib/rules/no-alert.js index bc1087253b..b4fd231215 100644 --- a/tools/node_modules/eslint/lib/rules/no-alert.js +++ b/tools/node_modules/eslint/lib/rules/no-alert.js @@ -88,7 +88,8 @@ module.exports = { docs: { description: "disallow the use of `alert`, `confirm`, and `prompt`", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-alert" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-array-constructor.js b/tools/node_modules/eslint/lib/rules/no-array-constructor.js index 70dc8b4cd5..187389fdff 100644 --- a/tools/node_modules/eslint/lib/rules/no-array-constructor.js +++ b/tools/node_modules/eslint/lib/rules/no-array-constructor.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "disallow `Array` constructors", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-array-constructor" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-await-in-loop.js b/tools/node_modules/eslint/lib/rules/no-await-in-loop.js index d1ed92b704..7d4f8a0a6b 100644 --- a/tools/node_modules/eslint/lib/rules/no-await-in-loop.js +++ b/tools/node_modules/eslint/lib/rules/no-await-in-loop.js @@ -28,7 +28,8 @@ module.exports = { docs: { description: "disallow `await` inside of loops", category: "Possible Errors", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-await-in-loop" }, schema: [] }, diff --git a/tools/node_modules/eslint/lib/rules/no-bitwise.js b/tools/node_modules/eslint/lib/rules/no-bitwise.js index f062ad2669..8376674f65 100644 --- a/tools/node_modules/eslint/lib/rules/no-bitwise.js +++ b/tools/node_modules/eslint/lib/rules/no-bitwise.js @@ -25,7 +25,8 @@ module.exports = { docs: { description: "disallow bitwise operators", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-bitwise" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/no-buffer-constructor.js b/tools/node_modules/eslint/lib/rules/no-buffer-constructor.js index 1521ff2847..55f181ee69 100644 --- a/tools/node_modules/eslint/lib/rules/no-buffer-constructor.js +++ b/tools/node_modules/eslint/lib/rules/no-buffer-constructor.js @@ -13,7 +13,8 @@ module.exports = { docs: { description: "disallow use of the Buffer() constructor", category: "Node.js and CommonJS", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-buffer-constructor" }, schema: [] }, diff --git a/tools/node_modules/eslint/lib/rules/no-caller.js b/tools/node_modules/eslint/lib/rules/no-caller.js index 55a37b7d86..df10bf3736 100644 --- a/tools/node_modules/eslint/lib/rules/no-caller.js +++ b/tools/node_modules/eslint/lib/rules/no-caller.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "disallow the use of `arguments.caller` or `arguments.callee`", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-caller" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-case-declarations.js b/tools/node_modules/eslint/lib/rules/no-case-declarations.js index e801c6bb6e..03c730ddbd 100644 --- a/tools/node_modules/eslint/lib/rules/no-case-declarations.js +++ b/tools/node_modules/eslint/lib/rules/no-case-declarations.js @@ -13,7 +13,8 @@ module.exports = { docs: { description: "disallow lexical declarations in case clauses", category: "Best Practices", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-case-declarations" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-catch-shadow.js b/tools/node_modules/eslint/lib/rules/no-catch-shadow.js index bef61902e9..69a4e6aff8 100644 --- a/tools/node_modules/eslint/lib/rules/no-catch-shadow.js +++ b/tools/node_modules/eslint/lib/rules/no-catch-shadow.js @@ -20,7 +20,8 @@ module.exports = { docs: { description: "disallow `catch` clause parameters from shadowing variables in the outer scope", category: "Variables", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-catch-shadow" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-class-assign.js b/tools/node_modules/eslint/lib/rules/no-class-assign.js index 4b0443abc7..56e75122a2 100644 --- a/tools/node_modules/eslint/lib/rules/no-class-assign.js +++ b/tools/node_modules/eslint/lib/rules/no-class-assign.js @@ -16,7 +16,8 @@ module.exports = { docs: { description: "disallow reassigning class members", category: "ECMAScript 6", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-class-assign" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-compare-neg-zero.js b/tools/node_modules/eslint/lib/rules/no-compare-neg-zero.js index 604e221919..09cf295063 100644 --- a/tools/node_modules/eslint/lib/rules/no-compare-neg-zero.js +++ b/tools/node_modules/eslint/lib/rules/no-compare-neg-zero.js @@ -13,7 +13,8 @@ module.exports = { docs: { description: "disallow comparing against -0", category: "Possible Errors", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-compare-neg-zero" }, fixable: null, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-cond-assign.js b/tools/node_modules/eslint/lib/rules/no-cond-assign.js index 7c031c13f0..e761be14ec 100644 --- a/tools/node_modules/eslint/lib/rules/no-cond-assign.js +++ b/tools/node_modules/eslint/lib/rules/no-cond-assign.js @@ -22,7 +22,8 @@ module.exports = { docs: { description: "disallow assignment operators in conditional expressions", category: "Possible Errors", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-cond-assign" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/no-confusing-arrow.js b/tools/node_modules/eslint/lib/rules/no-confusing-arrow.js index fc69ca39a9..542a4060e2 100644 --- a/tools/node_modules/eslint/lib/rules/no-confusing-arrow.js +++ b/tools/node_modules/eslint/lib/rules/no-confusing-arrow.js @@ -30,7 +30,8 @@ module.exports = { docs: { description: "disallow arrow functions where they could be confused with comparisons", category: "ECMAScript 6", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-confusing-arrow" }, fixable: "code", diff --git a/tools/node_modules/eslint/lib/rules/no-console.js b/tools/node_modules/eslint/lib/rules/no-console.js index f5a3a235e6..b00582ebad 100644 --- a/tools/node_modules/eslint/lib/rules/no-console.js +++ b/tools/node_modules/eslint/lib/rules/no-console.js @@ -20,7 +20,8 @@ module.exports = { docs: { description: "disallow the use of `console`", category: "Possible Errors", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-console" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/no-const-assign.js b/tools/node_modules/eslint/lib/rules/no-const-assign.js index db1848a981..8a08a52df4 100644 --- a/tools/node_modules/eslint/lib/rules/no-const-assign.js +++ b/tools/node_modules/eslint/lib/rules/no-const-assign.js @@ -16,7 +16,8 @@ module.exports = { docs: { description: "disallow reassigning `const` variables", category: "ECMAScript 6", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-const-assign" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-constant-condition.js b/tools/node_modules/eslint/lib/rules/no-constant-condition.js index 0cd445dfdb..5611d617ec 100644 --- a/tools/node_modules/eslint/lib/rules/no-constant-condition.js +++ b/tools/node_modules/eslint/lib/rules/no-constant-condition.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "disallow constant expressions in conditions", category: "Possible Errors", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-constant-condition" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/no-continue.js b/tools/node_modules/eslint/lib/rules/no-continue.js index 2615fba13e..52061ef532 100644 --- a/tools/node_modules/eslint/lib/rules/no-continue.js +++ b/tools/node_modules/eslint/lib/rules/no-continue.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "disallow `continue` statements", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-continue" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-control-regex.js b/tools/node_modules/eslint/lib/rules/no-control-regex.js index 14981f4ab1..676c666128 100644 --- a/tools/node_modules/eslint/lib/rules/no-control-regex.js +++ b/tools/node_modules/eslint/lib/rules/no-control-regex.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "disallow control characters in regular expressions", category: "Possible Errors", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-control-regex" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-debugger.js b/tools/node_modules/eslint/lib/rules/no-debugger.js index d79cb18166..7d816e3a00 100644 --- a/tools/node_modules/eslint/lib/rules/no-debugger.js +++ b/tools/node_modules/eslint/lib/rules/no-debugger.js @@ -16,7 +16,8 @@ module.exports = { docs: { description: "disallow the use of `debugger`", category: "Possible Errors", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-debugger" }, fixable: "code", schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-delete-var.js b/tools/node_modules/eslint/lib/rules/no-delete-var.js index adc1b5bb9c..9ca09f1dea 100644 --- a/tools/node_modules/eslint/lib/rules/no-delete-var.js +++ b/tools/node_modules/eslint/lib/rules/no-delete-var.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "disallow deleting variables", category: "Variables", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-delete-var" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-div-regex.js b/tools/node_modules/eslint/lib/rules/no-div-regex.js index 84a9b9a3aa..87423f8861 100644 --- a/tools/node_modules/eslint/lib/rules/no-div-regex.js +++ b/tools/node_modules/eslint/lib/rules/no-div-regex.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "disallow division operators explicitly at the beginning of regular expressions", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-div-regex" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-dupe-args.js b/tools/node_modules/eslint/lib/rules/no-dupe-args.js index c932be01d7..a71d01f9bd 100644 --- a/tools/node_modules/eslint/lib/rules/no-dupe-args.js +++ b/tools/node_modules/eslint/lib/rules/no-dupe-args.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "disallow duplicate arguments in `function` definitions", category: "Possible Errors", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-dupe-args" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-dupe-class-members.js b/tools/node_modules/eslint/lib/rules/no-dupe-class-members.js index 07b999fab1..cc7f8da284 100644 --- a/tools/node_modules/eslint/lib/rules/no-dupe-class-members.js +++ b/tools/node_modules/eslint/lib/rules/no-dupe-class-members.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "disallow duplicate class members", category: "ECMAScript 6", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-dupe-class-members" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-dupe-keys.js b/tools/node_modules/eslint/lib/rules/no-dupe-keys.js index 0120d0b38c..10955e4503 100644 --- a/tools/node_modules/eslint/lib/rules/no-dupe-keys.js +++ b/tools/node_modules/eslint/lib/rules/no-dupe-keys.js @@ -87,7 +87,8 @@ module.exports = { docs: { description: "disallow duplicate keys in object literals", category: "Possible Errors", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-dupe-keys" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-duplicate-case.js b/tools/node_modules/eslint/lib/rules/no-duplicate-case.js index 07823f284c..2a9d955111 100644 --- a/tools/node_modules/eslint/lib/rules/no-duplicate-case.js +++ b/tools/node_modules/eslint/lib/rules/no-duplicate-case.js @@ -15,7 +15,8 @@ module.exports = { docs: { description: "disallow duplicate case labels", category: "Possible Errors", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-duplicate-case" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-duplicate-imports.js b/tools/node_modules/eslint/lib/rules/no-duplicate-imports.js index d12c3a56df..32071da15f 100644 --- a/tools/node_modules/eslint/lib/rules/no-duplicate-imports.js +++ b/tools/node_modules/eslint/lib/rules/no-duplicate-imports.js @@ -104,7 +104,8 @@ module.exports = { docs: { description: "disallow duplicate module imports", category: "ECMAScript 6", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-duplicate-imports" }, schema: [{ diff --git a/tools/node_modules/eslint/lib/rules/no-else-return.js b/tools/node_modules/eslint/lib/rules/no-else-return.js index deeff41ab8..91cb5b9796 100644 --- a/tools/node_modules/eslint/lib/rules/no-else-return.js +++ b/tools/node_modules/eslint/lib/rules/no-else-return.js @@ -21,7 +21,8 @@ module.exports = { docs: { description: "disallow `else` blocks after `return` statements in `if` statements", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-else-return" }, schema: [{ diff --git a/tools/node_modules/eslint/lib/rules/no-empty-character-class.js b/tools/node_modules/eslint/lib/rules/no-empty-character-class.js index 0ea7c5a0d1..3c4806632e 100644 --- a/tools/node_modules/eslint/lib/rules/no-empty-character-class.js +++ b/tools/node_modules/eslint/lib/rules/no-empty-character-class.js @@ -32,7 +32,8 @@ module.exports = { docs: { description: "disallow empty character classes in regular expressions", category: "Possible Errors", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-empty-character-class" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-empty-function.js b/tools/node_modules/eslint/lib/rules/no-empty-function.js index 38c915c33f..3852774e6b 100644 --- a/tools/node_modules/eslint/lib/rules/no-empty-function.js +++ b/tools/node_modules/eslint/lib/rules/no-empty-function.js @@ -93,7 +93,8 @@ module.exports = { docs: { description: "disallow empty functions", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-empty-function" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/no-empty-pattern.js b/tools/node_modules/eslint/lib/rules/no-empty-pattern.js index 11f50b5414..1d0c3ab4b1 100644 --- a/tools/node_modules/eslint/lib/rules/no-empty-pattern.js +++ b/tools/node_modules/eslint/lib/rules/no-empty-pattern.js @@ -13,7 +13,8 @@ module.exports = { docs: { description: "disallow empty destructuring patterns", category: "Best Practices", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-empty-pattern" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-empty.js b/tools/node_modules/eslint/lib/rules/no-empty.js index b71b8582a3..15f1df6790 100644 --- a/tools/node_modules/eslint/lib/rules/no-empty.js +++ b/tools/node_modules/eslint/lib/rules/no-empty.js @@ -19,7 +19,8 @@ module.exports = { docs: { description: "disallow empty block statements", category: "Possible Errors", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-empty" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/no-eq-null.js b/tools/node_modules/eslint/lib/rules/no-eq-null.js index 7e915a8c72..befb9d46f0 100644 --- a/tools/node_modules/eslint/lib/rules/no-eq-null.js +++ b/tools/node_modules/eslint/lib/rules/no-eq-null.js @@ -15,7 +15,8 @@ module.exports = { docs: { description: "disallow `null` comparisons without type-checking operators", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-eq-null" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-eval.js b/tools/node_modules/eslint/lib/rules/no-eval.js index ee5f577f47..8cf4aa307b 100644 --- a/tools/node_modules/eslint/lib/rules/no-eval.js +++ b/tools/node_modules/eslint/lib/rules/no-eval.js @@ -79,7 +79,8 @@ module.exports = { docs: { description: "disallow the use of `eval()`", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-eval" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/no-ex-assign.js b/tools/node_modules/eslint/lib/rules/no-ex-assign.js index 20869d5cd1..6ede2fc210 100644 --- a/tools/node_modules/eslint/lib/rules/no-ex-assign.js +++ b/tools/node_modules/eslint/lib/rules/no-ex-assign.js @@ -16,7 +16,8 @@ module.exports = { docs: { description: "disallow reassigning exceptions in `catch` clauses", category: "Possible Errors", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-ex-assign" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-extend-native.js b/tools/node_modules/eslint/lib/rules/no-extend-native.js index c550cf5da5..2e170017a8 100644 --- a/tools/node_modules/eslint/lib/rules/no-extend-native.js +++ b/tools/node_modules/eslint/lib/rules/no-extend-native.js @@ -27,7 +27,8 @@ module.exports = { docs: { description: "disallow extending native types", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-extend-native" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/no-extra-bind.js b/tools/node_modules/eslint/lib/rules/no-extra-bind.js index 2d22eff245..21b96c3c26 100644 --- a/tools/node_modules/eslint/lib/rules/no-extra-bind.js +++ b/tools/node_modules/eslint/lib/rules/no-extra-bind.js @@ -19,7 +19,8 @@ module.exports = { docs: { description: "disallow unnecessary calls to `.bind()`", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-extra-bind" }, schema: [], diff --git a/tools/node_modules/eslint/lib/rules/no-extra-boolean-cast.js b/tools/node_modules/eslint/lib/rules/no-extra-boolean-cast.js index 47ca7e22fe..471e8b5b82 100644 --- a/tools/node_modules/eslint/lib/rules/no-extra-boolean-cast.js +++ b/tools/node_modules/eslint/lib/rules/no-extra-boolean-cast.js @@ -20,7 +20,8 @@ module.exports = { docs: { description: "disallow unnecessary boolean casts", category: "Possible Errors", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-extra-boolean-cast" }, schema: [], diff --git a/tools/node_modules/eslint/lib/rules/no-extra-label.js b/tools/node_modules/eslint/lib/rules/no-extra-label.js index b89267de93..f90a403cbf 100644 --- a/tools/node_modules/eslint/lib/rules/no-extra-label.js +++ b/tools/node_modules/eslint/lib/rules/no-extra-label.js @@ -20,7 +20,8 @@ module.exports = { docs: { description: "disallow unnecessary labels", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-extra-label" }, schema: [], diff --git a/tools/node_modules/eslint/lib/rules/no-extra-parens.js b/tools/node_modules/eslint/lib/rules/no-extra-parens.js index d8e0df64a7..4bf8f99500 100644 --- a/tools/node_modules/eslint/lib/rules/no-extra-parens.js +++ b/tools/node_modules/eslint/lib/rules/no-extra-parens.js @@ -15,7 +15,8 @@ module.exports = { docs: { description: "disallow unnecessary parentheses", category: "Possible Errors", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-extra-parens" }, fixable: "code", @@ -582,7 +583,7 @@ module.exports = { tokensToIgnore.add(firstLeftToken); } } - if (hasExcessParens(node.right)) { + if (!(node.type === "ForOfStatement" && node.right.type === "SequenceExpression") && hasExcessParens(node.right)) { report(node.right); } if (hasExcessParens(node.left)) { diff --git a/tools/node_modules/eslint/lib/rules/no-extra-semi.js b/tools/node_modules/eslint/lib/rules/no-extra-semi.js index acd312b32b..5668c7e095 100644 --- a/tools/node_modules/eslint/lib/rules/no-extra-semi.js +++ b/tools/node_modules/eslint/lib/rules/no-extra-semi.js @@ -21,7 +21,8 @@ module.exports = { docs: { description: "disallow unnecessary semicolons", category: "Possible Errors", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-extra-semi" }, fixable: "code", diff --git a/tools/node_modules/eslint/lib/rules/no-fallthrough.js b/tools/node_modules/eslint/lib/rules/no-fallthrough.js index 082e8431d6..ce4f91ad96 100644 --- a/tools/node_modules/eslint/lib/rules/no-fallthrough.js +++ b/tools/node_modules/eslint/lib/rules/no-fallthrough.js @@ -58,7 +58,8 @@ module.exports = { docs: { description: "disallow fallthrough of `case` statements", category: "Best Practices", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-fallthrough" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/no-floating-decimal.js b/tools/node_modules/eslint/lib/rules/no-floating-decimal.js index dfba453a49..da8c479123 100644 --- a/tools/node_modules/eslint/lib/rules/no-floating-decimal.js +++ b/tools/node_modules/eslint/lib/rules/no-floating-decimal.js @@ -20,7 +20,8 @@ module.exports = { docs: { description: "disallow leading or trailing decimal points in numeric literals", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-floating-decimal" }, schema: [], diff --git a/tools/node_modules/eslint/lib/rules/no-func-assign.js b/tools/node_modules/eslint/lib/rules/no-func-assign.js index ea86365b29..a0a17f3697 100644 --- a/tools/node_modules/eslint/lib/rules/no-func-assign.js +++ b/tools/node_modules/eslint/lib/rules/no-func-assign.js @@ -16,7 +16,8 @@ module.exports = { docs: { description: "disallow reassigning `function` declarations", category: "Possible Errors", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-func-assign" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-global-assign.js b/tools/node_modules/eslint/lib/rules/no-global-assign.js index 679650cb70..3397bdbe00 100644 --- a/tools/node_modules/eslint/lib/rules/no-global-assign.js +++ b/tools/node_modules/eslint/lib/rules/no-global-assign.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "disallow assignments to native objects or read-only global variables", category: "Best Practices", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-global-assign" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/no-implicit-coercion.js b/tools/node_modules/eslint/lib/rules/no-implicit-coercion.js index 24e04858f0..7efab83935 100644 --- a/tools/node_modules/eslint/lib/rules/no-implicit-coercion.js +++ b/tools/node_modules/eslint/lib/rules/no-implicit-coercion.js @@ -156,7 +156,8 @@ module.exports = { docs: { description: "disallow shorthand type conversions", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-implicit-coercion" }, fixable: "code", diff --git a/tools/node_modules/eslint/lib/rules/no-implicit-globals.js b/tools/node_modules/eslint/lib/rules/no-implicit-globals.js index f0962cdc7a..c4717b6a37 100644 --- a/tools/node_modules/eslint/lib/rules/no-implicit-globals.js +++ b/tools/node_modules/eslint/lib/rules/no-implicit-globals.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "disallow variable and `function` declarations in the global scope", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-implicit-globals" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-implied-eval.js b/tools/node_modules/eslint/lib/rules/no-implied-eval.js index cfb16dbf73..de294bc885 100644 --- a/tools/node_modules/eslint/lib/rules/no-implied-eval.js +++ b/tools/node_modules/eslint/lib/rules/no-implied-eval.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "disallow the use of `eval()`-like methods", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-implied-eval" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-inline-comments.js b/tools/node_modules/eslint/lib/rules/no-inline-comments.js index 42b4753dfd..85a0d38316 100644 --- a/tools/node_modules/eslint/lib/rules/no-inline-comments.js +++ b/tools/node_modules/eslint/lib/rules/no-inline-comments.js @@ -15,7 +15,8 @@ module.exports = { docs: { description: "disallow inline comments after code", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-inline-comments" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-inner-declarations.js b/tools/node_modules/eslint/lib/rules/no-inner-declarations.js index 28aa5b4b5c..032c0a0f09 100644 --- a/tools/node_modules/eslint/lib/rules/no-inner-declarations.js +++ b/tools/node_modules/eslint/lib/rules/no-inner-declarations.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "disallow variable or `function` declarations in nested blocks", category: "Possible Errors", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-inner-declarations" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/no-invalid-regexp.js b/tools/node_modules/eslint/lib/rules/no-invalid-regexp.js index 45596f7ee8..8ccb5242b0 100644 --- a/tools/node_modules/eslint/lib/rules/no-invalid-regexp.js +++ b/tools/node_modules/eslint/lib/rules/no-invalid-regexp.js @@ -19,7 +19,8 @@ module.exports = { docs: { description: "disallow invalid regular expression strings in `RegExp` constructors", category: "Possible Errors", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-invalid-regexp" }, schema: [{ diff --git a/tools/node_modules/eslint/lib/rules/no-invalid-this.js b/tools/node_modules/eslint/lib/rules/no-invalid-this.js index 5a0a62f7a1..a04673be86 100644 --- a/tools/node_modules/eslint/lib/rules/no-invalid-this.js +++ b/tools/node_modules/eslint/lib/rules/no-invalid-this.js @@ -20,7 +20,8 @@ module.exports = { docs: { description: "disallow `this` keywords outside of classes or class-like objects", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-invalid-this" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-irregular-whitespace.js b/tools/node_modules/eslint/lib/rules/no-irregular-whitespace.js index cfbdfd1a5e..e36ec88b01 100644 --- a/tools/node_modules/eslint/lib/rules/no-irregular-whitespace.js +++ b/tools/node_modules/eslint/lib/rules/no-irregular-whitespace.js @@ -30,7 +30,8 @@ module.exports = { docs: { description: "disallow irregular whitespace outside of strings and comments", category: "Possible Errors", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-irregular-whitespace" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/no-iterator.js b/tools/node_modules/eslint/lib/rules/no-iterator.js index 3677dd94d9..ca12fcda47 100644 --- a/tools/node_modules/eslint/lib/rules/no-iterator.js +++ b/tools/node_modules/eslint/lib/rules/no-iterator.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "disallow the use of the `__iterator__` property", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-iterator" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-label-var.js b/tools/node_modules/eslint/lib/rules/no-label-var.js index 954066aef3..a880abfcab 100644 --- a/tools/node_modules/eslint/lib/rules/no-label-var.js +++ b/tools/node_modules/eslint/lib/rules/no-label-var.js @@ -20,7 +20,8 @@ module.exports = { docs: { description: "disallow labels that share a name with a variable", category: "Variables", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-label-var" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-labels.js b/tools/node_modules/eslint/lib/rules/no-labels.js index 101092a667..e09bb7b6ee 100644 --- a/tools/node_modules/eslint/lib/rules/no-labels.js +++ b/tools/node_modules/eslint/lib/rules/no-labels.js @@ -19,7 +19,8 @@ module.exports = { docs: { description: "disallow labeled statements", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-labels" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/no-lone-blocks.js b/tools/node_modules/eslint/lib/rules/no-lone-blocks.js index 2b5666e213..5e22aacf00 100644 --- a/tools/node_modules/eslint/lib/rules/no-lone-blocks.js +++ b/tools/node_modules/eslint/lib/rules/no-lone-blocks.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "disallow unnecessary nested blocks", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-lone-blocks" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-lonely-if.js b/tools/node_modules/eslint/lib/rules/no-lonely-if.js index db127d1945..3ecc41e8cf 100644 --- a/tools/node_modules/eslint/lib/rules/no-lonely-if.js +++ b/tools/node_modules/eslint/lib/rules/no-lonely-if.js @@ -13,7 +13,8 @@ module.exports = { docs: { description: "disallow `if` statements as the only statement in `else` blocks", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-lonely-if" }, schema: [], diff --git a/tools/node_modules/eslint/lib/rules/no-loop-func.js b/tools/node_modules/eslint/lib/rules/no-loop-func.js index c97e0c3c5a..0dce09a61a 100644 --- a/tools/node_modules/eslint/lib/rules/no-loop-func.js +++ b/tools/node_modules/eslint/lib/rules/no-loop-func.js @@ -159,7 +159,8 @@ module.exports = { docs: { description: "disallow `function` declarations and expressions inside loop statements", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-loop-func" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-magic-numbers.js b/tools/node_modules/eslint/lib/rules/no-magic-numbers.js index 796ecff0f8..20a752e554 100644 --- a/tools/node_modules/eslint/lib/rules/no-magic-numbers.js +++ b/tools/node_modules/eslint/lib/rules/no-magic-numbers.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "disallow magic numbers", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-magic-numbers" }, schema: [{ diff --git a/tools/node_modules/eslint/lib/rules/no-mixed-operators.js b/tools/node_modules/eslint/lib/rules/no-mixed-operators.js index 9f1fbc9a6d..0df42259db 100644 --- a/tools/node_modules/eslint/lib/rules/no-mixed-operators.js +++ b/tools/node_modules/eslint/lib/rules/no-mixed-operators.js @@ -74,7 +74,8 @@ module.exports = { docs: { description: "disallow mixed binary operators", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-mixed-operators" }, schema: [ { diff --git a/tools/node_modules/eslint/lib/rules/no-mixed-requires.js b/tools/node_modules/eslint/lib/rules/no-mixed-requires.js index 171052a52a..1058f3a511 100644 --- a/tools/node_modules/eslint/lib/rules/no-mixed-requires.js +++ b/tools/node_modules/eslint/lib/rules/no-mixed-requires.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "disallow `require` calls to be mixed with regular variable declarations", category: "Node.js and CommonJS", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-mixed-requires" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/no-mixed-spaces-and-tabs.js b/tools/node_modules/eslint/lib/rules/no-mixed-spaces-and-tabs.js index 2b8e89d3c8..7cb4b4ceea 100644 --- a/tools/node_modules/eslint/lib/rules/no-mixed-spaces-and-tabs.js +++ b/tools/node_modules/eslint/lib/rules/no-mixed-spaces-and-tabs.js @@ -13,7 +13,8 @@ module.exports = { docs: { description: "disallow mixed spaces and tabs for indentation", category: "Stylistic Issues", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-mixed-spaces-and-tabs" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/no-multi-assign.js b/tools/node_modules/eslint/lib/rules/no-multi-assign.js index 164869f6dd..ca3f778ac6 100644 --- a/tools/node_modules/eslint/lib/rules/no-multi-assign.js +++ b/tools/node_modules/eslint/lib/rules/no-multi-assign.js @@ -15,7 +15,8 @@ module.exports = { docs: { description: "disallow use of chained assignment expressions", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-multi-assign" }, schema: [] }, diff --git a/tools/node_modules/eslint/lib/rules/no-multi-spaces.js b/tools/node_modules/eslint/lib/rules/no-multi-spaces.js index 84f1b50189..d0ca097ad6 100644 --- a/tools/node_modules/eslint/lib/rules/no-multi-spaces.js +++ b/tools/node_modules/eslint/lib/rules/no-multi-spaces.js @@ -16,7 +16,8 @@ module.exports = { docs: { description: "disallow multiple spaces", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-multi-spaces" }, fixable: "whitespace", diff --git a/tools/node_modules/eslint/lib/rules/no-multi-str.js b/tools/node_modules/eslint/lib/rules/no-multi-str.js index 76f29cbb5a..2b97c261e0 100644 --- a/tools/node_modules/eslint/lib/rules/no-multi-str.js +++ b/tools/node_modules/eslint/lib/rules/no-multi-str.js @@ -20,7 +20,8 @@ module.exports = { docs: { description: "disallow multiline strings", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-multi-str" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-multiple-empty-lines.js b/tools/node_modules/eslint/lib/rules/no-multiple-empty-lines.js index 9d1067c205..a111786a30 100644 --- a/tools/node_modules/eslint/lib/rules/no-multiple-empty-lines.js +++ b/tools/node_modules/eslint/lib/rules/no-multiple-empty-lines.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "disallow multiple empty lines", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-multiple-empty-lines" }, fixable: "whitespace", diff --git a/tools/node_modules/eslint/lib/rules/no-native-reassign.js b/tools/node_modules/eslint/lib/rules/no-native-reassign.js index a60d4e499c..b1064b0bb3 100644 --- a/tools/node_modules/eslint/lib/rules/no-native-reassign.js +++ b/tools/node_modules/eslint/lib/rules/no-native-reassign.js @@ -16,7 +16,8 @@ module.exports = { description: "disallow assignments to native objects or read-only global variables", category: "Best Practices", recommended: false, - replacedBy: ["no-global-assign"] + replacedBy: ["no-global-assign"], + url: "https://eslint.org/docs/rules/no-native-reassign" }, deprecated: true, diff --git a/tools/node_modules/eslint/lib/rules/no-negated-condition.js b/tools/node_modules/eslint/lib/rules/no-negated-condition.js index 8ea8559ea1..254dcb5c23 100644 --- a/tools/node_modules/eslint/lib/rules/no-negated-condition.js +++ b/tools/node_modules/eslint/lib/rules/no-negated-condition.js @@ -13,7 +13,8 @@ module.exports = { docs: { description: "disallow negated conditions", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-negated-condition" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-negated-in-lhs.js b/tools/node_modules/eslint/lib/rules/no-negated-in-lhs.js index 495cbc160e..7f08814c94 100644 --- a/tools/node_modules/eslint/lib/rules/no-negated-in-lhs.js +++ b/tools/node_modules/eslint/lib/rules/no-negated-in-lhs.js @@ -16,7 +16,8 @@ module.exports = { description: "disallow negating the left operand in `in` expressions", category: "Possible Errors", recommended: false, - replacedBy: ["no-unsafe-negation"] + replacedBy: ["no-unsafe-negation"], + url: "https://eslint.org/docs/rules/no-negated-in-lhs" }, deprecated: true, diff --git a/tools/node_modules/eslint/lib/rules/no-nested-ternary.js b/tools/node_modules/eslint/lib/rules/no-nested-ternary.js index 4fe49fc9c0..15e72f20d1 100644 --- a/tools/node_modules/eslint/lib/rules/no-nested-ternary.js +++ b/tools/node_modules/eslint/lib/rules/no-nested-ternary.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "disallow nested ternary expressions", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-nested-ternary" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-new-func.js b/tools/node_modules/eslint/lib/rules/no-new-func.js index 6abbe8391d..8ee327baa1 100644 --- a/tools/node_modules/eslint/lib/rules/no-new-func.js +++ b/tools/node_modules/eslint/lib/rules/no-new-func.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "disallow `new` operators with the `Function` object", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-new-func" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-new-object.js b/tools/node_modules/eslint/lib/rules/no-new-object.js index d4d77b5514..3f68cbc1b5 100644 --- a/tools/node_modules/eslint/lib/rules/no-new-object.js +++ b/tools/node_modules/eslint/lib/rules/no-new-object.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "disallow `Object` constructors", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-new-object" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-new-require.js b/tools/node_modules/eslint/lib/rules/no-new-require.js index f9ea1f84bf..f74daa7569 100644 --- a/tools/node_modules/eslint/lib/rules/no-new-require.js +++ b/tools/node_modules/eslint/lib/rules/no-new-require.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "disallow `new` operators with calls to `require`", category: "Node.js and CommonJS", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-new-require" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-new-symbol.js b/tools/node_modules/eslint/lib/rules/no-new-symbol.js index 5743a4748a..a537268e38 100644 --- a/tools/node_modules/eslint/lib/rules/no-new-symbol.js +++ b/tools/node_modules/eslint/lib/rules/no-new-symbol.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "disallow `new` operators with the `Symbol` object", category: "ECMAScript 6", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-new-symbol" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-new-wrappers.js b/tools/node_modules/eslint/lib/rules/no-new-wrappers.js index 65bf79b87c..e8d516212b 100644 --- a/tools/node_modules/eslint/lib/rules/no-new-wrappers.js +++ b/tools/node_modules/eslint/lib/rules/no-new-wrappers.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "disallow `new` operators with the `String`, `Number`, and `Boolean` objects", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-new-wrappers" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-new.js b/tools/node_modules/eslint/lib/rules/no-new.js index 6e6025aac5..f9121bc18f 100644 --- a/tools/node_modules/eslint/lib/rules/no-new.js +++ b/tools/node_modules/eslint/lib/rules/no-new.js @@ -15,7 +15,8 @@ module.exports = { docs: { description: "disallow `new` operators outside of assignments or comparisons", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-new" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-obj-calls.js b/tools/node_modules/eslint/lib/rules/no-obj-calls.js index 0ca8a5effb..320343cb2c 100644 --- a/tools/node_modules/eslint/lib/rules/no-obj-calls.js +++ b/tools/node_modules/eslint/lib/rules/no-obj-calls.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "disallow calling global object properties as functions", category: "Possible Errors", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-obj-calls" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-octal-escape.js b/tools/node_modules/eslint/lib/rules/no-octal-escape.js index 04bfb6aae3..e9509b87f8 100644 --- a/tools/node_modules/eslint/lib/rules/no-octal-escape.js +++ b/tools/node_modules/eslint/lib/rules/no-octal-escape.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "disallow octal escape sequences in string literals", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-octal-escape" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-octal.js b/tools/node_modules/eslint/lib/rules/no-octal.js index 58082d0d1c..d782c23a39 100644 --- a/tools/node_modules/eslint/lib/rules/no-octal.js +++ b/tools/node_modules/eslint/lib/rules/no-octal.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "disallow octal literals", category: "Best Practices", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-octal" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-param-reassign.js b/tools/node_modules/eslint/lib/rules/no-param-reassign.js index f32e42ae2f..be1a559178 100644 --- a/tools/node_modules/eslint/lib/rules/no-param-reassign.js +++ b/tools/node_modules/eslint/lib/rules/no-param-reassign.js @@ -15,7 +15,8 @@ module.exports = { docs: { description: "disallow reassigning `function` parameters", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-param-reassign" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/no-path-concat.js b/tools/node_modules/eslint/lib/rules/no-path-concat.js index 1e153a43b6..1dee7bda11 100644 --- a/tools/node_modules/eslint/lib/rules/no-path-concat.js +++ b/tools/node_modules/eslint/lib/rules/no-path-concat.js @@ -13,7 +13,8 @@ module.exports = { docs: { description: "disallow string concatenation with `__dirname` and `__filename`", category: "Node.js and CommonJS", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-path-concat" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-plusplus.js b/tools/node_modules/eslint/lib/rules/no-plusplus.js index 94f259ac9e..f754b36721 100644 --- a/tools/node_modules/eslint/lib/rules/no-plusplus.js +++ b/tools/node_modules/eslint/lib/rules/no-plusplus.js @@ -15,7 +15,8 @@ module.exports = { docs: { description: "disallow the unary operators `++` and `--`", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-plusplus" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/no-process-env.js b/tools/node_modules/eslint/lib/rules/no-process-env.js index ef58b38e3c..71b27ffd72 100644 --- a/tools/node_modules/eslint/lib/rules/no-process-env.js +++ b/tools/node_modules/eslint/lib/rules/no-process-env.js @@ -13,7 +13,8 @@ module.exports = { docs: { description: "disallow the use of `process.env`", category: "Node.js and CommonJS", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-process-env" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-process-exit.js b/tools/node_modules/eslint/lib/rules/no-process-exit.js index 04e423b88f..2d22d7fd96 100644 --- a/tools/node_modules/eslint/lib/rules/no-process-exit.js +++ b/tools/node_modules/eslint/lib/rules/no-process-exit.js @@ -13,7 +13,8 @@ module.exports = { docs: { description: "disallow the use of `process.exit()`", category: "Node.js and CommonJS", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-process-exit" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-proto.js b/tools/node_modules/eslint/lib/rules/no-proto.js index 933746f559..e37c6c22e6 100644 --- a/tools/node_modules/eslint/lib/rules/no-proto.js +++ b/tools/node_modules/eslint/lib/rules/no-proto.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "disallow the use of the `__proto__` property", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-proto" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-prototype-builtins.js b/tools/node_modules/eslint/lib/rules/no-prototype-builtins.js index b9f040eaf6..f52847f44d 100644 --- a/tools/node_modules/eslint/lib/rules/no-prototype-builtins.js +++ b/tools/node_modules/eslint/lib/rules/no-prototype-builtins.js @@ -13,7 +13,8 @@ module.exports = { docs: { description: "disallow calling some `Object.prototype` methods directly on objects", category: "Possible Errors", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-prototype-builtins" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-redeclare.js b/tools/node_modules/eslint/lib/rules/no-redeclare.js index ccb57003ed..79ab21137e 100644 --- a/tools/node_modules/eslint/lib/rules/no-redeclare.js +++ b/tools/node_modules/eslint/lib/rules/no-redeclare.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "disallow variable redeclaration", category: "Best Practices", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-redeclare" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/no-regex-spaces.js b/tools/node_modules/eslint/lib/rules/no-regex-spaces.js index 9250437caa..a50692a4c3 100644 --- a/tools/node_modules/eslint/lib/rules/no-regex-spaces.js +++ b/tools/node_modules/eslint/lib/rules/no-regex-spaces.js @@ -16,7 +16,8 @@ module.exports = { docs: { description: "disallow multiple spaces in regular expressions", category: "Possible Errors", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-regex-spaces" }, schema: [], diff --git a/tools/node_modules/eslint/lib/rules/no-restricted-globals.js b/tools/node_modules/eslint/lib/rules/no-restricted-globals.js index 75428fc174..691e55d192 100644 --- a/tools/node_modules/eslint/lib/rules/no-restricted-globals.js +++ b/tools/node_modules/eslint/lib/rules/no-restricted-globals.js @@ -20,7 +20,8 @@ module.exports = { docs: { description: "disallow specified global variables", category: "Variables", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-restricted-globals" }, schema: { diff --git a/tools/node_modules/eslint/lib/rules/no-restricted-imports.js b/tools/node_modules/eslint/lib/rules/no-restricted-imports.js index eb477b4be6..11d09d6d22 100644 --- a/tools/node_modules/eslint/lib/rules/no-restricted-imports.js +++ b/tools/node_modules/eslint/lib/rules/no-restricted-imports.js @@ -56,7 +56,8 @@ module.exports = { docs: { description: "disallow specified modules when loaded by `import`", category: "ECMAScript 6", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-restricted-imports" }, schema: { diff --git a/tools/node_modules/eslint/lib/rules/no-restricted-modules.js b/tools/node_modules/eslint/lib/rules/no-restricted-modules.js index cd47975733..54271094fd 100644 --- a/tools/node_modules/eslint/lib/rules/no-restricted-modules.js +++ b/tools/node_modules/eslint/lib/rules/no-restricted-modules.js @@ -50,7 +50,8 @@ module.exports = { docs: { description: "disallow specified modules when loaded by `require`", category: "Node.js and CommonJS", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-restricted-modules" }, schema: { diff --git a/tools/node_modules/eslint/lib/rules/no-restricted-properties.js b/tools/node_modules/eslint/lib/rules/no-restricted-properties.js index cdc73f9e41..71cc83c65a 100644 --- a/tools/node_modules/eslint/lib/rules/no-restricted-properties.js +++ b/tools/node_modules/eslint/lib/rules/no-restricted-properties.js @@ -16,7 +16,8 @@ module.exports = { docs: { description: "disallow certain properties on certain objects", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-restricted-properties" }, schema: { diff --git a/tools/node_modules/eslint/lib/rules/no-restricted-syntax.js b/tools/node_modules/eslint/lib/rules/no-restricted-syntax.js index 1798065ec0..c472d9432e 100644 --- a/tools/node_modules/eslint/lib/rules/no-restricted-syntax.js +++ b/tools/node_modules/eslint/lib/rules/no-restricted-syntax.js @@ -13,7 +13,8 @@ module.exports = { docs: { description: "disallow specified syntax", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-restricted-syntax" }, schema: { diff --git a/tools/node_modules/eslint/lib/rules/no-return-assign.js b/tools/node_modules/eslint/lib/rules/no-return-assign.js index 882f94b724..0a016cfad5 100644 --- a/tools/node_modules/eslint/lib/rules/no-return-assign.js +++ b/tools/node_modules/eslint/lib/rules/no-return-assign.js @@ -25,7 +25,8 @@ module.exports = { docs: { description: "disallow assignment operators in `return` statements", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-return-assign" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/no-return-await.js b/tools/node_modules/eslint/lib/rules/no-return-await.js index 2f06b61108..490ccaeb36 100644 --- a/tools/node_modules/eslint/lib/rules/no-return-await.js +++ b/tools/node_modules/eslint/lib/rules/no-return-await.js @@ -17,7 +17,11 @@ module.exports = { docs: { description: "disallow unnecessary `return await`", category: "Best Practices", - recommended: false // TODO: set to true + + // TODO: set to true + recommended: false, + + url: "https://eslint.org/docs/rules/no-return-await" }, fixable: null, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/no-script-url.js b/tools/node_modules/eslint/lib/rules/no-script-url.js index 98f988ff1a..ba74dafb8e 100644 --- a/tools/node_modules/eslint/lib/rules/no-script-url.js +++ b/tools/node_modules/eslint/lib/rules/no-script-url.js @@ -16,7 +16,8 @@ module.exports = { docs: { description: "disallow `javascript:` urls", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-script-url" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-self-assign.js b/tools/node_modules/eslint/lib/rules/no-self-assign.js index 48b922d46b..3014042002 100644 --- a/tools/node_modules/eslint/lib/rules/no-self-assign.js +++ b/tools/node_modules/eslint/lib/rules/no-self-assign.js @@ -166,7 +166,8 @@ module.exports = { docs: { description: "disallow assignments where both sides are exactly the same", category: "Best Practices", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-self-assign" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/no-self-compare.js b/tools/node_modules/eslint/lib/rules/no-self-compare.js index 5beaa181b9..6ebc3870fe 100644 --- a/tools/node_modules/eslint/lib/rules/no-self-compare.js +++ b/tools/node_modules/eslint/lib/rules/no-self-compare.js @@ -15,7 +15,8 @@ module.exports = { docs: { description: "disallow comparisons where both sides are exactly the same", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-self-compare" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-sequences.js b/tools/node_modules/eslint/lib/rules/no-sequences.js index 5e746dfa88..8eaf55572b 100644 --- a/tools/node_modules/eslint/lib/rules/no-sequences.js +++ b/tools/node_modules/eslint/lib/rules/no-sequences.js @@ -20,7 +20,8 @@ module.exports = { docs: { description: "disallow comma operators", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-sequences" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-shadow-restricted-names.js b/tools/node_modules/eslint/lib/rules/no-shadow-restricted-names.js index 6c60232b8b..7b92521b07 100644 --- a/tools/node_modules/eslint/lib/rules/no-shadow-restricted-names.js +++ b/tools/node_modules/eslint/lib/rules/no-shadow-restricted-names.js @@ -13,7 +13,8 @@ module.exports = { docs: { description: "disallow identifiers from shadowing restricted names", category: "Variables", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-shadow-restricted-names" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-shadow.js b/tools/node_modules/eslint/lib/rules/no-shadow.js index e093d48c81..d01231ff99 100644 --- a/tools/node_modules/eslint/lib/rules/no-shadow.js +++ b/tools/node_modules/eslint/lib/rules/no-shadow.js @@ -20,7 +20,8 @@ module.exports = { docs: { description: "disallow variable declarations from shadowing variables declared in the outer scope", category: "Variables", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-shadow" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/no-spaced-func.js b/tools/node_modules/eslint/lib/rules/no-spaced-func.js index 361c1e0cd7..42d1e4b243 100644 --- a/tools/node_modules/eslint/lib/rules/no-spaced-func.js +++ b/tools/node_modules/eslint/lib/rules/no-spaced-func.js @@ -16,7 +16,8 @@ module.exports = { description: "disallow spacing between function identifiers and their applications (deprecated)", category: "Stylistic Issues", recommended: false, - replacedBy: ["func-call-spacing"] + replacedBy: ["func-call-spacing"], + url: "https://eslint.org/docs/rules/no-spaced-func" }, deprecated: true, diff --git a/tools/node_modules/eslint/lib/rules/no-sparse-arrays.js b/tools/node_modules/eslint/lib/rules/no-sparse-arrays.js index 3044896c61..1cc6f7ccba 100644 --- a/tools/node_modules/eslint/lib/rules/no-sparse-arrays.js +++ b/tools/node_modules/eslint/lib/rules/no-sparse-arrays.js @@ -13,7 +13,8 @@ module.exports = { docs: { description: "disallow sparse arrays", category: "Possible Errors", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-sparse-arrays" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-sync.js b/tools/node_modules/eslint/lib/rules/no-sync.js index 06305969a1..eb7b787d38 100644 --- a/tools/node_modules/eslint/lib/rules/no-sync.js +++ b/tools/node_modules/eslint/lib/rules/no-sync.js @@ -16,7 +16,8 @@ module.exports = { docs: { description: "disallow synchronous methods", category: "Node.js and CommonJS", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-sync" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/no-tabs.js b/tools/node_modules/eslint/lib/rules/no-tabs.js index 4bab96f387..08a8fa5b75 100644 --- a/tools/node_modules/eslint/lib/rules/no-tabs.js +++ b/tools/node_modules/eslint/lib/rules/no-tabs.js @@ -19,7 +19,8 @@ module.exports = { docs: { description: "disallow all tabs", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-tabs" }, schema: [] }, diff --git a/tools/node_modules/eslint/lib/rules/no-template-curly-in-string.js b/tools/node_modules/eslint/lib/rules/no-template-curly-in-string.js index d8f6c31108..ed74fcc6f7 100644 --- a/tools/node_modules/eslint/lib/rules/no-template-curly-in-string.js +++ b/tools/node_modules/eslint/lib/rules/no-template-curly-in-string.js @@ -13,7 +13,8 @@ module.exports = { docs: { description: "disallow template literal placeholder syntax in regular strings", category: "Possible Errors", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-template-curly-in-string" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-ternary.js b/tools/node_modules/eslint/lib/rules/no-ternary.js index 3e254f6812..4dcc8db069 100644 --- a/tools/node_modules/eslint/lib/rules/no-ternary.js +++ b/tools/node_modules/eslint/lib/rules/no-ternary.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "disallow ternary operators", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-ternary" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-this-before-super.js b/tools/node_modules/eslint/lib/rules/no-this-before-super.js index 2a686ac72e..944a323529 100644 --- a/tools/node_modules/eslint/lib/rules/no-this-before-super.js +++ b/tools/node_modules/eslint/lib/rules/no-this-before-super.js @@ -39,7 +39,8 @@ module.exports = { docs: { description: "disallow `this`/`super` before calling `super()` in constructors", category: "ECMAScript 6", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-this-before-super" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-throw-literal.js b/tools/node_modules/eslint/lib/rules/no-throw-literal.js index 5e9054399a..b080578bf2 100644 --- a/tools/node_modules/eslint/lib/rules/no-throw-literal.js +++ b/tools/node_modules/eslint/lib/rules/no-throw-literal.js @@ -16,7 +16,8 @@ module.exports = { docs: { description: "disallow throwing literals as exceptions", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-throw-literal" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-trailing-spaces.js b/tools/node_modules/eslint/lib/rules/no-trailing-spaces.js index fbbc640217..4d70c3b5cd 100644 --- a/tools/node_modules/eslint/lib/rules/no-trailing-spaces.js +++ b/tools/node_modules/eslint/lib/rules/no-trailing-spaces.js @@ -19,7 +19,8 @@ module.exports = { docs: { description: "disallow trailing whitespace at the end of lines", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-trailing-spaces" }, fixable: "whitespace", diff --git a/tools/node_modules/eslint/lib/rules/no-undef-init.js b/tools/node_modules/eslint/lib/rules/no-undef-init.js index 7e58f55a69..2e0ab24629 100644 --- a/tools/node_modules/eslint/lib/rules/no-undef-init.js +++ b/tools/node_modules/eslint/lib/rules/no-undef-init.js @@ -16,7 +16,8 @@ module.exports = { docs: { description: "disallow initializing variables to `undefined`", category: "Variables", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-undef-init" }, schema: [], diff --git a/tools/node_modules/eslint/lib/rules/no-undef.js b/tools/node_modules/eslint/lib/rules/no-undef.js index 74a33dd997..c8347d50d1 100644 --- a/tools/node_modules/eslint/lib/rules/no-undef.js +++ b/tools/node_modules/eslint/lib/rules/no-undef.js @@ -28,7 +28,8 @@ module.exports = { docs: { description: "disallow the use of undeclared variables unless mentioned in `/*global */` comments", category: "Variables", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-undef" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/no-undefined.js b/tools/node_modules/eslint/lib/rules/no-undefined.js index 7e9f96b921..94b514e91d 100644 --- a/tools/node_modules/eslint/lib/rules/no-undefined.js +++ b/tools/node_modules/eslint/lib/rules/no-undefined.js @@ -13,7 +13,8 @@ module.exports = { docs: { description: "disallow the use of `undefined` as an identifier", category: "Variables", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-undefined" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-underscore-dangle.js b/tools/node_modules/eslint/lib/rules/no-underscore-dangle.js index 5964da41cd..c76488a943 100644 --- a/tools/node_modules/eslint/lib/rules/no-underscore-dangle.js +++ b/tools/node_modules/eslint/lib/rules/no-underscore-dangle.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "disallow dangling underscores in identifiers", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-underscore-dangle" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/no-unexpected-multiline.js b/tools/node_modules/eslint/lib/rules/no-unexpected-multiline.js index 9398b8a603..c7c26686d9 100644 --- a/tools/node_modules/eslint/lib/rules/no-unexpected-multiline.js +++ b/tools/node_modules/eslint/lib/rules/no-unexpected-multiline.js @@ -19,7 +19,8 @@ module.exports = { docs: { description: "disallow confusing multiline expressions", category: "Possible Errors", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-unexpected-multiline" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-unmodified-loop-condition.js b/tools/node_modules/eslint/lib/rules/no-unmodified-loop-condition.js index 49dff0d0ce..623144dc06 100644 --- a/tools/node_modules/eslint/lib/rules/no-unmodified-loop-condition.js +++ b/tools/node_modules/eslint/lib/rules/no-unmodified-loop-condition.js @@ -107,84 +107,6 @@ const isInLoop = { }; /** - * Checks whether or not a given group node has any dynamic elements. - * - * @param {ASTNode} root - A node to check. - * This node is one of BinaryExpression or ConditionalExpression. - * @returns {boolean} `true` if the node is dynamic. - */ -function hasDynamicExpressions(root) { - let retv = false; - const traverser = new Traverser(); - - traverser.traverse(root, { - enter(node) { - if (DYNAMIC_PATTERN.test(node.type)) { - retv = true; - this.break(); - } else if (SKIP_PATTERN.test(node.type)) { - this.skip(); - } - } - }); - - return retv; -} - -/** - * Creates the loop condition information from a given reference. - * - * @param {eslint-scope.Reference} reference - A reference to create. - * @returns {LoopConditionInfo|null} Created loop condition info, or null. - */ -function toLoopCondition(reference) { - if (reference.init) { - return null; - } - - let group = null; - let child = reference.identifier; - let node = child.parent; - - while (node) { - if (SENTINEL_PATTERN.test(node.type)) { - if (LOOP_PATTERN.test(node.type) && node.test === child) { - - // This reference is inside of a loop condition. - return { - reference, - group, - isInLoop: isInLoop[node.type].bind(null, node), - modified: false - }; - } - - // This reference is outside of a loop condition. - break; - } - - /* - * If it's inside of a group, OK if either operand is modified. - * So stores the group this reference belongs to. - */ - if (GROUP_PATTERN.test(node.type)) { - - // If this expression is dynamic, no need to check. - if (hasDynamicExpressions(node)) { - break; - } else { - group = node; - } - } - - child = node; - node = node.parent; - } - - return null; -} - -/** * Gets the function which encloses a given reference. * This supports only FunctionDeclaration. * @@ -247,13 +169,15 @@ module.exports = { docs: { description: "disallow unmodified loop conditions", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-unmodified-loop-condition" }, schema: [] }, create(context) { + const sourceCode = context.getSourceCode(); let groupMap = null; /** @@ -308,6 +232,84 @@ module.exports = { } /** + * Checks whether or not a given group node has any dynamic elements. + * + * @param {ASTNode} root - A node to check. + * This node is one of BinaryExpression or ConditionalExpression. + * @returns {boolean} `true` if the node is dynamic. + */ + function hasDynamicExpressions(root) { + let retv = false; + + Traverser.traverse(root, { + visitorKeys: sourceCode.visitorKeys, + enter(node) { + if (DYNAMIC_PATTERN.test(node.type)) { + retv = true; + this.break(); + } else if (SKIP_PATTERN.test(node.type)) { + this.skip(); + } + } + }); + + return retv; + } + + /** + * Creates the loop condition information from a given reference. + * + * @param {eslint-scope.Reference} reference - A reference to create. + * @returns {LoopConditionInfo|null} Created loop condition info, or null. + */ + function toLoopCondition(reference) { + if (reference.init) { + return null; + } + + let group = null; + let child = reference.identifier; + let node = child.parent; + + while (node) { + if (SENTINEL_PATTERN.test(node.type)) { + if (LOOP_PATTERN.test(node.type) && node.test === child) { + + // This reference is inside of a loop condition. + return { + reference, + group, + isInLoop: isInLoop[node.type].bind(null, node), + modified: false + }; + } + + // This reference is outside of a loop condition. + break; + } + + /* + * If it's inside of a group, OK if either operand is modified. + * So stores the group this reference belongs to. + */ + if (GROUP_PATTERN.test(node.type)) { + + // If this expression is dynamic, no need to check. + if (hasDynamicExpressions(node)) { + break; + } else { + group = node; + } + } + + child = node; + node = node.parent; + } + + return null; + } + + /** * Finds unmodified references which are inside of a loop condition. * Then reports the references which are outside of groups. * diff --git a/tools/node_modules/eslint/lib/rules/no-unneeded-ternary.js b/tools/node_modules/eslint/lib/rules/no-unneeded-ternary.js index 5745537805..7f82c8ee28 100644 --- a/tools/node_modules/eslint/lib/rules/no-unneeded-ternary.js +++ b/tools/node_modules/eslint/lib/rules/no-unneeded-ternary.js @@ -27,7 +27,8 @@ module.exports = { docs: { description: "disallow ternary operators when simpler alternatives exist", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-unneeded-ternary" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/no-unreachable.js b/tools/node_modules/eslint/lib/rules/no-unreachable.js index 217a6a4299..80d246307c 100644 --- a/tools/node_modules/eslint/lib/rules/no-unreachable.js +++ b/tools/node_modules/eslint/lib/rules/no-unreachable.js @@ -104,7 +104,8 @@ module.exports = { docs: { description: "disallow unreachable code after `return`, `throw`, `continue`, and `break` statements", category: "Possible Errors", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-unreachable" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-unsafe-finally.js b/tools/node_modules/eslint/lib/rules/no-unsafe-finally.js index d25033e545..ebef05188f 100644 --- a/tools/node_modules/eslint/lib/rules/no-unsafe-finally.js +++ b/tools/node_modules/eslint/lib/rules/no-unsafe-finally.js @@ -23,7 +23,8 @@ module.exports = { docs: { description: "disallow control flow statements in `finally` blocks", category: "Possible Errors", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-unsafe-finally" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-unsafe-negation.js b/tools/node_modules/eslint/lib/rules/no-unsafe-negation.js index 761dc03386..5dc39f183b 100644 --- a/tools/node_modules/eslint/lib/rules/no-unsafe-negation.js +++ b/tools/node_modules/eslint/lib/rules/no-unsafe-negation.js @@ -44,7 +44,8 @@ module.exports = { docs: { description: "disallow negating the left operand of relational operators", category: "Possible Errors", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-unsafe-negation" }, schema: [], fixable: "code" diff --git a/tools/node_modules/eslint/lib/rules/no-unused-expressions.js b/tools/node_modules/eslint/lib/rules/no-unused-expressions.js index b4e1074d54..fedfac17d1 100644 --- a/tools/node_modules/eslint/lib/rules/no-unused-expressions.js +++ b/tools/node_modules/eslint/lib/rules/no-unused-expressions.js @@ -13,7 +13,8 @@ module.exports = { docs: { description: "disallow unused expressions", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-unused-expressions" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/no-unused-labels.js b/tools/node_modules/eslint/lib/rules/no-unused-labels.js index bcd3cfdc47..3e1dcb6601 100644 --- a/tools/node_modules/eslint/lib/rules/no-unused-labels.js +++ b/tools/node_modules/eslint/lib/rules/no-unused-labels.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "disallow unused labels", category: "Best Practices", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-unused-labels" }, schema: [], diff --git a/tools/node_modules/eslint/lib/rules/no-unused-vars.js b/tools/node_modules/eslint/lib/rules/no-unused-vars.js index 05940d5932..1d0cef8562 100644 --- a/tools/node_modules/eslint/lib/rules/no-unused-vars.js +++ b/tools/node_modules/eslint/lib/rules/no-unused-vars.js @@ -21,7 +21,8 @@ module.exports = { docs: { description: "disallow unused variables", category: "Variables", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-unused-vars" }, schema: [ @@ -105,26 +106,21 @@ module.exports = { * @returns {string} The warning message to be used with this unused variable. */ function getDefinedMessage(unusedVar) { + const defType = unusedVar.defs && unusedVar.defs[0] && unusedVar.defs[0].type; let type; let pattern; - if (config.varsIgnorePattern) { + if (defType === "CatchClause" && config.caughtErrorsIgnorePattern) { + type = "args"; + pattern = config.caughtErrorsIgnorePattern.toString(); + } else if (defType === "Parameter" && config.argsIgnorePattern) { + type = "args"; + pattern = config.argsIgnorePattern.toString(); + } else if (defType !== "Parameter" && config.varsIgnorePattern) { type = "vars"; pattern = config.varsIgnorePattern.toString(); } - if (unusedVar.defs && unusedVar.defs[0] && unusedVar.defs[0].type) { - const defType = unusedVar.defs[0].type; - - if (defType === "CatchClause" && config.caughtErrorsIgnorePattern) { - type = "args"; - pattern = config.caughtErrorsIgnorePattern.toString(); - } else if (defType === "Parameter" && config.argsIgnorePattern) { - type = "args"; - pattern = config.argsIgnorePattern.toString(); - } - } - const additional = type ? ` Allowed unused ${type} must match ${pattern}.` : ""; return `'{{name}}' is defined but never used.${additional}`; diff --git a/tools/node_modules/eslint/lib/rules/no-use-before-define.js b/tools/node_modules/eslint/lib/rules/no-use-before-define.js index ada01815d9..37b8e11ca8 100644 --- a/tools/node_modules/eslint/lib/rules/no-use-before-define.js +++ b/tools/node_modules/eslint/lib/rules/no-use-before-define.js @@ -139,7 +139,8 @@ module.exports = { docs: { description: "disallow the use of variables before they are defined", category: "Variables", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-use-before-define" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/no-useless-call.js b/tools/node_modules/eslint/lib/rules/no-useless-call.js index e4820ac248..925c9f79a9 100644 --- a/tools/node_modules/eslint/lib/rules/no-useless-call.js +++ b/tools/node_modules/eslint/lib/rules/no-useless-call.js @@ -52,7 +52,8 @@ module.exports = { docs: { description: "disallow unnecessary calls to `.call()` and `.apply()`", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-useless-call" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-useless-computed-key.js b/tools/node_modules/eslint/lib/rules/no-useless-computed-key.js index f8114ab754..07573075e1 100644 --- a/tools/node_modules/eslint/lib/rules/no-useless-computed-key.js +++ b/tools/node_modules/eslint/lib/rules/no-useless-computed-key.js @@ -21,7 +21,8 @@ module.exports = { docs: { description: "disallow unnecessary computed property keys in object literals", category: "ECMAScript 6", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-useless-computed-key" }, schema: [], diff --git a/tools/node_modules/eslint/lib/rules/no-useless-concat.js b/tools/node_modules/eslint/lib/rules/no-useless-concat.js index e42781fee7..a9ac786843 100644 --- a/tools/node_modules/eslint/lib/rules/no-useless-concat.js +++ b/tools/node_modules/eslint/lib/rules/no-useless-concat.js @@ -69,7 +69,8 @@ module.exports = { docs: { description: "disallow unnecessary concatenation of literals or template literals", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-useless-concat" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-useless-constructor.js b/tools/node_modules/eslint/lib/rules/no-useless-constructor.js index f790c789f5..59e40bef8f 100644 --- a/tools/node_modules/eslint/lib/rules/no-useless-constructor.js +++ b/tools/node_modules/eslint/lib/rules/no-useless-constructor.js @@ -145,7 +145,8 @@ module.exports = { docs: { description: "disallow unnecessary constructors", category: "ECMAScript 6", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-useless-constructor" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-useless-escape.js b/tools/node_modules/eslint/lib/rules/no-useless-escape.js index cdc3e98df8..80abec78e8 100644 --- a/tools/node_modules/eslint/lib/rules/no-useless-escape.js +++ b/tools/node_modules/eslint/lib/rules/no-useless-escape.js @@ -82,7 +82,8 @@ module.exports = { docs: { description: "disallow unnecessary escape characters", category: "Best Practices", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/no-useless-escape" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-useless-rename.js b/tools/node_modules/eslint/lib/rules/no-useless-rename.js index a489a6e51b..83a03deb63 100644 --- a/tools/node_modules/eslint/lib/rules/no-useless-rename.js +++ b/tools/node_modules/eslint/lib/rules/no-useless-rename.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "disallow renaming import, export, and destructured assignments to the same name", category: "ECMAScript 6", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-useless-rename" }, fixable: "code", schema: [ diff --git a/tools/node_modules/eslint/lib/rules/no-useless-return.js b/tools/node_modules/eslint/lib/rules/no-useless-return.js index 5415bf59b8..8e2a6d97f6 100644 --- a/tools/node_modules/eslint/lib/rules/no-useless-return.js +++ b/tools/node_modules/eslint/lib/rules/no-useless-return.js @@ -76,7 +76,8 @@ module.exports = { docs: { description: "disallow redundant return statements", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-useless-return" }, fixable: "code", schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-var.js b/tools/node_modules/eslint/lib/rules/no-var.js index d3c163e557..d95ca539f0 100644 --- a/tools/node_modules/eslint/lib/rules/no-var.js +++ b/tools/node_modules/eslint/lib/rules/no-var.js @@ -183,7 +183,8 @@ module.exports = { docs: { description: "require `let` or `const` instead of `var`", category: "ECMAScript 6", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-var" }, schema: [], diff --git a/tools/node_modules/eslint/lib/rules/no-void.js b/tools/node_modules/eslint/lib/rules/no-void.js index 5202fa49a8..1d3d887da6 100644 --- a/tools/node_modules/eslint/lib/rules/no-void.js +++ b/tools/node_modules/eslint/lib/rules/no-void.js @@ -13,7 +13,8 @@ module.exports = { docs: { description: "disallow `void` operators", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-void" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/no-warning-comments.js b/tools/node_modules/eslint/lib/rules/no-warning-comments.js index c0ecaca9e7..ce58f9ac80 100644 --- a/tools/node_modules/eslint/lib/rules/no-warning-comments.js +++ b/tools/node_modules/eslint/lib/rules/no-warning-comments.js @@ -16,7 +16,8 @@ module.exports = { docs: { description: "disallow specified warning terms in comments", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-warning-comments" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/no-whitespace-before-property.js b/tools/node_modules/eslint/lib/rules/no-whitespace-before-property.js index 2d476b66c0..fc4c25f849 100644 --- a/tools/node_modules/eslint/lib/rules/no-whitespace-before-property.js +++ b/tools/node_modules/eslint/lib/rules/no-whitespace-before-property.js @@ -19,7 +19,8 @@ module.exports = { docs: { description: "disallow whitespace before properties", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-whitespace-before-property" }, fixable: "whitespace", diff --git a/tools/node_modules/eslint/lib/rules/no-with.js b/tools/node_modules/eslint/lib/rules/no-with.js index be9e346360..d72dcdfb21 100644 --- a/tools/node_modules/eslint/lib/rules/no-with.js +++ b/tools/node_modules/eslint/lib/rules/no-with.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "disallow `with` statements", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/no-with" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/nonblock-statement-body-position.js b/tools/node_modules/eslint/lib/rules/nonblock-statement-body-position.js index 212e36a57c..e447ef886b 100644 --- a/tools/node_modules/eslint/lib/rules/nonblock-statement-body-position.js +++ b/tools/node_modules/eslint/lib/rules/nonblock-statement-body-position.js @@ -15,7 +15,8 @@ module.exports = { docs: { description: "enforce the location of single-line statements", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/nonblock-statement-body-position" }, fixable: "whitespace", schema: [ diff --git a/tools/node_modules/eslint/lib/rules/object-curly-newline.js b/tools/node_modules/eslint/lib/rules/object-curly-newline.js index ebad69de2e..91b2ca6c97 100644 --- a/tools/node_modules/eslint/lib/rules/object-curly-newline.js +++ b/tools/node_modules/eslint/lib/rules/object-curly-newline.js @@ -97,7 +97,8 @@ module.exports = { docs: { description: "enforce consistent line breaks inside braces", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/object-curly-newline" }, fixable: "whitespace", schema: [ diff --git a/tools/node_modules/eslint/lib/rules/object-curly-spacing.js b/tools/node_modules/eslint/lib/rules/object-curly-spacing.js index 3341e915f2..b37d6fd90f 100644 --- a/tools/node_modules/eslint/lib/rules/object-curly-spacing.js +++ b/tools/node_modules/eslint/lib/rules/object-curly-spacing.js @@ -15,7 +15,8 @@ module.exports = { docs: { description: "enforce consistent spacing inside braces", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/object-curly-spacing" }, fixable: "whitespace", diff --git a/tools/node_modules/eslint/lib/rules/object-property-newline.js b/tools/node_modules/eslint/lib/rules/object-property-newline.js index 0463e389ab..56ca269402 100644 --- a/tools/node_modules/eslint/lib/rules/object-property-newline.js +++ b/tools/node_modules/eslint/lib/rules/object-property-newline.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "enforce placing object properties on separate lines", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/object-property-newline" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/object-shorthand.js b/tools/node_modules/eslint/lib/rules/object-shorthand.js index 980d0fc35a..c6c0b10445 100644 --- a/tools/node_modules/eslint/lib/rules/object-shorthand.js +++ b/tools/node_modules/eslint/lib/rules/object-shorthand.js @@ -27,7 +27,8 @@ module.exports = { docs: { description: "require or disallow method and property shorthand syntax for object literals", category: "ECMAScript 6", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/object-shorthand" }, fixable: "code", diff --git a/tools/node_modules/eslint/lib/rules/one-var-declaration-per-line.js b/tools/node_modules/eslint/lib/rules/one-var-declaration-per-line.js index 61b505c82d..e17529b6be 100644 --- a/tools/node_modules/eslint/lib/rules/one-var-declaration-per-line.js +++ b/tools/node_modules/eslint/lib/rules/one-var-declaration-per-line.js @@ -13,7 +13,8 @@ module.exports = { docs: { description: "require or disallow newlines around variable declarations", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/one-var-declaration-per-line" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/one-var.js b/tools/node_modules/eslint/lib/rules/one-var.js index 9e40d4ea6f..cd094444b6 100644 --- a/tools/node_modules/eslint/lib/rules/one-var.js +++ b/tools/node_modules/eslint/lib/rules/one-var.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "enforce variables to be declared either together or separately in functions", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/one-var" }, schema: [ @@ -26,6 +27,9 @@ module.exports = { { type: "object", properties: { + separateRequires: { + type: "boolean" + }, var: { enum: ["always", "never"] }, @@ -62,21 +66,23 @@ module.exports = { const mode = context.options[0] || MODE_ALWAYS; - const options = { - }; + const options = {}; if (typeof mode === "string") { // simple options configuration with just a string options.var = { uninitialized: mode, initialized: mode }; options.let = { uninitialized: mode, initialized: mode }; options.const = { uninitialized: mode, initialized: mode }; } else if (typeof mode === "object") { // options configuration is an object - if (mode.hasOwnProperty("var") && typeof mode.var === "string") { + if (mode.hasOwnProperty("separateRequires")) { + options.separateRequires = !!mode.separateRequires; + } + if (mode.hasOwnProperty("var")) { options.var = { uninitialized: mode.var, initialized: mode.var }; } - if (mode.hasOwnProperty("let") && typeof mode.let === "string") { + if (mode.hasOwnProperty("let")) { options.let = { uninitialized: mode.let, initialized: mode.let }; } - if (mode.hasOwnProperty("const") && typeof mode.const === "string") { + if (mode.hasOwnProperty("const")) { options.const = { uninitialized: mode.const, initialized: mode.const }; } if (mode.hasOwnProperty("uninitialized")) { @@ -158,7 +164,17 @@ module.exports = { } /** - * Records whether initialized or uninitialized variables are defined in current scope. + * Check if a variable declaration is a require. + * @param {ASTNode} decl variable declaration Node + * @returns {bool} if decl is a require, return true; else return false. + * @private + */ + function isRequire(decl) { + return decl.init && decl.init.type === "CallExpression" && decl.init.callee.name === "require"; + } + + /** + * Records whether initialized/uninitialized/required variables are defined in current scope. * @param {string} statementType node.kind, one of: "var", "let", or "const" * @param {ASTNode[]} declarations List of declarations * @param {Object} currentScope The scope being investigated @@ -173,7 +189,11 @@ module.exports = { } } else { if (options[statementType] && options[statementType].initialized === MODE_ALWAYS) { - currentScope.initialized = true; + if (options.separateRequires && isRequire(declarations[i])) { + currentScope.required = true; + } else { + currentScope.initialized = true; + } } } } @@ -228,6 +248,7 @@ module.exports = { const declarationCounts = countDeclarations(declarations); const currentOptions = options[statementType] || {}; const currentScope = getCurrentScope(statementType); + const hasRequires = declarations.some(isRequire); if (currentOptions.uninitialized === MODE_ALWAYS && currentOptions.initialized === MODE_ALWAYS) { if (currentScope.uninitialized || currentScope.initialized) { @@ -245,6 +266,9 @@ module.exports = { return false; } } + if (currentScope.required && hasRequires) { + return false; + } recordTypes(statementType, declarations, currentScope); return true; } @@ -275,6 +299,16 @@ module.exports = { const declarations = node.declarations; const declarationCounts = countDeclarations(declarations); + const mixedRequires = declarations.some(isRequire) && !declarations.every(isRequire); + + if (options[type].initialized === MODE_ALWAYS) { + if (options.separateRequires && mixedRequires) { + context.report({ + node, + message: "Split requires to be separated into a single block." + }); + } + } // always if (!hasOnlyOneStatement(type, declarations)) { diff --git a/tools/node_modules/eslint/lib/rules/operator-assignment.js b/tools/node_modules/eslint/lib/rules/operator-assignment.js index f776609f5e..ad516bbfc4 100644 --- a/tools/node_modules/eslint/lib/rules/operator-assignment.js +++ b/tools/node_modules/eslint/lib/rules/operator-assignment.js @@ -92,7 +92,8 @@ module.exports = { docs: { description: "require or disallow assignment operator shorthand where possible", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/operator-assignment" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/operator-linebreak.js b/tools/node_modules/eslint/lib/rules/operator-linebreak.js index 271cbb35c1..558258b27d 100644 --- a/tools/node_modules/eslint/lib/rules/operator-linebreak.js +++ b/tools/node_modules/eslint/lib/rules/operator-linebreak.js @@ -20,7 +20,8 @@ module.exports = { docs: { description: "enforce consistent linebreak style for operators", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/operator-linebreak" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/padded-blocks.js b/tools/node_modules/eslint/lib/rules/padded-blocks.js index ad65882ac6..2fbb267121 100644 --- a/tools/node_modules/eslint/lib/rules/padded-blocks.js +++ b/tools/node_modules/eslint/lib/rules/padded-blocks.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "require or disallow padding within blocks", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/padded-blocks" }, fixable: "whitespace", diff --git a/tools/node_modules/eslint/lib/rules/padding-line-between-statements.js b/tools/node_modules/eslint/lib/rules/padding-line-between-statements.js index a89c49decf..9d1a4a3c7e 100644 --- a/tools/node_modules/eslint/lib/rules/padding-line-between-statements.js +++ b/tools/node_modules/eslint/lib/rules/padding-line-between-statements.js @@ -394,7 +394,8 @@ module.exports = { docs: { description: "require or disallow padding lines between statements", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/padding-line-between-statements" }, fixable: "whitespace", schema: { diff --git a/tools/node_modules/eslint/lib/rules/prefer-arrow-callback.js b/tools/node_modules/eslint/lib/rules/prefer-arrow-callback.js index 31ae2859fe..ff7a0fa7e7 100644 --- a/tools/node_modules/eslint/lib/rules/prefer-arrow-callback.js +++ b/tools/node_modules/eslint/lib/rules/prefer-arrow-callback.js @@ -134,7 +134,8 @@ module.exports = { docs: { description: "require using arrow functions for callbacks", category: "ECMAScript 6", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/prefer-arrow-callback" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/prefer-const.js b/tools/node_modules/eslint/lib/rules/prefer-const.js index a8cf3b7ef6..a24a00284f 100644 --- a/tools/node_modules/eslint/lib/rules/prefer-const.js +++ b/tools/node_modules/eslint/lib/rules/prefer-const.js @@ -233,7 +233,8 @@ module.exports = { docs: { description: "require `const` declarations for variables that are never reassigned after declared", category: "ECMAScript 6", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/prefer-const" }, fixable: "code", diff --git a/tools/node_modules/eslint/lib/rules/prefer-destructuring.js b/tools/node_modules/eslint/lib/rules/prefer-destructuring.js index 56c348a478..e9d02da3a1 100644 --- a/tools/node_modules/eslint/lib/rules/prefer-destructuring.js +++ b/tools/node_modules/eslint/lib/rules/prefer-destructuring.js @@ -13,7 +13,8 @@ module.exports = { docs: { description: "require destructuring from arrays and/or objects", category: "ECMAScript 6", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/prefer-destructuring" }, schema: [ { diff --git a/tools/node_modules/eslint/lib/rules/prefer-numeric-literals.js b/tools/node_modules/eslint/lib/rules/prefer-numeric-literals.js index 929e660c66..051a91c81c 100644 --- a/tools/node_modules/eslint/lib/rules/prefer-numeric-literals.js +++ b/tools/node_modules/eslint/lib/rules/prefer-numeric-literals.js @@ -41,7 +41,8 @@ module.exports = { docs: { description: "disallow `parseInt()` and `Number.parseInt()` in favor of binary, octal, and hexadecimal literals", category: "ECMAScript 6", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/prefer-numeric-literals" }, schema: [], diff --git a/tools/node_modules/eslint/lib/rules/prefer-promise-reject-errors.js b/tools/node_modules/eslint/lib/rules/prefer-promise-reject-errors.js index d2a6b5df10..f92bd58d2e 100644 --- a/tools/node_modules/eslint/lib/rules/prefer-promise-reject-errors.js +++ b/tools/node_modules/eslint/lib/rules/prefer-promise-reject-errors.js @@ -15,7 +15,8 @@ module.exports = { docs: { description: "require using Error objects as Promise rejection reasons", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/prefer-promise-reject-errors" }, fixable: null, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/prefer-reflect.js b/tools/node_modules/eslint/lib/rules/prefer-reflect.js index a47e66c5f5..56e841ff18 100644 --- a/tools/node_modules/eslint/lib/rules/prefer-reflect.js +++ b/tools/node_modules/eslint/lib/rules/prefer-reflect.js @@ -15,7 +15,8 @@ module.exports = { description: "require `Reflect` methods where applicable", category: "ECMAScript 6", recommended: false, - replacedBy: [] + replacedBy: [], + url: "https://eslint.org/docs/rules/prefer-reflect" }, deprecated: true, diff --git a/tools/node_modules/eslint/lib/rules/prefer-rest-params.js b/tools/node_modules/eslint/lib/rules/prefer-rest-params.js index 03342371b2..133456e4d1 100644 --- a/tools/node_modules/eslint/lib/rules/prefer-rest-params.js +++ b/tools/node_modules/eslint/lib/rules/prefer-rest-params.js @@ -65,7 +65,8 @@ module.exports = { docs: { description: "require rest parameters instead of `arguments`", category: "ECMAScript 6", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/prefer-rest-params" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/prefer-spread.js b/tools/node_modules/eslint/lib/rules/prefer-spread.js index c111d5f98e..62cfb28e7e 100644 --- a/tools/node_modules/eslint/lib/rules/prefer-spread.js +++ b/tools/node_modules/eslint/lib/rules/prefer-spread.js @@ -52,7 +52,8 @@ module.exports = { docs: { description: "require spread operators instead of `.apply()`", category: "ECMAScript 6", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/prefer-spread" }, schema: [], diff --git a/tools/node_modules/eslint/lib/rules/prefer-template.js b/tools/node_modules/eslint/lib/rules/prefer-template.js index 076ce6a3ea..c583bdcf9a 100644 --- a/tools/node_modules/eslint/lib/rules/prefer-template.js +++ b/tools/node_modules/eslint/lib/rules/prefer-template.js @@ -103,7 +103,8 @@ module.exports = { docs: { description: "require template literals instead of string concatenation", category: "ECMAScript 6", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/prefer-template" }, schema: [], diff --git a/tools/node_modules/eslint/lib/rules/quote-props.js b/tools/node_modules/eslint/lib/rules/quote-props.js index 6ac1f3c138..36739494da 100644 --- a/tools/node_modules/eslint/lib/rules/quote-props.js +++ b/tools/node_modules/eslint/lib/rules/quote-props.js @@ -20,7 +20,8 @@ module.exports = { docs: { description: "require quotes around object literal property names", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/quote-props" }, schema: { diff --git a/tools/node_modules/eslint/lib/rules/quotes.js b/tools/node_modules/eslint/lib/rules/quotes.js index 914762727b..fa8bbae5fa 100644 --- a/tools/node_modules/eslint/lib/rules/quotes.js +++ b/tools/node_modules/eslint/lib/rules/quotes.js @@ -79,7 +79,8 @@ module.exports = { docs: { description: "enforce the consistent use of either backticks, double, or single quotes", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/quotes" }, fixable: "code", diff --git a/tools/node_modules/eslint/lib/rules/radix.js b/tools/node_modules/eslint/lib/rules/radix.js index 0484c3bfb3..7e116a6fbf 100644 --- a/tools/node_modules/eslint/lib/rules/radix.js +++ b/tools/node_modules/eslint/lib/rules/radix.js @@ -81,7 +81,8 @@ module.exports = { docs: { description: "enforce the consistent use of the radix argument when using `parseInt()`", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/radix" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/require-await.js b/tools/node_modules/eslint/lib/rules/require-await.js index a5698ae058..6adc84ae15 100644 --- a/tools/node_modules/eslint/lib/rules/require-await.js +++ b/tools/node_modules/eslint/lib/rules/require-await.js @@ -34,7 +34,8 @@ module.exports = { docs: { description: "disallow async functions which have no `await` expression", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/require-await" }, schema: [] }, diff --git a/tools/node_modules/eslint/lib/rules/require-jsdoc.js b/tools/node_modules/eslint/lib/rules/require-jsdoc.js index a02ee3659c..91b90b7d10 100644 --- a/tools/node_modules/eslint/lib/rules/require-jsdoc.js +++ b/tools/node_modules/eslint/lib/rules/require-jsdoc.js @@ -9,7 +9,8 @@ module.exports = { docs: { description: "require JSDoc comments", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/require-jsdoc" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/require-yield.js b/tools/node_modules/eslint/lib/rules/require-yield.js index 5cc2944bc6..83a29876f0 100644 --- a/tools/node_modules/eslint/lib/rules/require-yield.js +++ b/tools/node_modules/eslint/lib/rules/require-yield.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "require generator functions to contain `yield`", category: "ECMAScript 6", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/require-yield" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/rest-spread-spacing.js b/tools/node_modules/eslint/lib/rules/rest-spread-spacing.js index 91770eca74..1fbc2c4cc5 100644 --- a/tools/node_modules/eslint/lib/rules/rest-spread-spacing.js +++ b/tools/node_modules/eslint/lib/rules/rest-spread-spacing.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "enforce spacing between rest and spread operators and their expressions", category: "ECMAScript 6", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/rest-spread-spacing" }, fixable: "whitespace", schema: [ diff --git a/tools/node_modules/eslint/lib/rules/semi-spacing.js b/tools/node_modules/eslint/lib/rules/semi-spacing.js index fd300e4a37..07af993764 100644 --- a/tools/node_modules/eslint/lib/rules/semi-spacing.js +++ b/tools/node_modules/eslint/lib/rules/semi-spacing.js @@ -16,7 +16,8 @@ module.exports = { docs: { description: "enforce consistent spacing before and after semicolons", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/semi-spacing" }, fixable: "whitespace", diff --git a/tools/node_modules/eslint/lib/rules/semi-style.js b/tools/node_modules/eslint/lib/rules/semi-style.js index 41fb39246c..de65928136 100644 --- a/tools/node_modules/eslint/lib/rules/semi-style.js +++ b/tools/node_modules/eslint/lib/rules/semi-style.js @@ -68,7 +68,8 @@ module.exports = { docs: { description: "enforce location of semicolons", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/semi-style" }, schema: [{ enum: ["last", "first"] }], fixable: "whitespace" diff --git a/tools/node_modules/eslint/lib/rules/semi.js b/tools/node_modules/eslint/lib/rules/semi.js index 78b6966dea..33a214db7c 100644 --- a/tools/node_modules/eslint/lib/rules/semi.js +++ b/tools/node_modules/eslint/lib/rules/semi.js @@ -20,7 +20,8 @@ module.exports = { docs: { description: "require or disallow semicolons instead of ASI", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/semi" }, fixable: "code", diff --git a/tools/node_modules/eslint/lib/rules/sort-imports.js b/tools/node_modules/eslint/lib/rules/sort-imports.js index 2bd415e974..8735be5d30 100644 --- a/tools/node_modules/eslint/lib/rules/sort-imports.js +++ b/tools/node_modules/eslint/lib/rules/sort-imports.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "enforce sorted import declarations within modules", category: "ECMAScript 6", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/sort-imports" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/sort-keys.js b/tools/node_modules/eslint/lib/rules/sort-keys.js index 8821f62943..9318e2fbb2 100644 --- a/tools/node_modules/eslint/lib/rules/sort-keys.js +++ b/tools/node_modules/eslint/lib/rules/sort-keys.js @@ -76,7 +76,8 @@ module.exports = { docs: { description: "require object keys to be sorted", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/sort-keys" }, schema: [ { diff --git a/tools/node_modules/eslint/lib/rules/sort-vars.js b/tools/node_modules/eslint/lib/rules/sort-vars.js index c77cdf8620..334deb0657 100644 --- a/tools/node_modules/eslint/lib/rules/sort-vars.js +++ b/tools/node_modules/eslint/lib/rules/sort-vars.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "require variables within the same declaration block to be sorted", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/sort-vars" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/space-before-blocks.js b/tools/node_modules/eslint/lib/rules/space-before-blocks.js index f50298c9c4..2b82066d72 100644 --- a/tools/node_modules/eslint/lib/rules/space-before-blocks.js +++ b/tools/node_modules/eslint/lib/rules/space-before-blocks.js @@ -16,7 +16,8 @@ module.exports = { docs: { description: "enforce consistent spacing before blocks", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/space-before-blocks" }, fixable: "whitespace", diff --git a/tools/node_modules/eslint/lib/rules/space-before-function-paren.js b/tools/node_modules/eslint/lib/rules/space-before-function-paren.js index 8851c4587a..51f6cc4326 100644 --- a/tools/node_modules/eslint/lib/rules/space-before-function-paren.js +++ b/tools/node_modules/eslint/lib/rules/space-before-function-paren.js @@ -19,7 +19,8 @@ module.exports = { docs: { description: "enforce consistent spacing before `function` definition opening parenthesis", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/space-before-function-paren" }, fixable: "whitespace", diff --git a/tools/node_modules/eslint/lib/rules/space-in-parens.js b/tools/node_modules/eslint/lib/rules/space-in-parens.js index 67ec5847cd..7e315c4486 100644 --- a/tools/node_modules/eslint/lib/rules/space-in-parens.js +++ b/tools/node_modules/eslint/lib/rules/space-in-parens.js @@ -15,7 +15,8 @@ module.exports = { docs: { description: "enforce consistent spacing inside parentheses", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/space-in-parens" }, fixable: "whitespace", diff --git a/tools/node_modules/eslint/lib/rules/space-infix-ops.js b/tools/node_modules/eslint/lib/rules/space-infix-ops.js index b92c889c7f..49b64658d1 100644 --- a/tools/node_modules/eslint/lib/rules/space-infix-ops.js +++ b/tools/node_modules/eslint/lib/rules/space-infix-ops.js @@ -13,7 +13,8 @@ module.exports = { docs: { description: "require spacing around infix operators", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/space-infix-ops" }, fixable: "whitespace", diff --git a/tools/node_modules/eslint/lib/rules/space-unary-ops.js b/tools/node_modules/eslint/lib/rules/space-unary-ops.js index 06a70fb6ad..4d122836ad 100644 --- a/tools/node_modules/eslint/lib/rules/space-unary-ops.js +++ b/tools/node_modules/eslint/lib/rules/space-unary-ops.js @@ -19,7 +19,8 @@ module.exports = { docs: { description: "enforce consistent spacing before or after unary operators", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/space-unary-ops" }, fixable: "whitespace", diff --git a/tools/node_modules/eslint/lib/rules/spaced-comment.js b/tools/node_modules/eslint/lib/rules/spaced-comment.js index 8cdd05514c..9d2f5f49ac 100644 --- a/tools/node_modules/eslint/lib/rules/spaced-comment.js +++ b/tools/node_modules/eslint/lib/rules/spaced-comment.js @@ -158,7 +158,8 @@ module.exports = { docs: { description: "enforce consistent spacing after the `//` or `/*` in a comment", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/spaced-comment" }, fixable: "whitespace", diff --git a/tools/node_modules/eslint/lib/rules/strict.js b/tools/node_modules/eslint/lib/rules/strict.js index 433b471367..633a8b323d 100644 --- a/tools/node_modules/eslint/lib/rules/strict.js +++ b/tools/node_modules/eslint/lib/rules/strict.js @@ -83,7 +83,8 @@ module.exports = { docs: { description: "require or disallow strict mode directives", category: "Strict Mode", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/strict" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/switch-colon-spacing.js b/tools/node_modules/eslint/lib/rules/switch-colon-spacing.js index 400e850997..cf19df6ed4 100644 --- a/tools/node_modules/eslint/lib/rules/switch-colon-spacing.js +++ b/tools/node_modules/eslint/lib/rules/switch-colon-spacing.js @@ -20,7 +20,8 @@ module.exports = { docs: { description: "enforce spacing around colons of switch statements", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/switch-colon-spacing" }, schema: [ { diff --git a/tools/node_modules/eslint/lib/rules/symbol-description.js b/tools/node_modules/eslint/lib/rules/symbol-description.js index 3f5ffd7463..95c1a1deb5 100644 --- a/tools/node_modules/eslint/lib/rules/symbol-description.js +++ b/tools/node_modules/eslint/lib/rules/symbol-description.js @@ -21,7 +21,8 @@ module.exports = { docs: { description: "require symbol descriptions", category: "ECMAScript 6", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/symbol-description" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/template-curly-spacing.js b/tools/node_modules/eslint/lib/rules/template-curly-spacing.js index 1d491a24c9..707ea76a36 100644 --- a/tools/node_modules/eslint/lib/rules/template-curly-spacing.js +++ b/tools/node_modules/eslint/lib/rules/template-curly-spacing.js @@ -27,7 +27,8 @@ module.exports = { docs: { description: "require or disallow spacing around embedded expressions of template strings", category: "ECMAScript 6", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/template-curly-spacing" }, fixable: "whitespace", diff --git a/tools/node_modules/eslint/lib/rules/template-tag-spacing.js b/tools/node_modules/eslint/lib/rules/template-tag-spacing.js index 907c537ff3..aee7ac108b 100755 --- a/tools/node_modules/eslint/lib/rules/template-tag-spacing.js +++ b/tools/node_modules/eslint/lib/rules/template-tag-spacing.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "require or disallow spacing between template tags and their literals", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/template-tag-spacing" }, fixable: "whitespace", diff --git a/tools/node_modules/eslint/lib/rules/unicode-bom.js b/tools/node_modules/eslint/lib/rules/unicode-bom.js index 7109a49edb..03b2d5ae68 100644 --- a/tools/node_modules/eslint/lib/rules/unicode-bom.js +++ b/tools/node_modules/eslint/lib/rules/unicode-bom.js @@ -13,7 +13,8 @@ module.exports = { docs: { description: "require or disallow Unicode byte order mark (BOM)", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/unicode-bom" }, fixable: "whitespace", diff --git a/tools/node_modules/eslint/lib/rules/use-isnan.js b/tools/node_modules/eslint/lib/rules/use-isnan.js index 5ec48a0386..5bad5b3c6d 100644 --- a/tools/node_modules/eslint/lib/rules/use-isnan.js +++ b/tools/node_modules/eslint/lib/rules/use-isnan.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "require calls to `isNaN()` when checking for `NaN`", category: "Possible Errors", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/use-isnan" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/valid-jsdoc.js b/tools/node_modules/eslint/lib/rules/valid-jsdoc.js index ea60b115ce..5e1af10de7 100644 --- a/tools/node_modules/eslint/lib/rules/valid-jsdoc.js +++ b/tools/node_modules/eslint/lib/rules/valid-jsdoc.js @@ -19,7 +19,8 @@ module.exports = { docs: { description: "enforce valid JSDoc comments", category: "Possible Errors", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/valid-jsdoc" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/valid-typeof.js b/tools/node_modules/eslint/lib/rules/valid-typeof.js index fba4cc5712..ac4e74f20b 100644 --- a/tools/node_modules/eslint/lib/rules/valid-typeof.js +++ b/tools/node_modules/eslint/lib/rules/valid-typeof.js @@ -13,7 +13,8 @@ module.exports = { docs: { description: "enforce comparing `typeof` expressions against valid strings", category: "Possible Errors", - recommended: true + recommended: true, + url: "https://eslint.org/docs/rules/valid-typeof" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/vars-on-top.js b/tools/node_modules/eslint/lib/rules/vars-on-top.js index f74db905b1..8f6bf1d977 100644 --- a/tools/node_modules/eslint/lib/rules/vars-on-top.js +++ b/tools/node_modules/eslint/lib/rules/vars-on-top.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "require `var` declarations be placed at the top of their containing scope", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/vars-on-top" }, schema: [] diff --git a/tools/node_modules/eslint/lib/rules/wrap-iife.js b/tools/node_modules/eslint/lib/rules/wrap-iife.js index c4e6a9e0c7..a21bf21634 100644 --- a/tools/node_modules/eslint/lib/rules/wrap-iife.js +++ b/tools/node_modules/eslint/lib/rules/wrap-iife.js @@ -20,7 +20,8 @@ module.exports = { docs: { description: "require parentheses around immediate `function` invocations", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/wrap-iife" }, schema: [ diff --git a/tools/node_modules/eslint/lib/rules/wrap-regex.js b/tools/node_modules/eslint/lib/rules/wrap-regex.js index 79f3d30515..e58a4fe537 100644 --- a/tools/node_modules/eslint/lib/rules/wrap-regex.js +++ b/tools/node_modules/eslint/lib/rules/wrap-regex.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "require parenthesis around regex literals", category: "Stylistic Issues", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/wrap-regex" }, schema: [], diff --git a/tools/node_modules/eslint/lib/rules/yield-star-spacing.js b/tools/node_modules/eslint/lib/rules/yield-star-spacing.js index eb20fc01b0..33a37f0d99 100644 --- a/tools/node_modules/eslint/lib/rules/yield-star-spacing.js +++ b/tools/node_modules/eslint/lib/rules/yield-star-spacing.js @@ -14,7 +14,8 @@ module.exports = { docs: { description: "require or disallow spacing around the `*` in `yield*` expressions", category: "ECMAScript 6", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/yield-star-spacing" }, fixable: "whitespace", diff --git a/tools/node_modules/eslint/lib/rules/yoda.js b/tools/node_modules/eslint/lib/rules/yoda.js index 2ccb61f73a..7f3bc6115b 100644 --- a/tools/node_modules/eslint/lib/rules/yoda.js +++ b/tools/node_modules/eslint/lib/rules/yoda.js @@ -155,7 +155,8 @@ module.exports = { docs: { description: "require or disallow \"Yoda\" conditions", category: "Best Practices", - recommended: false + recommended: false, + url: "https://eslint.org/docs/rules/yoda" }, schema: [ diff --git a/tools/node_modules/eslint/lib/testers/rule-tester.js b/tools/node_modules/eslint/lib/testers/rule-tester.js index aae66301d8..de218a875f 100644 --- a/tools/node_modules/eslint/lib/testers/rule-tester.js +++ b/tools/node_modules/eslint/lib/testers/rule-tester.js @@ -47,7 +47,8 @@ const lodash = require("lodash"), ajv = require("../util/ajv"), Linter = require("../linter"), Environments = require("../config/environments"), - SourceCodeFixer = require("../util/source-code-fixer"); + SourceCodeFixer = require("../util/source-code-fixer"), + interpolate = require("../util/interpolate"); //------------------------------------------------------------------------------ // Private Members @@ -131,13 +132,31 @@ const DESCRIBE = Symbol("describe"); const IT = Symbol("it"); /** - * This is `it` or `describe` if those don't exist. + * This is `it` default handler if `it` don't exist. * @this {Mocha} * @param {string} text - The description of the test case. * @param {Function} method - The logic of the test case. * @returns {any} Returned value of `method`. */ -function defaultHandler(text, method) { +function itDefaultHandler(text, method) { + try { + return method.apply(this); + } catch (err) { + if (err instanceof assert.AssertionError) { + err.message += ` (${util.inspect(err.actual)} ${err.operator} ${util.inspect(err.expected)})`; + } + throw err; + } +} + +/** + * This is `describe` default handler if `describe` don't exist. + * @this {Mocha} + * @param {string} text - The description of the test case. + * @param {Function} method - The logic of the test case. + * @returns {any} Returned value of `method`. + */ +function describeDefaultHandler(text, method) { return method.apply(this); } @@ -212,7 +231,7 @@ class RuleTester { static get describe() { return ( this[DESCRIBE] || - (typeof describe === "function" ? describe : defaultHandler) + (typeof describe === "function" ? describe : describeDefaultHandler) ); } @@ -223,7 +242,7 @@ class RuleTester { static get it() { return ( this[IT] || - (typeof it === "function" ? it : defaultHandler) + (typeof it === "function" ? it : itDefaultHandler) ); } @@ -454,59 +473,73 @@ class RuleTester { const hasMessageOfThisRule = messages.some(m => m.ruleId === ruleName); for (let i = 0, l = item.errors.length; i < l; i++) { - assert(!messages[i].fatal, `A fatal parsing error occurred: ${messages[i].message}`); + const error = item.errors[i]; + const message = messages[i]; + + assert(!message.fatal, `A fatal parsing error occurred: ${message.message}`); assert(hasMessageOfThisRule, "Error rule name should be the same as the name of the rule being tested"); - if (typeof item.errors[i] === "string" || item.errors[i] instanceof RegExp) { + if (typeof error === "string" || error instanceof RegExp) { // Just an error message. - assertMessageMatches(messages[i].message, item.errors[i]); - } else if (typeof item.errors[i] === "object") { + assertMessageMatches(message.message, error); + } else if (typeof error === "object") { /* * Error object. * This may have a message, node type, line, and/or * column. */ - if (item.errors[i].message) { - assertMessageMatches(messages[i].message, item.errors[i].message); + if (error.message) { + assertMessageMatches(message.message, error.message); } - // The following checks use loose equality assertions for backwards compatibility. + if (error.messageId) { + const hOP = Object.hasOwnProperty.call.bind(Object.hasOwnProperty); - if (item.errors[i].type) { + // verify that `error.message` is `undefined` + assert.strictEqual(error.message, void 0, "Error should not specify both a message and a messageId."); + if (!hOP(rule, "meta") || !hOP(rule.meta, "messages")) { + assert.fail("Rule must specify a messages hash in `meta`"); + } + if (!hOP(rule.meta.messages, error.messageId)) { + const friendlyIDList = `[${Object.keys(rule.meta.messages).map(key => `'${key}'`).join(", ")}]`; - // eslint-disable-next-line no-restricted-properties - assert.equal(messages[i].nodeType, item.errors[i].type, `Error type should be ${item.errors[i].type}, found ${messages[i].nodeType}`); - } + assert.fail(`Invalid messageId '${error.messageId}'. Expected one of ${friendlyIDList}.`); + } - if (item.errors[i].hasOwnProperty("line")) { + let expectedMessage = rule.meta.messages[error.messageId]; - // eslint-disable-next-line no-restricted-properties - assert.equal(messages[i].line, item.errors[i].line, `Error line should be ${item.errors[i].line}`); - } + if (error.data) { + expectedMessage = interpolate(expectedMessage, error.data); + } - if (item.errors[i].hasOwnProperty("column")) { + assertMessageMatches(message.message, expectedMessage); + } - // eslint-disable-next-line no-restricted-properties - assert.equal(messages[i].column, item.errors[i].column, `Error column should be ${item.errors[i].column}`); + if (error.type) { + assert.strictEqual(message.nodeType, error.type, `Error type should be ${error.type}, found ${message.nodeType}`); } - if (item.errors[i].hasOwnProperty("endLine")) { + if (error.hasOwnProperty("line")) { + assert.strictEqual(message.line, error.line, `Error line should be ${error.line}`); + } - // eslint-disable-next-line no-restricted-properties - assert.equal(messages[i].endLine, item.errors[i].endLine, `Error endLine should be ${item.errors[i].endLine}`); + if (error.hasOwnProperty("column")) { + assert.strictEqual(message.column, error.column, `Error column should be ${error.column}`); } - if (item.errors[i].hasOwnProperty("endColumn")) { + if (error.hasOwnProperty("endLine")) { + assert.strictEqual(message.endLine, error.endLine, `Error endLine should be ${error.endLine}`); + } - // eslint-disable-next-line no-restricted-properties - assert.equal(messages[i].endColumn, item.errors[i].endColumn, `Error endColumn should be ${item.errors[i].endColumn}`); + if (error.hasOwnProperty("endColumn")) { + assert.strictEqual(message.endColumn, error.endColumn, `Error endColumn should be ${error.endColumn}`); } } else { // Message was an unexpected type - assert.fail(messages[i], null, "Error should be a string, object, or RegExp."); + assert.fail(message, null, "Error should be a string, object, or RegExp."); } } } diff --git a/tools/node_modules/eslint/lib/util/interpolate.js b/tools/node_modules/eslint/lib/util/interpolate.js new file mode 100644 index 0000000000..e0f2d027d1 --- /dev/null +++ b/tools/node_modules/eslint/lib/util/interpolate.js @@ -0,0 +1,24 @@ +/** + * @fileoverview Interpolate keys from an object into a string with {{ }} markers. + * @author Jed Fox + */ + +"use strict"; + +//------------------------------------------------------------------------------ +// Public Interface +//------------------------------------------------------------------------------ + +module.exports = (text, data) => { + if (!data) { + return text; + } + return text.replace(/\{\{\s*([^{}]+?)\s*\}\}/g, (fullMatch, term) => { + if (term in data) { + return data[term]; + } + + // Preserve old behavior: If parameter name not provided, don't replace it. + return fullMatch; + }); +}; diff --git a/tools/node_modules/eslint/lib/util/source-code.js b/tools/node_modules/eslint/lib/util/source-code.js index 0bd710bf67..dee81aa10c 100644 --- a/tools/node_modules/eslint/lib/util/source-code.js +++ b/tools/node_modules/eslint/lib/util/source-code.js @@ -84,13 +84,30 @@ class SourceCode extends TokenStore { /** * Represents parsed source code. - * @param {string} text - The source code text. - * @param {ASTNode} ast - The Program node of the AST representing the code. This AST should be created from the text that BOM was stripped. + * @param {string|Object} textOrConfig - The source code text or config object. + * @param {string} textOrConfig.text - The source code text. + * @param {ASTNode} textOrConfig.ast - The Program node of the AST representing the code. This AST should be created from the text that BOM was stripped. + * @param {Object|null} textOrConfig.parserServices - The parser srevices. + * @param {ScopeManager|null} textOrConfig.scopeManager - The scope of this source code. + * @param {Object|null} textOrConfig.visitorKeys - The visitor keys to traverse AST. + * @param {ASTNode} [ast] - The Program node of the AST representing the code. This AST should be created from the text that BOM was stripped. * @constructor */ - constructor(text, ast) { - validate(ast); + constructor(textOrConfig, ast) { + let text, parserServices, scopeManager, visitorKeys; + + // Process overloading. + if (typeof textOrConfig === "string") { + text = textOrConfig; + } else if (typeof textOrConfig === "object" && textOrConfig !== null) { + text = textOrConfig.text; + ast = textOrConfig.ast; + parserServices = textOrConfig.parserServices; + scopeManager = textOrConfig.scopeManager; + visitorKeys = textOrConfig.visitorKeys; + } + validate(ast); super(ast.tokens, ast.comments); /** @@ -112,6 +129,24 @@ class SourceCode extends TokenStore { */ this.ast = ast; + /** + * The parser services of this source code. + * @type {Object} + */ + this.parserServices = parserServices || {}; + + /** + * The scope of this source code. + * @type {ScopeManager|null} + */ + this.scopeManager = scopeManager || null; + + /** + * The visitor keys to traverse AST. + * @type {Object} + */ + this.visitorKeys = visitorKeys || Traverser.DEFAULT_VISITOR_KEYS; + // Check the source text for the presence of a shebang since it is parsed as a standard line comment. const shebangMatched = this.text.match(astUtils.SHEBANG_MATCHER); const hasShebang = shebangMatched && ast.comments.length && ast.comments[0].value === shebangMatched[1]; @@ -353,9 +388,9 @@ class SourceCode extends TokenStore { getNodeByRangeIndex(index) { let result = null, resultParent = null; - const traverser = new Traverser(); - traverser.traverse(this.ast, { + Traverser.traverse(this.ast, { + visitorKeys: this.visitorKeys, enter(node, parent) { if (node.range[0] <= index && index < node.range[1]) { result = node; diff --git a/tools/node_modules/eslint/lib/util/traverser.js b/tools/node_modules/eslint/lib/util/traverser.js index fc070186b3..79fb32faf9 100644 --- a/tools/node_modules/eslint/lib/util/traverser.js +++ b/tools/node_modules/eslint/lib/util/traverser.js @@ -1,6 +1,7 @@ /** - * @fileoverview Wrapper around estraverse + * @fileoverview Traverser to traverse AST trees. * @author Nicholas C. Zakas + * @author Toru Nagashima */ "use strict"; @@ -8,27 +9,153 @@ // Requirements //------------------------------------------------------------------------------ -const estraverse = require("estraverse"); +const vk = require("eslint-visitor-keys"); +const debug = require("debug")("eslint:traverser"); //------------------------------------------------------------------------------ // Helpers //------------------------------------------------------------------------------ -const KEY_BLACKLIST = new Set([ - "parent", - "leadingComments", - "trailingComments" -]); +/** + * Do nothing. + * @returns {void} + */ +function noop() { + + // do nothing. +} + +/** + * Check whether the given value is an ASTNode or not. + * @param {any} x The value to check. + * @returns {boolean} `true` if the value is an ASTNode. + */ +function isNode(x) { + return x !== null && typeof x === "object" && typeof x.type === "string"; +} /** - * Wrapper around an estraverse controller that ensures the correct keys - * are visited. - * @constructor + * Get the visitor keys of a given node. + * @param {Object} visitorKeys The map of visitor keys. + * @param {ASTNode} node The node to get their visitor keys. + * @returns {string[]} The visitor keys of the node. */ -class Traverser extends estraverse.Controller { - traverse(node, visitor) { - visitor.fallback = Traverser.getKeys; - return super.traverse(node, visitor); +function getVisitorKeys(visitorKeys, node) { + let keys = visitorKeys[node.type]; + + if (!keys) { + keys = vk.getKeys(node); + debug("Unknown node type \"%s\": Estimated visitor keys %j", node.type, keys); + } + + return keys; +} + +/** + * The traverser class to traverse AST trees. + */ +class Traverser { + constructor() { + this._current = null; + this._parents = []; + this._skipped = false; + this._broken = false; + this._visitorKeys = null; + this._enter = null; + this._leave = null; + } + + /** + * @returns {ASTNode} The current node. + */ + current() { + return this._current; + } + + /** + * @returns {ASTNode[]} The ancestor nodes. + */ + parents() { + return this._parents.slice(0); + } + + /** + * Break the current traversal. + * @returns {void} + */ + break() { + this._broken = true; + } + + /** + * Skip child nodes for the current traversal. + * @returns {void} + */ + skip() { + this._skipped = true; + } + + /** + * Traverse the given AST tree. + * @param {ASTNode} node The root node to traverse. + * @param {Object} options The option object. + * @param {Object} [options.visitorKeys=DEFAULT_VISITOR_KEYS] The keys of each node types to traverse child nodes. Default is `./default-visitor-keys.json`. + * @param {Function} [options.enter=noop] The callback function which is called on entering each node. + * @param {Function} [options.leave=noop] The callback function which is called on leaving each node. + * @returns {void} + */ + traverse(node, options) { + this._current = null; + this._parents = []; + this._skipped = false; + this._broken = false; + this._visitorKeys = options.visitorKeys || vk.KEYS; + this._enter = options.enter || noop; + this._leave = options.leave || noop; + this._traverse(node, null); + } + + /** + * Traverse the given AST tree recursively. + * @param {ASTNode} node The current node. + * @param {ASTNode|null} parent The parent node. + * @returns {void} + * @private + */ + _traverse(node, parent) { + if (!isNode(node)) { + return; + } + + this._current = node; + this._skipped = false; + this._enter(node, parent); + + if (!this._skipped && !this._broken) { + const keys = getVisitorKeys(this._visitorKeys, node); + + if (keys.length >= 1) { + this._parents.push(node); + for (let i = 0; i < keys.length && !this._broken; ++i) { + const child = node[keys[i]]; + + if (Array.isArray(child)) { + for (let j = 0; j < child.length && !this._broken; ++j) { + this._traverse(child[j], node); + } + } else { + this._traverse(child, node); + } + } + this._parents.pop(); + } + } + + if (!this._broken) { + this._leave(node, parent); + } + + this._current = parent; } /** @@ -38,7 +165,28 @@ class Traverser extends estraverse.Controller { * @private */ static getKeys(node) { - return Object.keys(node).filter(key => !KEY_BLACKLIST.has(key)); + return vk.getKeys(node); + } + + /** + * Traverse the given AST tree. + * @param {ASTNode} node The root node to traverse. + * @param {Object} options The option object. + * @param {Object} [options.visitorKeys=DEFAULT_VISITOR_KEYS] The keys of each node types to traverse child nodes. Default is `./default-visitor-keys.json`. + * @param {Function} [options.enter=noop] The callback function which is called on entering each node. + * @param {Function} [options.leave=noop] The callback function which is called on leaving each node. + * @returns {void} + */ + static traverse(node, options) { + new Traverser().traverse(node, options); + } + + /** + * The default visitor keys. + * @type {Object} + */ + static get DEFAULT_VISITOR_KEYS() { + return vk.KEYS; } } |