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 50f64561847b9f..6fc1268e7534ee 100644 --- a/tools/node_modules/eslint/lib/rules/implicit-arrow-linebreak.js +++ b/tools/node_modules/eslint/lib/rules/implicit-arrow-linebreak.js @@ -4,10 +4,7 @@ */ "use strict"; -const { - isArrowToken, - isParenthesised -} = require("../util/ast-utils"); +const { isCommentToken, isNotOpeningParenToken } = require("../util/ast-utils"); //------------------------------------------------------------------------------ // Rule Definition @@ -38,142 +35,7 @@ module.exports = { create(context) { const sourceCode = context.getSourceCode(); - - //---------------------------------------------------------------------- - // Helpers - //---------------------------------------------------------------------- - /** - * Gets the applicable preference for a particular keyword - * @returns {string} The applicable option for the keyword, e.g. 'beside' - */ - function getOption() { - return context.options[0] || "beside"; - } - - /** - * Formats the comments depending on whether it's a line or block comment. - * @param {Comment[]} comments The array of comments between the arrow and body - * @param {Integer} column The column number of the first token - * @returns {string} A string of comment text joined by line breaks - */ - function formatComments(comments) { - - return `${comments.map(comment => { - - if (comment.type === "Line") { - return `//${comment.value}`; - } - - return `/*${comment.value}*/`; - }).join("\n")}\n`; - } - - /** - * Finds the first token to prepend comments to depending on the parent type - * @param {ASTNode} node The validated node - * @returns {Token|Node} The node to prepend comments to - */ - function findFirstToken(node) { - switch (node.parent.type) { - case "VariableDeclarator": - - // If the parent is first or only declarator, return the declaration, else, declarator - return sourceCode.getFirstToken( - node.parent.parent.declarations.length === 1 || - node.parent.parent.declarations[0].id.name === node.parent.id.name - ? node.parent.parent : node.parent - ); - case "CallExpression": - case "Property": - - // find the object key - return sourceCode.getFirstToken(node.parent); - default: - return node; - } - } - - /** - * Helper function for adding parentheses fixes for nodes containing nested arrow functions - * @param {Fixer} fixer Fixer - * @param {Token} arrow - The arrow token - * @param {ASTNode} arrowBody - The arrow function body - * @returns {Function[]} autofixer -- wraps function bodies with parentheses - */ - function addParentheses(fixer, arrow, arrowBody) { - const parenthesesFixes = []; - let closingParentheses = ""; - - let followingBody = arrowBody; - let currentArrow = arrow; - - while (currentArrow && followingBody.type !== "BlockStatement") { - if (!isParenthesised(sourceCode, followingBody)) { - parenthesesFixes.push( - fixer.insertTextAfter(currentArrow, " (") - ); - - closingParentheses = `\n)${closingParentheses}`; - } - - currentArrow = sourceCode.getTokenAfter(currentArrow, isArrowToken); - - if (currentArrow) { - followingBody = followingBody.body; - } - } - - return [...parenthesesFixes, - fixer.insertTextAfter(arrowBody, closingParentheses) - ]; - } - - /** - * Autofixes the function body to collapse onto the same line as the arrow. - * If comments exist, checks if the function body contains arrow functions, and appends the body with parentheses. - * Otherwise, prepends the comments before the arrow function. - * @param {Token} arrowToken The arrow token. - * @param {ASTNode|Token} arrowBody the function body - * @param {ASTNode} node The evaluated node - * @returns {Function} autofixer -- validates the node to adhere to besides - */ - function autoFixBesides(arrowToken, arrowBody, node) { - return fixer => { - const placeBesides = fixer.replaceTextRange([arrowToken.range[1], arrowBody.range[0]], " "); - - const comments = sourceCode.getCommentsInside(node).filter(comment => - comment.loc.start.line < arrowBody.loc.start.line); - - if (comments.length) { - - // If the grandparent is not a variable declarator - if ( - arrowBody.parent && - arrowBody.parent.parent && - arrowBody.parent.parent.type !== "VariableDeclarator" - ) { - - // If any arrow functions follow, return the necessary parens fixes. - if (node.body.type === "ArrowFunctionExpression" && - arrowBody.parent.parent.type !== "VariableDeclarator" - ) { - return addParentheses(fixer, arrowToken, arrowBody); - } - } - - const firstToken = findFirstToken(node); - - const commentBeforeExpression = fixer.insertTextBeforeRange( - firstToken.range, - formatComments(comments) - ); - - return [placeBesides, commentBeforeExpression]; - } - - return placeBesides; - }; - } + const option = context.options[0] || "beside"; /** * Validates the location of an arrow function body @@ -181,35 +43,30 @@ module.exports = { * @returns {void} */ function validateExpression(node) { - const option = getOption(); - - let tokenBefore = sourceCode.getTokenBefore(node.body); - const hasParens = tokenBefore.value === "("; - - if (node.type === "BlockStatement") { + if (node.body.type === "BlockStatement") { return; } - let fixerTarget = node.body; + const arrowToken = sourceCode.getTokenBefore(node.body, isNotOpeningParenToken); + const firstTokenOfBody = sourceCode.getTokenAfter(arrowToken); - if (hasParens) { - - // Gets the first token before the function body that is not an open paren - tokenBefore = sourceCode.getTokenBefore(node.body, token => token.value !== "("); - fixerTarget = sourceCode.getTokenAfter(tokenBefore); - } - - if (tokenBefore.loc.end.line === fixerTarget.loc.start.line && option === "below") { + if (arrowToken.loc.end.line === firstTokenOfBody.loc.start.line && option === "below") { context.report({ - node: fixerTarget, + node: firstTokenOfBody, messageId: "expected", - fix: fixer => fixer.insertTextBefore(fixerTarget, "\n") + fix: fixer => fixer.insertTextBefore(firstTokenOfBody, "\n") }); - } else if (tokenBefore.loc.end.line !== fixerTarget.loc.start.line && option === "beside") { + } else if (arrowToken.loc.end.line !== firstTokenOfBody.loc.start.line && option === "beside") { context.report({ - node: fixerTarget, + node: firstTokenOfBody, messageId: "unexpected", - fix: autoFixBesides(tokenBefore, fixerTarget, node) + fix(fixer) { + if (sourceCode.getFirstTokenBetween(arrowToken, firstTokenOfBody, { includeComments: true, filter: isCommentToken })) { + return null; + } + + return fixer.replaceTextRange([arrowToken.range[1], firstTokenOfBody.range[0]], " "); + } }); } } diff --git a/tools/node_modules/eslint/node_modules/inquirer/node_modules/strip-ansi/index.js b/tools/node_modules/eslint/node_modules/inquirer/node_modules/strip-ansi/index.js index 96e0292c8e2f64..9788c96dfa3b0c 100644 --- a/tools/node_modules/eslint/node_modules/inquirer/node_modules/strip-ansi/index.js +++ b/tools/node_modules/eslint/node_modules/inquirer/node_modules/strip-ansi/index.js @@ -1,4 +1,7 @@ 'use strict'; const ansiRegex = require('ansi-regex'); -module.exports = input => typeof input === 'string' ? input.replace(ansiRegex(), '') : input; +const stripAnsi = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string; + +module.exports = stripAnsi; +module.exports.default = stripAnsi; diff --git a/tools/node_modules/eslint/node_modules/inquirer/node_modules/strip-ansi/package.json b/tools/node_modules/eslint/node_modules/inquirer/node_modules/strip-ansi/package.json index 6715407030ba32..0c379e41c1aa24 100644 --- a/tools/node_modules/eslint/node_modules/inquirer/node_modules/strip-ansi/package.json +++ b/tools/node_modules/eslint/node_modules/inquirer/node_modules/strip-ansi/package.json @@ -12,16 +12,18 @@ "ansi-regex": "^4.1.0" }, "deprecated": false, - "description": "Strip ANSI escape codes", + "description": "Strip ANSI escape codes from a string", "devDependencies": { - "ava": "^0.25.0", - "xo": "^0.23.0" + "ava": "^1.3.1", + "tsd-check": "^0.5.0", + "xo": "^0.24.0" }, "engines": { "node": ">=6" }, "files": [ - "index.js" + "index.js", + "index.d.ts" ], "homepage": "https://github.com/chalk/strip-ansi#readme", "keywords": [ @@ -55,7 +57,7 @@ "url": "git+https://github.com/chalk/strip-ansi.git" }, "scripts": { - "test": "xo && ava" + "test": "xo && ava && tsd-check" }, - "version": "5.1.0" + "version": "5.2.0" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/inquirer/node_modules/strip-ansi/readme.md b/tools/node_modules/eslint/node_modules/inquirer/node_modules/strip-ansi/readme.md index 2f47184208027c..8681fe8af44242 100644 --- a/tools/node_modules/eslint/node_modules/inquirer/node_modules/strip-ansi/readme.md +++ b/tools/node_modules/eslint/node_modules/inquirer/node_modules/strip-ansi/readme.md @@ -1,6 +1,6 @@ # strip-ansi [![Build Status](https://travis-ci.org/chalk/strip-ansi.svg?branch=master)](https://travis-ci.org/chalk/strip-ansi) -> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) +> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string --- @@ -31,7 +31,7 @@ const stripAnsi = require('strip-ansi'); stripAnsi('\u001B[4mUnicorn\u001B[0m'); //=> 'Unicorn' -stripAnsi('\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'); +stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); //=> 'Click' ``` diff --git a/tools/node_modules/eslint/node_modules/table/node_modules/strip-ansi/index.js b/tools/node_modules/eslint/node_modules/table/node_modules/strip-ansi/index.js index 96e0292c8e2f64..9788c96dfa3b0c 100644 --- a/tools/node_modules/eslint/node_modules/table/node_modules/strip-ansi/index.js +++ b/tools/node_modules/eslint/node_modules/table/node_modules/strip-ansi/index.js @@ -1,4 +1,7 @@ 'use strict'; const ansiRegex = require('ansi-regex'); -module.exports = input => typeof input === 'string' ? input.replace(ansiRegex(), '') : input; +const stripAnsi = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string; + +module.exports = stripAnsi; +module.exports.default = stripAnsi; diff --git a/tools/node_modules/eslint/node_modules/table/node_modules/strip-ansi/package.json b/tools/node_modules/eslint/node_modules/table/node_modules/strip-ansi/package.json index 6715407030ba32..0c379e41c1aa24 100644 --- a/tools/node_modules/eslint/node_modules/table/node_modules/strip-ansi/package.json +++ b/tools/node_modules/eslint/node_modules/table/node_modules/strip-ansi/package.json @@ -12,16 +12,18 @@ "ansi-regex": "^4.1.0" }, "deprecated": false, - "description": "Strip ANSI escape codes", + "description": "Strip ANSI escape codes from a string", "devDependencies": { - "ava": "^0.25.0", - "xo": "^0.23.0" + "ava": "^1.3.1", + "tsd-check": "^0.5.0", + "xo": "^0.24.0" }, "engines": { "node": ">=6" }, "files": [ - "index.js" + "index.js", + "index.d.ts" ], "homepage": "https://github.com/chalk/strip-ansi#readme", "keywords": [ @@ -55,7 +57,7 @@ "url": "git+https://github.com/chalk/strip-ansi.git" }, "scripts": { - "test": "xo && ava" + "test": "xo && ava && tsd-check" }, - "version": "5.1.0" + "version": "5.2.0" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/table/node_modules/strip-ansi/readme.md b/tools/node_modules/eslint/node_modules/table/node_modules/strip-ansi/readme.md index 2f47184208027c..8681fe8af44242 100644 --- a/tools/node_modules/eslint/node_modules/table/node_modules/strip-ansi/readme.md +++ b/tools/node_modules/eslint/node_modules/table/node_modules/strip-ansi/readme.md @@ -1,6 +1,6 @@ # strip-ansi [![Build Status](https://travis-ci.org/chalk/strip-ansi.svg?branch=master)](https://travis-ci.org/chalk/strip-ansi) -> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) +> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string --- @@ -31,7 +31,7 @@ const stripAnsi = require('strip-ansi'); stripAnsi('\u001B[4mUnicorn\u001B[0m'); //=> 'Unicorn' -stripAnsi('\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'); +stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); //=> 'Click' ``` diff --git a/tools/node_modules/eslint/package.json b/tools/node_modules/eslint/package.json index 885af12a72ba4d..21b7223286026e 100644 --- a/tools/node_modules/eslint/package.json +++ b/tools/node_modules/eslint/package.json @@ -135,5 +135,5 @@ "test": "node Makefile.js test", "webpack": "node Makefile.js webpack" }, - "version": "5.15.2" + "version": "5.15.3" } \ No newline at end of file