From d2e5a9e861c0d5181742058cea7fbe5754639c40 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Thu, 16 Jul 2020 18:44:15 -0400 Subject: [PATCH 01/71] add @types/node to devDependencies --- package.json | 1 + yarn.lock | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/package.json b/package.json index 361f8f27eb36..85a5b9e09d8f 100644 --- a/package.json +++ b/package.json @@ -90,6 +90,7 @@ "@rollup/plugin-json": "4.1.0", "@rollup/plugin-node-resolve": "8.4.0", "@rollup/plugin-replace": "2.3.3", + "@types/node": "14.0.23", "babel-loader": "8.1.0", "benchmark": "2.1.4", "builtin-modules": "3.1.0", diff --git a/yarn.lock b/yarn.lock index 5ef441d4929d..cb02acef3802 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1256,6 +1256,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.14.tgz#24a0b5959f16ac141aeb0c5b3cd7a15b7c64cbce" integrity sha512-syUgf67ZQpaJj01/tRTknkMNoBBLWJOBODF0Zm4NrXmiSuxjymFrxnTu1QVYRubhVkRcZLYZG8STTwJRdVm/WQ== +"@types/node@14.0.23": + version "14.0.23" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.23.tgz#676fa0883450ed9da0bb24156213636290892806" + integrity sha512-Z4U8yDAl5TFkmYsZdFPdjeMa57NOvnaf1tljHzhouaPEp7LCj2JKkejpI1ODviIAQuW4CcQmxkQ77rnLsOOoKw== + "@types/normalize-package-data@^2.4.0": version "2.4.0" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" From 4bde9734364da23262e73733474f800bd05e2748 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Thu, 16 Jul 2020 18:45:06 -0400 Subject: [PATCH 02/71] import assert type in src/language-js/needs-parens.js --- src/language-js/needs-parens.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/language-js/needs-parens.js b/src/language-js/needs-parens.js index 523751e3454b..8df5d92e6aa7 100644 --- a/src/language-js/needs-parens.js +++ b/src/language-js/needs-parens.js @@ -1,5 +1,6 @@ "use strict"; +/** @type {import("assert")} */ const assert = require("assert"); const { From 1959b8e6619833db1f31d1adea7417301ec97578 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Thu, 16 Jul 2020 18:46:20 -0400 Subject: [PATCH 03/71] import assert type in src/language-js/printer-estree.js --- src/language-js/printer-estree.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/language-js/printer-estree.js b/src/language-js/printer-estree.js index b396a0e50c4a..1b02e2a7b5a6 100644 --- a/src/language-js/printer-estree.js +++ b/src/language-js/printer-estree.js @@ -1,5 +1,6 @@ "use strict"; +/** @type {import("assert")} */ const assert = require("assert"); // TODO(azz): anything that imports from main shouldn't be in a `language-*` dir. From cf8fd21817906fb0d644ad781e633cdaf8ad3516 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Thu, 16 Jul 2020 18:52:26 -0400 Subject: [PATCH 04/71] typedef Doc type in src/document/index.js --- src/document/index.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/document/index.js b/src/document/index.js index 4020cf063bc7..3629a9c212ba 100644 --- a/src/document/index.js +++ b/src/document/index.js @@ -1,5 +1,9 @@ "use strict"; +/** + * @typedef {import("./doc-builders").Doc} Doc + */ + module.exports = { builders: require("./doc-builders"), printer: require("./doc-printer"), From 6fde6d12fae98086957b53a945d9c042eedbd3a9 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Thu, 16 Jul 2020 18:52:33 -0400 Subject: [PATCH 05/71] import & use Doc type in src/language-js/print/module.js --- src/language-js/print/module.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/language-js/print/module.js b/src/language-js/print/module.js index 052c9f2f34c7..1fcfd1a05500 100644 --- a/src/language-js/print/module.js +++ b/src/language-js/print/module.js @@ -5,6 +5,10 @@ const { } = require("../../document"); const { shouldPrintComma } = require("../utils"); +/** + * @typedef {import("../../document").Doc} Doc + */ + function printModuleSource(path, options, print) { const node = path.getValue(); return node.source ? concat([" from ", path.call(print, "source")]) : ""; @@ -12,6 +16,7 @@ function printModuleSource(path, options, print) { function printModuleSpecifiers(path, options, print) { const node = path.getValue(); + /** @type{Doc[]} */ const parts = [node.type === "ImportDeclaration" ? " " : ""]; if (node.specifiers && node.specifiers.length > 0) { From aed44b2af811224f316cee9f7ee9159cca5ac903 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Thu, 16 Jul 2020 19:09:40 -0400 Subject: [PATCH 06/71] import & use Doc type in src/language-js/printer-estree.js --- src/language-js/printer-estree.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/language-js/printer-estree.js b/src/language-js/printer-estree.js index 1b02e2a7b5a6..341c1e2e7de8 100644 --- a/src/language-js/printer-estree.js +++ b/src/language-js/printer-estree.js @@ -1,5 +1,7 @@ "use strict"; +/** @typedef {import("../document").Doc} Doc */ + /** @type {import("assert")} */ const assert = require("assert"); @@ -257,6 +259,7 @@ function printPathNoParens(path, options, print, args) { return htmlBinding; } + /** @type{Doc[]} */ let parts = []; switch (n.type) { case "JsExpressionRoot": @@ -4039,6 +4042,7 @@ function printReturnType(path, print, options) { function printExportDeclaration(path, options, print) { const decl = path.getValue(); const semi = options.semi ? ";" : ""; + /** @type{Doc[]} */ const parts = ["export "]; const isDefault = decl.default || decl.type === "ExportDefaultDeclaration"; @@ -4761,6 +4765,7 @@ function printBinaryishExpressions( isNested, isInsideParenthesis ) { + /** @type{Doc[]} */ let parts = []; const node = path.getValue(); From 8b420bf373b731b3bd08bed88ec18dc87ff72e90 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Thu, 16 Jul 2020 19:10:21 -0400 Subject: [PATCH 07/71] define & use 2 JSDoc types in src/language-js/utils.js --- src/language-js/utils.js | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/language-js/utils.js b/src/language-js/utils.js index 3288b2060d05..a05ecfec5b2d 100644 --- a/src/language-js/utils.js +++ b/src/language-js/utils.js @@ -11,6 +11,21 @@ const { } = require("../common/util"); const handleComments = require("./comments"); +/** + * @typedef {import("estree").BaseNode} BaseNode + * @typedef {import("estree").BaseExpression} BaseExpression + * @typedef {import("estree").Expression} Expression + * + * @typedef {Object} MemberExpressionNode + * @mixes BaseExpression + * @property {Expression} object + * @property {Expression} property + * + * @typedef {Object} TemplateLiteralNode + * @mixes BaseNode + * @property {MemberExpressionNode[]} expressions + */ + // We match any whitespace except line terminators because // Flow annotation comments cannot be split across lines. For example: // @@ -454,7 +469,7 @@ function isNgForOf(node, index, parentNode) { ); } -/** @param node {import("estree").TemplateLiteral} */ +/** @param node {TemplateLiteralNode} */ function isSimpleTemplateLiteral(node) { if (node.expressions.length === 0) { return false; @@ -881,7 +896,7 @@ function isLongCurriedCallExpression(path) { } /** - * @param {import('estree').Node} node + * @param {MemberExpressionNode} node * @param {number} depth * @returns {boolean} */ From f510935bf5d18aacf49401b579e14b6c2b8ac86c Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Thu, 16 Jul 2020 19:11:14 -0400 Subject: [PATCH 08/71] add type comments to hasLeadingComment in src/language-js/comments.js --- src/language-js/comments.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/language-js/comments.js b/src/language-js/comments.js index a039e808d996..ef3f35b40c5f 100644 --- a/src/language-js/comments.js +++ b/src/language-js/comments.js @@ -930,6 +930,11 @@ function isBlockComment(comment) { return comment.type === "Block" || comment.type === "CommentBlock"; } +/** + * @param {any} node + * @param {(comment: any) => boolean} fn + * @returns boolean + */ function hasLeadingComment(node, fn = () => true) { if (node.leadingComments) { return node.leadingComments.some(fn); From 865f365005f3e395846ed1d7f8aeb50c8e32f5c5 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Thu, 16 Jul 2020 19:12:02 -0400 Subject: [PATCH 09/71] cleanup: JSDoc items to beginning of src/language-js/print/ternary.js --- src/language-js/print/ternary.js | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/language-js/print/ternary.js b/src/language-js/print/ternary.js index 0bd1d7be00bb..1efc0dc83ffa 100644 --- a/src/language-js/print/ternary.js +++ b/src/language-js/print/ternary.js @@ -19,6 +19,20 @@ const { }, } = require("../../document"); +/** + * @typedef {import("../../document").Doc} Doc + * @typedef {import("../../common/fast-path")} FastPath + * + * @typedef {Object} OperatorOptions + * @property {() => Array} beforeParts - Parts to print before the `?`. + * @property {(breakClosingParen: boolean) => Array} afterParts - Parts to print after the conditional expression. + * @property {boolean} shouldCheckJsx - Whether to check for and print in JSX mode. + * @property {string} conditionalNodeType - The type of the conditional expression node, ie "ConditionalExpression" or "TSConditionalType". + * @property {string} consequentNodePropertyName - The property at which the consequent node can be found on the main node, eg "consequent". + * @property {string} alternateNodePropertyName - The property at which the alternate node can be found on the main node, eg "alternate". + * @property {string[]} testNodePropertyNames - The properties at which the test nodes can be found on the main node, eg "test". + */ + // If we have nested conditional expressions, we want to print them in JSX mode // if there's at least one JSXElement somewhere in the tree. // @@ -118,16 +132,7 @@ function conditionalExpressionChainContainsJSX(node) { * The following is the shared logic for * ternary operators, namely ConditionalExpression * and TSConditionalType - * @typedef {import("../../document/doc-builders").Doc} Doc - * @typedef {Object} OperatorOptions - * @property {() => Array} beforeParts - Parts to print before the `?`. - * @property {(breakClosingParen: boolean) => Array} afterParts - Parts to print after the conditional expression. - * @property {boolean} shouldCheckJsx - Whether to check for and print in JSX mode. - * @property {string} conditionalNodeType - The type of the conditional expression node, ie "ConditionalExpression" or "TSConditionalType". - * @property {string} consequentNodePropertyName - The property at which the consequent node can be found on the main node, eg "consequent". - * @property {string} alternateNodePropertyName - The property at which the alternate node can be found on the main node, eg "alternate". - * @property {string[]} testNodePropertyNames - The properties at which the test nodes can be found on the main node, eg "test". - * @param {import("../../common/fast-path")} path - The path to the ConditionalExpression/TSConditionalType node. + * @param {FastPath} path - The path to the ConditionalExpression/TSConditionalType node. * @param {Options} options - Prettier options * @param {Function} print - Print function to call recursively * @param {OperatorOptions} operatorOptions From 9abf8a1f95007645b67652c6f6783e03d3464c41 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Thu, 16 Jul 2020 19:12:08 -0400 Subject: [PATCH 10/71] `@typedef {any} Option` in src/language-js/print/ternary.js (TBD ...) --- src/language-js/print/ternary.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/language-js/print/ternary.js b/src/language-js/print/ternary.js index 1efc0dc83ffa..79ed926314f5 100644 --- a/src/language-js/print/ternary.js +++ b/src/language-js/print/ternary.js @@ -23,6 +23,8 @@ const { * @typedef {import("../../document").Doc} Doc * @typedef {import("../../common/fast-path")} FastPath * + * @typedef {any} Options - Prettier options (TBD ...) + * * @typedef {Object} OperatorOptions * @property {() => Array} beforeParts - Parts to print before the `?`. * @property {(breakClosingParen: boolean) => Array} afterParts - Parts to print after the conditional expression. From a728b7ee4504d6405c285cc7910b94a98b225511 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Thu, 16 Jul 2020 19:15:02 -0400 Subject: [PATCH 11/71] fix(types): value condition in src/language-js/printer-estree.js --- src/language-js/printer-estree.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/language-js/printer-estree.js b/src/language-js/printer-estree.js index 341c1e2e7de8..454cfe125038 100644 --- a/src/language-js/printer-estree.js +++ b/src/language-js/printer-estree.js @@ -676,8 +676,9 @@ function printPathNoParens(path, options, print, args) { options.locEnd ); return ( + nextCharacter !== false && options.originalText.slice(nextCharacter, nextCharacter + 2) === - "=>" + "=>" ); } ); From d307f74ca8488a9713ff2c3f2ed47daf85a6e9f1 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Thu, 16 Jul 2020 19:15:07 -0400 Subject: [PATCH 12/71] fix(types): remove extra args from internal plusOne & plusTwo calls --- src/language-js/utils.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/language-js/utils.js b/src/language-js/utils.js index a05ecfec5b2d..479cdd0cec4e 100644 --- a/src/language-js/utils.js +++ b/src/language-js/utils.js @@ -949,7 +949,7 @@ function isSimpleCallArgument(node, depth) { } if (node.type === "ImportExpression") { - return plusTwo(node.source, depth); + return plusTwo(node.source); } if ( @@ -957,25 +957,25 @@ function isSimpleCallArgument(node, depth) { node.type === "OptionalCallExpression" || node.type === "NewExpression" ) { - return plusOne(node.callee, depth) && node.arguments.every(plusTwo); + return plusOne(node.callee) && node.arguments.every(plusTwo); } if ( node.type === "MemberExpression" || node.type === "OptionalMemberExpression" ) { - return plusOne(node.object, depth) && plusOne(node.property, depth); + return plusOne(node.object) && plusOne(node.property); } if ( node.type === "UnaryExpression" && (node.operator === "!" || node.operator === "-") ) { - return plusOne(node.argument, depth); + return plusOne(node.argument); } if (node.type === "TSNonNullExpression") { - return plusOne(node.expression, depth); + return plusOne(node.expression); } return false; From eefa0de9053e8e4b1635cf7fc118de8fb3814b5b Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Thu, 16 Jul 2020 19:15:20 -0400 Subject: [PATCH 13/71] fix(types): remove extra arg in src/language-js/print/member-chain.js --- src/language-js/print/member-chain.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/language-js/print/member-chain.js b/src/language-js/print/member-chain.js index e824b9e7cb2b..2e8fef66009c 100644 --- a/src/language-js/print/member-chain.js +++ b/src/language-js/print/member-chain.js @@ -82,8 +82,7 @@ function printMemberChain(path, options, print) { if (nextChar === ")") { return isNextLineEmptyAfterIndex( originalText, - nextCharIndex + 1, - options.locEnd + nextCharIndex + 1 ); } From a5d5ee784583a75e3d94ed75147a1d964ab9a173 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Thu, 16 Jul 2020 19:16:28 -0400 Subject: [PATCH 14/71] fix(types): add value conditions in src/language-js/comments.js --- src/language-js/comments.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/language-js/comments.js b/src/language-js/comments.js index ef3f35b40c5f..f91f377a21a6 100644 --- a/src/language-js/comments.js +++ b/src/language-js/comments.js @@ -578,7 +578,7 @@ function handleCommentAfterArrowParams(text, enclosingNode, comment, options) { comment, options.locEnd ); - if (text.slice(index, index + 2) === "=>") { + if (index !== false && text.slice(index, index + 2) === "=>") { addDanglingComment(enclosingNode, comment); return true; } @@ -672,9 +672,12 @@ function handleLastFunctionArgComments( text, options.locEnd(enclosingNode.id) ); - return getNextNonSpaceNonCommentCharacterIndexWithStartIndex( - text, - functionParamLeftParenIndex + 1 + return ( + functionParamLeftParenIndex !== false && + getNextNonSpaceNonCommentCharacterIndexWithStartIndex( + text, + functionParamLeftParenIndex + 1 + ) ); })(); if (options.locStart(comment) > functionParamRightParenIndex) { From 171343ae80512659940181f692543ab38dd34bff Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Thu, 16 Jul 2020 19:17:13 -0400 Subject: [PATCH 15/71] fix(types): value condition in src/language-js/print/member-chain.js --- src/language-js/print/member-chain.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/language-js/print/member-chain.js b/src/language-js/print/member-chain.js index 2e8fef66009c..707dccfb642f 100644 --- a/src/language-js/print/member-chain.js +++ b/src/language-js/print/member-chain.js @@ -80,9 +80,9 @@ function printMemberChain(path, options, print) { // if it is cut off by a parenthesis, we only account for one typed empty // line after that parenthesis if (nextChar === ")") { - return isNextLineEmptyAfterIndex( - originalText, - nextCharIndex + 1 + return ( + nextCharIndex !== false && + isNextLineEmptyAfterIndex(originalText, nextCharIndex + 1) ); } From 82e9caafb3740e25044d52c75f412832d1eb9f02 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Thu, 16 Jul 2020 19:17:25 -0400 Subject: [PATCH 16/71] fix(types): add a type condition in src/language-js/printer-estree.js --- src/language-js/printer-estree.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/language-js/printer-estree.js b/src/language-js/printer-estree.js index 454cfe125038..87c165940aae 100644 --- a/src/language-js/printer-estree.js +++ b/src/language-js/printer-estree.js @@ -485,7 +485,9 @@ function printPathNoParens(path, options, print, args) { // ) const hasJSX = isJSXNode(n.right); - const firstGroupIndex = parts.findIndex((part) => part.type === "group"); + const firstGroupIndex = parts.findIndex( + (part) => typeof part !== "string" && part.type === "group" + ); // Separate the leftmost expression, possibly with its leading comments. const headParts = parts.slice( 0, From 3862b262ee8a1644c060bdb24fd65f2cf916e381 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Thu, 16 Jul 2020 18:59:01 -0400 Subject: [PATCH 17/71] fix(types): add a value condition in src/language-js/utils.js --- src/language-js/utils.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/language-js/utils.js b/src/language-js/utils.js index 479cdd0cec4e..76869a58743f 100644 --- a/src/language-js/utils.js +++ b/src/language-js/utils.js @@ -709,7 +709,9 @@ function isFlowAnnotationComment(text, typeAnnotation, options) { const start = options.locStart(typeAnnotation); const end = skipWhitespace(text, options.locEnd(typeAnnotation)); return ( - text.slice(start, start + 2) === "/*" && text.slice(end, end + 2) === "*/" + end !== false && + text.slice(start, start + 2) === "/*" && + text.slice(end, end + 2) === "*/" ); } From ba4148b401a5de4044edfd97290065a25ff42dee Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Thu, 16 Jul 2020 19:23:07 -0400 Subject: [PATCH 18/71] ignore type issue in src/common/parser-create-error.js - TBD (...) --- src/common/parser-create-error.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/common/parser-create-error.js b/src/common/parser-create-error.js index d96df606af77..a3f68defd931 100644 --- a/src/common/parser-create-error.js +++ b/src/common/parser-create-error.js @@ -5,6 +5,7 @@ function createError(message, loc) { const error = new SyntaxError( message + " (" + loc.start.line + ":" + loc.start.column + ")" ); + // @ts-ignore - TBD (...) error.loc = loc; return error; } From 46e7b6d41bc60becace82cdb51e47ce7834e18c8 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Thu, 16 Jul 2020 19:24:13 -0400 Subject: [PATCH 19/71] add @ts-ignore comment to src/language-js/utils.js (TBD ...) --- src/language-js/utils.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/language-js/utils.js b/src/language-js/utils.js index 76869a58743f..605d966d60a2 100644 --- a/src/language-js/utils.js +++ b/src/language-js/utils.js @@ -130,6 +130,7 @@ function getLeftSidePathName(path, node) { if (node.expression) { return ["expression"]; } + // @ts-ignore - TBD (...) throw new Error("Unexpected node has no left side", node); } From 33bcf982339eada9e392ca89ce92136c75f5f871 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Thu, 16 Jul 2020 19:35:47 -0400 Subject: [PATCH 20/71] add @ts-ignore comments to src/language-js/print/call-arguments.js --- src/language-js/print/call-arguments.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/language-js/print/call-arguments.js b/src/language-js/print/call-arguments.js index 085741b0b342..148ea498ebdd 100644 --- a/src/language-js/print/call-arguments.js +++ b/src/language-js/print/call-arguments.js @@ -202,7 +202,9 @@ function printCallArguments(path, options, print) { shouldGroupFirst ? concat([ "(", + // @ts-ignore - TBD printedExpanded may be undefined (...) group(printedExpanded[0], { shouldBreak: true }), + // @ts-ignore - TBD printedExpanded may be undefined (...) concat(printedExpanded.slice(1)), ")", ]) From 9a0c75664819c519dc2df6d577629f55101940dc Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Thu, 16 Jul 2020 19:47:58 -0400 Subject: [PATCH 21/71] remove src/language-js from exclude in tsconfig.json --- tsconfig.json | 1 - 1 file changed, 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index 35aff6576cc0..0f77e26ba5a3 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -27,7 +27,6 @@ "src/language-graphql", "src/language-handlebars", "src/language-html", - "src/language-js", "src/language-markdown", "src/language-yaml", // [TBD] JavaScript sources affected by JSDoc issues in src/language-*: From e2cc79b129617eddd2713ac88a33fecc1f4d619d Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Thu, 16 Jul 2020 19:48:09 -0400 Subject: [PATCH 22/71] cleanup: remove src/common/parser-create-error.js from tsconfig.json --- tsconfig.json | 1 - 1 file changed, 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index 0f77e26ba5a3..518ac256b355 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -16,7 +16,6 @@ "src/main/ast-to-doc.js", "src/main/core.js", "src/common/create-ignorer.js", - "src/common/parser-create-error.js", "src/config/resolve-config.js", "src/main/options-normalizer.js", "src/common/get-file-info.js", From 3ae14db5884fc15a65d09d93135145ad2fdbae6b Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Thu, 16 Jul 2020 19:49:10 -0400 Subject: [PATCH 23/71] cleanup: add blank lines to src/language-js/print/module.js --- src/language-js/print/module.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/language-js/print/module.js b/src/language-js/print/module.js index 1fcfd1a05500..dc0f8ccf506d 100644 --- a/src/language-js/print/module.js +++ b/src/language-js/print/module.js @@ -3,6 +3,7 @@ const { builders: { concat, softline, group, indent, join, line, ifBreak }, } = require("../../document"); + const { shouldPrintComma } = require("../utils"); /** @@ -16,6 +17,7 @@ function printModuleSource(path, options, print) { function printModuleSpecifiers(path, options, print) { const node = path.getValue(); + /** @type{Doc[]} */ const parts = [node.type === "ImportDeclaration" ? " " : ""]; From 7a44932cc534fb84af44855ee1456c7afd72443d Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Thu, 16 Jul 2020 19:49:46 -0400 Subject: [PATCH 24/71] cleanup: add blank lines to src/language-js/printer-estree.js --- src/language-js/printer-estree.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/language-js/printer-estree.js b/src/language-js/printer-estree.js index 87c165940aae..3734f812448a 100644 --- a/src/language-js/printer-estree.js +++ b/src/language-js/printer-estree.js @@ -261,6 +261,7 @@ function printPathNoParens(path, options, print, args) { /** @type{Doc[]} */ let parts = []; + switch (n.type) { case "JsExpressionRoot": return path.call(print, "node"); @@ -485,19 +486,23 @@ function printPathNoParens(path, options, print, args) { // ) const hasJSX = isJSXNode(n.right); + const firstGroupIndex = parts.findIndex( (part) => typeof part !== "string" && part.type === "group" ); + // Separate the leftmost expression, possibly with its leading comments. const headParts = parts.slice( 0, firstGroupIndex === -1 ? 1 : firstGroupIndex + 1 ); + const rest = concat( parts.slice(headParts.length, hasJSX ? -1 : undefined) ); const groupId = Symbol("logicalChain-" + ++uid); + const chain = group( concat([ // Don't include the initial expression in the indentation @@ -4044,7 +4049,9 @@ function printReturnType(path, print, options) { function printExportDeclaration(path, options, print) { const decl = path.getValue(); + const semi = options.semi ? ";" : ""; + /** @type{Doc[]} */ const parts = ["export "]; @@ -4770,6 +4777,7 @@ function printBinaryishExpressions( ) { /** @type{Doc[]} */ let parts = []; + const node = path.getValue(); // We treat BinaryExpression and LogicalExpression nodes the same. From ea6c5ae1c9e82fb571fc792815cec79ed13caa5a Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Thu, 16 Jul 2020 19:50:12 -0400 Subject: [PATCH 25/71] extra cleanup: specific import of assert type in src/main/comments.js --- src/main/comments.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/comments.js b/src/main/comments.js index 116769817b3d..5f5fd4758f86 100644 --- a/src/main/comments.js +++ b/src/main/comments.js @@ -1,5 +1,6 @@ "use strict"; -/** @type {any} */ + +/** @type {import("assert")} */ const assert = require("assert"); const { concat, From 965b614896ca7fb15d39eaca5278eed995f9b535 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Thu, 16 Jul 2020 19:50:24 -0400 Subject: [PATCH 26/71] extra cleanup: add blank lines to src/main/comments.js --- src/main/comments.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/comments.js b/src/main/comments.js index 5f5fd4758f86..acbc0208c421 100644 --- a/src/main/comments.js +++ b/src/main/comments.js @@ -2,6 +2,7 @@ /** @type {import("assert")} */ const assert = require("assert"); + const { concat, line, @@ -12,6 +13,7 @@ const { join, cursor, } = require("../document").builders; + const { hasNewline, skipNewline, @@ -21,6 +23,7 @@ const { addDanglingComment, addTrailingComment, } = require("../common/util"); + const childNodesCacheKey = Symbol("child-nodes"); function getSortedChildNodes(node, options, resultArray) { From f4a7c06b532adf6c174c39e8e862e71761e56251 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Wed, 5 Aug 2020 13:55:52 -0400 Subject: [PATCH 27/71] extra cleanup: fix ordering of eslint-plugin-* in devDependencies --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b5e54fc5c49f..8ca057844e9c 100644 --- a/package.json +++ b/package.json @@ -100,8 +100,8 @@ "eslint-config-prettier": "6.11.0", "eslint-formatter-friendly": "7.0.0", "eslint-plugin-import": "2.22.0", - "eslint-plugin-prettier-internal-rules": "file:scripts/tools/eslint-plugin-prettier-internal-rules", "eslint-plugin-jest": "23.20.0", + "eslint-plugin-prettier-internal-rules": "file:scripts/tools/eslint-plugin-prettier-internal-rules", "eslint-plugin-react": "7.20.5", "eslint-plugin-unicorn": "21.0.0", "execa": "4.0.3", From c3701edbed5374df311c4b19ee3644ecbd30672d Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Wed, 5 Aug 2020 14:01:12 -0400 Subject: [PATCH 28/71] update @types/node -> 14.0.27 in devDependencies --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 8ca057844e9c..0056faa9c4d4 100644 --- a/package.json +++ b/package.json @@ -90,7 +90,7 @@ "@rollup/plugin-json": "4.1.0", "@rollup/plugin-node-resolve": "8.4.0", "@rollup/plugin-replace": "2.3.3", - "@types/node": "14.0.23", + "@types/node": "14.0.27", "babel-loader": "8.1.0", "benchmark": "2.1.4", "builtin-modules": "3.1.0", diff --git a/yarn.lock b/yarn.lock index c1ff2b9f5137..aafe8563b492 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1340,10 +1340,10 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.14.tgz#24a0b5959f16ac141aeb0c5b3cd7a15b7c64cbce" integrity sha512-syUgf67ZQpaJj01/tRTknkMNoBBLWJOBODF0Zm4NrXmiSuxjymFrxnTu1QVYRubhVkRcZLYZG8STTwJRdVm/WQ== -"@types/node@14.0.23": - version "14.0.23" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.23.tgz#676fa0883450ed9da0bb24156213636290892806" - integrity sha512-Z4U8yDAl5TFkmYsZdFPdjeMa57NOvnaf1tljHzhouaPEp7LCj2JKkejpI1ODviIAQuW4CcQmxkQ77rnLsOOoKw== +"@types/node@14.0.27": + version "14.0.27" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.27.tgz#a151873af5a5e851b51b3b065c9e63390a9e0eb1" + integrity sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g== "@types/normalize-package-data@^2.4.0": version "2.4.0" From 5e69ad7a9131b7e0ac24ffe1aae2e253d9ee5c4c Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Sun, 9 Aug 2020 23:01:41 -0400 Subject: [PATCH 29/71] Revert "define & use 2 JSDoc types in src/language-js/utils.js" This reverts commit 8b420bf373b731b3bd08bed88ec18dc87ff72e90. --- src/language-js/utils.js | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/src/language-js/utils.js b/src/language-js/utils.js index 7370da03fee2..0ab7bccee771 100644 --- a/src/language-js/utils.js +++ b/src/language-js/utils.js @@ -11,21 +11,6 @@ const { } = require("../common/util"); const handleComments = require("./comments"); -/** - * @typedef {import("estree").BaseNode} BaseNode - * @typedef {import("estree").BaseExpression} BaseExpression - * @typedef {import("estree").Expression} Expression - * - * @typedef {Object} MemberExpressionNode - * @mixes BaseExpression - * @property {Expression} object - * @property {Expression} property - * - * @typedef {Object} TemplateLiteralNode - * @mixes BaseNode - * @property {MemberExpressionNode[]} expressions - */ - // We match any whitespace except line terminators because // Flow annotation comments cannot be split across lines. For example: // @@ -471,7 +456,7 @@ function isNgForOf(node, index, parentNode) { ); } -/** @param node {TemplateLiteralNode} */ +/** @param node {import("estree").TemplateLiteral} */ function isSimpleTemplateLiteral(node) { if (node.expressions.length === 0) { return false; @@ -900,7 +885,7 @@ function isLongCurriedCallExpression(path) { } /** - * @param {MemberExpressionNode} node + * @param {import('estree').Node} node * @param {number} depth * @returns {boolean} */ From 3babd0eb163939a8636a63b46372e0fbeb299905 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Sun, 9 Aug 2020 23:05:02 -0400 Subject: [PATCH 30/71] use specific types in 2 functions in src/language-js/utils.js --- src/language-js/utils.js | 48 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/src/language-js/utils.js b/src/language-js/utils.js index 0ab7bccee771..3666c993301a 100644 --- a/src/language-js/utils.js +++ b/src/language-js/utils.js @@ -11,6 +11,42 @@ const { } = require("../common/util"); const handleComments = require("./comments"); +/** + * @typedef {import("@babel/types").SequenceExpression} SequenceExpression + * + * @typedef {import("@typescript-eslint/types").TSESTree.Literal} Literal + * + * @typedef {import("@babel/types").RegExpLiteral} RegExpLiteral + * @typedef {import("@babel/types").BigIntLiteral} BigIntLiteral + * + * @typedef {import("@babel/types").DecimalLiteral} DecimalLiteral + * @typedef {import("@babel/types").BooleanLiteral} BooleanLiteral + * @typedef {import("@babel/types").NullLiteral} NullLiteral + * @typedef {import("@babel/types").NumericLiteral} NumericLiteral + * @typedef {import("@babel/types").StringLiteral} StringLiteral + * @typedef {import("@babel/types").Identifier} Identifier + * @typedef {import("@babel/types").ThisExpression} ThisExpression + * @typedef {import("@babel/types").Super} Super + * @typedef {import("@babel/types").PrivateName} PrivateName + * @typedef {import("@babel/types").ArgumentPlaceholder} ArgumentPlaceholder + * @typedef {import("@babel/types").Import} Import + * @typedef {import("@babel/types").TemplateLiteral} TemplateLiteral + * @typedef {import("@babel/types").ObjectExpression} ObjectExpression + * @typedef {import("@babel/types").ArrayExpression} ArrayExpression + * + * @typedef {import("estree").ImportExpression} ImportExpression + * + * @typedef {import("@babel/types").CallExpression} CallExpression + * @typedef {import("@babel/types").OptionalCallExpression} OptionalCallExpression + * @typedef {import("@babel/types").NewExpression} NewExpression + * @typedef {import("@babel/types").MemberExpression} MemberExpression + * @typedef {import("@babel/types").OptionalMemberExpression} OptionalMemberExpression + * @typedef {import("@babel/types").UnaryExpression} UnaryExpression + * @typedef {import("@babel/types").TSNonNullExpression} TSNonNullExpression + * + * @typedef {Literal | BigIntLiteral | RegExpLiteral | DecimalLiteral | BooleanLiteral | NullLiteral | NumericLiteral | StringLiteral | Identifier | ThisExpression | Super | PrivateName | ArgumentPlaceholder | Import | TemplateLiteral | ObjectExpression | ArrayExpression | ImportExpression | CallExpression | OptionalCallExpression | NewExpression | MemberExpression | OptionalMemberExpression | UnaryExpression | TSNonNullExpression} ESNode + */ + // We match any whitespace except line terminators because // Flow annotation comments cannot be split across lines. For example: // @@ -456,7 +492,10 @@ function isNgForOf(node, index, parentNode) { ); } -/** @param node {import("estree").TemplateLiteral} */ +/** + * @param {SequenceExpression} node + * @returns {boolean} + */ function isSimpleTemplateLiteral(node) { if (node.expressions.length === 0) { return false; @@ -464,6 +503,7 @@ function isSimpleTemplateLiteral(node) { return node.expressions.every((expr) => { // Disallow comments since printDocToString can't print them here + // @ts-ignore if (expr.comments) { return false; } @@ -478,6 +518,7 @@ function isSimpleTemplateLiteral(node) { expr.type === "MemberExpression" || expr.type === "OptionalMemberExpression" ) { + /** @type {any} */ let head = expr; while ( head.type === "MemberExpression" || @@ -491,7 +532,9 @@ function isSimpleTemplateLiteral(node) { ) { return false; } + head = head.object; + if (head.comments) { return false; } @@ -885,7 +928,7 @@ function isLongCurriedCallExpression(path) { } /** - * @param {import('estree').Node} node + * @param {ESNode} node * @param {number} depth * @returns {boolean} */ @@ -930,6 +973,7 @@ function isSimpleCallArgument(node, depth) { if (node.type === "ObjectExpression") { return node.properties.every( + /** @param {any} p */ (p) => !p.computed && (p.shorthand || (p.value && plusTwo(p.value))) ); } From b6decaf84b0c02c92c3ba41b1050b33d4314915a Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Sun, 9 Aug 2020 23:06:04 -0400 Subject: [PATCH 31/71] add "TSESTree" to cspell.json --- cspell.json | 1 + 1 file changed, 1 insertion(+) diff --git a/cspell.json b/cspell.json index 664700efcfb4..9c50df1d0ded 100644 --- a/cspell.json +++ b/cspell.json @@ -354,6 +354,7 @@ "Transloadit", "TSAs", "tsep", + "TSESTree", "TSJS", "tslib", "typeahead", From 0a7e566ff777a32b26b118de28fce6e878bfd4fb Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Sun, 9 Aug 2020 23:24:23 -0400 Subject: [PATCH 32/71] add @babel/types to devDependencies --- package.json | 1 + yarn.lock | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 4c3593c1dc27..2cfdbf8f6b87 100644 --- a/package.json +++ b/package.json @@ -84,6 +84,7 @@ "devDependencies": { "@babel/core": "7.11.1", "@babel/preset-env": "7.11.0", + "@babel/types": "7.11.0", "@glimmer/reference": "0.56.0", "@rollup/plugin-alias": "3.1.1", "@rollup/plugin-babel": "5.1.0", diff --git a/yarn.lock b/yarn.lock index 2a314ba0dd07..25351ced925e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -857,7 +857,7 @@ globals "^11.1.0" lodash "^4.17.19" -"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": +"@babel/types@7.11.0", "@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.0.tgz#2ae6bf1ba9ae8c3c43824e5861269871b206e90d" integrity sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA== From 95d7ff675ef03f7e941c55981bf3c019de56109e Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Sun, 9 Aug 2020 23:25:33 -0400 Subject: [PATCH 33/71] add @typescript-eslint/types to devDependencies --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 2cfdbf8f6b87..b5107c33fafe 100644 --- a/package.json +++ b/package.json @@ -93,6 +93,7 @@ "@rollup/plugin-node-resolve": "8.4.0", "@rollup/plugin-replace": "2.3.3", "@types/node": "14.0.27", + "@typescript-eslint/types": "3.8.0", "babel-loader": "8.1.0", "benchmark": "2.1.4", "builtin-modules": "3.1.0", From e29327059201009600f3cc4e60f96db3bd19e5dd Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Sun, 9 Aug 2020 23:27:38 -0400 Subject: [PATCH 34/71] add @types/estree to devDependencies --- package.json | 1 + yarn.lock | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index b5107c33fafe..bef7608f3cdb 100644 --- a/package.json +++ b/package.json @@ -92,6 +92,7 @@ "@rollup/plugin-json": "4.1.0", "@rollup/plugin-node-resolve": "8.4.0", "@rollup/plugin-replace": "2.3.3", + "@types/estree": "0.0.45", "@types/node": "14.0.27", "@typescript-eslint/types": "3.8.0", "babel-loader": "8.1.0", diff --git a/yarn.lock b/yarn.lock index 25351ced925e..64ff3daa9d82 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1300,7 +1300,7 @@ resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== -"@types/estree@*": +"@types/estree@*", "@types/estree@0.0.45": version "0.0.45" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.45.tgz#e9387572998e5ecdac221950dab3e8c3b16af884" integrity sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g== From 098ef048279578ef335285dcc9c5197fb00f4c40 Mon Sep 17 00:00:00 2001 From: fisker Date: Mon, 10 Aug 2020 11:31:44 +0800 Subject: [PATCH 35/71] Fix typecheck --- src/language-js/utils.js | 52 ++++++++++------------------------------ 1 file changed, 12 insertions(+), 40 deletions(-) diff --git a/src/language-js/utils.js b/src/language-js/utils.js index 3666c993301a..051c819ef18a 100644 --- a/src/language-js/utils.js +++ b/src/language-js/utils.js @@ -12,39 +12,11 @@ const { const handleComments = require("./comments"); /** - * @typedef {import("@babel/types").SequenceExpression} SequenceExpression - * - * @typedef {import("@typescript-eslint/types").TSESTree.Literal} Literal - * - * @typedef {import("@babel/types").RegExpLiteral} RegExpLiteral - * @typedef {import("@babel/types").BigIntLiteral} BigIntLiteral - * - * @typedef {import("@babel/types").DecimalLiteral} DecimalLiteral - * @typedef {import("@babel/types").BooleanLiteral} BooleanLiteral - * @typedef {import("@babel/types").NullLiteral} NullLiteral - * @typedef {import("@babel/types").NumericLiteral} NumericLiteral - * @typedef {import("@babel/types").StringLiteral} StringLiteral - * @typedef {import("@babel/types").Identifier} Identifier - * @typedef {import("@babel/types").ThisExpression} ThisExpression - * @typedef {import("@babel/types").Super} Super - * @typedef {import("@babel/types").PrivateName} PrivateName - * @typedef {import("@babel/types").ArgumentPlaceholder} ArgumentPlaceholder - * @typedef {import("@babel/types").Import} Import - * @typedef {import("@babel/types").TemplateLiteral} TemplateLiteral - * @typedef {import("@babel/types").ObjectExpression} ObjectExpression - * @typedef {import("@babel/types").ArrayExpression} ArrayExpression - * - * @typedef {import("estree").ImportExpression} ImportExpression - * - * @typedef {import("@babel/types").CallExpression} CallExpression - * @typedef {import("@babel/types").OptionalCallExpression} OptionalCallExpression - * @typedef {import("@babel/types").NewExpression} NewExpression - * @typedef {import("@babel/types").MemberExpression} MemberExpression - * @typedef {import("@babel/types").OptionalMemberExpression} OptionalMemberExpression - * @typedef {import("@babel/types").UnaryExpression} UnaryExpression - * @typedef {import("@babel/types").TSNonNullExpression} TSNonNullExpression - * - * @typedef {Literal | BigIntLiteral | RegExpLiteral | DecimalLiteral | BooleanLiteral | NullLiteral | NumericLiteral | StringLiteral | Identifier | ThisExpression | Super | PrivateName | ArgumentPlaceholder | Import | TemplateLiteral | ObjectExpression | ArrayExpression | ImportExpression | CallExpression | OptionalCallExpression | NewExpression | MemberExpression | OptionalMemberExpression | UnaryExpression | TSNonNullExpression} ESNode + * @typedef {import("estree").Node} ESTreeNode + * @typedef {import("@babel/types").Node} BabelNode + * @typedef {import("@typescript-eslint/types").TSESTree.Node} TSNode + * @typedef {import("angular-estree-parser/lib/types").NGNode} NGNode + * @typedef {ESTreeNode | BabelNode | TSNode | NGNode} Node */ // We match any whitespace except line terminators because @@ -493,7 +465,11 @@ function isNgForOf(node, index, parentNode) { } /** - * @param {SequenceExpression} node + * @typedef {import("estree").TemplateLiteral} ESTreeTemplateLiteral + * @typedef {import("@babel/types").TemplateLiteral} BabelTemplateLiteral + * @typedef {ESTreeTemplateLiteral | BabelTemplateLiteral} TemplateLiteral + * + * @param {TemplateLiteral} node * @returns {boolean} */ function isSimpleTemplateLiteral(node) { @@ -503,7 +479,6 @@ function isSimpleTemplateLiteral(node) { return node.expressions.every((expr) => { // Disallow comments since printDocToString can't print them here - // @ts-ignore if (expr.comments) { return false; } @@ -518,7 +493,6 @@ function isSimpleTemplateLiteral(node) { expr.type === "MemberExpression" || expr.type === "OptionalMemberExpression" ) { - /** @type {any} */ let head = expr; while ( head.type === "MemberExpression" || @@ -532,9 +506,7 @@ function isSimpleTemplateLiteral(node) { ) { return false; } - head = head.object; - if (head.comments) { return false; } @@ -928,7 +900,7 @@ function isLongCurriedCallExpression(path) { } /** - * @param {ESNode} node + * @param {Node} node * @param {number} depth * @returns {boolean} */ @@ -941,6 +913,7 @@ function isSimpleCallArgument(node, depth) { const plusTwo = (node) => isSimpleCallArgument(node, depth + 2); const regexpPattern = + // @ts-ignore (node.type === "Literal" && node.regex && node.regex.pattern) || (node.type === "RegExpLiteral" && node.pattern); @@ -973,7 +946,6 @@ function isSimpleCallArgument(node, depth) { if (node.type === "ObjectExpression") { return node.properties.every( - /** @param {any} p */ (p) => !p.computed && (p.shorthand || (p.value && plusTwo(p.value))) ); } From 0ffb531a63cd68e90d8ffb824e966534687b936a Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Mon, 10 Aug 2020 00:57:24 -0400 Subject: [PATCH 36/71] get rid of ESTreeNode & remove a @ts-ignore from regexpPattern const --- src/language-js/utils.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/language-js/utils.js b/src/language-js/utils.js index 051c819ef18a..f41d3ab086d8 100644 --- a/src/language-js/utils.js +++ b/src/language-js/utils.js @@ -12,11 +12,10 @@ const { const handleComments = require("./comments"); /** - * @typedef {import("estree").Node} ESTreeNode * @typedef {import("@babel/types").Node} BabelNode * @typedef {import("@typescript-eslint/types").TSESTree.Node} TSNode * @typedef {import("angular-estree-parser/lib/types").NGNode} NGNode - * @typedef {ESTreeNode | BabelNode | TSNode | NGNode} Node + * @typedef {BabelNode | TSNode | NGNode} Node */ // We match any whitespace except line terminators because @@ -913,7 +912,6 @@ function isSimpleCallArgument(node, depth) { const plusTwo = (node) => isSimpleCallArgument(node, depth + 2); const regexpPattern = - // @ts-ignore (node.type === "Literal" && node.regex && node.regex.pattern) || (node.type === "RegExpLiteral" && node.pattern); From be02bcaee590977ec54d036c7ca78a969b998d95 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Mon, 10 Aug 2020 01:01:07 -0400 Subject: [PATCH 37/71] cleanup JSDoc typedefs in src/language-js/utils.js --- src/language-js/utils.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/language-js/utils.js b/src/language-js/utils.js index f41d3ab086d8..a07d87c8f58d 100644 --- a/src/language-js/utils.js +++ b/src/language-js/utils.js @@ -12,9 +12,18 @@ const { const handleComments = require("./comments"); /** + * @typedef {import("estree").TemplateLiteral} ESTreeTemplateLiteral + * + * @typedef {import("@babel/types").TemplateLiteral} BabelTemplateLiteral + * + * @typedef {ESTreeTemplateLiteral | BabelTemplateLiteral} TemplateLiteral + * * @typedef {import("@babel/types").Node} BabelNode + * * @typedef {import("@typescript-eslint/types").TSESTree.Node} TSNode + * * @typedef {import("angular-estree-parser/lib/types").NGNode} NGNode + * * @typedef {BabelNode | TSNode | NGNode} Node */ @@ -464,10 +473,6 @@ function isNgForOf(node, index, parentNode) { } /** - * @typedef {import("estree").TemplateLiteral} ESTreeTemplateLiteral - * @typedef {import("@babel/types").TemplateLiteral} BabelTemplateLiteral - * @typedef {ESTreeTemplateLiteral | BabelTemplateLiteral} TemplateLiteral - * * @param {TemplateLiteral} node * @returns {boolean} */ From 52add90ebba6736bcf8d2ccb5740078c4af4071e Mon Sep 17 00:00:00 2001 From: fisker Date: Mon, 10 Aug 2020 13:16:32 +0800 Subject: [PATCH 38/71] Extract types to seperate file, add more checks --- src/language-js/types/estree.d.ts | 25 ++++++ src/language-js/utils.js | 131 ++++++++++++++++++++++++++---- 2 files changed, 140 insertions(+), 16 deletions(-) create mode 100644 src/language-js/types/estree.d.ts diff --git a/src/language-js/types/estree.d.ts b/src/language-js/types/estree.d.ts new file mode 100644 index 000000000000..21a9bef4347b --- /dev/null +++ b/src/language-js/types/estree.d.ts @@ -0,0 +1,25 @@ +import * as ESTree from "estree"; +import * as Babel from "@babel/types"; +import { TSESTree } from "@typescript-eslint/types"; +import * as NGTree from "angular-estree-parser/lib/types"; + +export type Node = ESTree.Node | Babel.Node | TSESTree.Node | NGTree.NGNode; +export type TemplateLiteral = + | ESTree.TemplateLiteral + | Babel.TemplateLiteral + | TSESTree.TemplateLiteral; +export type Comment = ESTree.Comment | Babel.Comment | TSESTree.Comment; +export type CallExpression = + | ESTree.CallExpression + | Babel.CallExpression + | TSESTree.CallExpression; +export type MemberExpression = + | ESTree.MemberExpression + | Babel.MemberExpression + | TSESTree.MemberExpression; +export type OptionalMemberExpression = + | Babel.OptionalMemberExpression + | TSESTree.OptionalMemberExpression; +export type BindExpression = Babel.BindExpression; +export type Property = ESTree.Property | Babel.Property | TSESTree.Property; +export type ClassPrivateProperty = Babel.ClassPrivateProperty; diff --git a/src/language-js/utils.js b/src/language-js/utils.js index 051c819ef18a..1d923c18e0d6 100644 --- a/src/language-js/utils.js +++ b/src/language-js/utils.js @@ -12,11 +12,14 @@ const { const handleComments = require("./comments"); /** - * @typedef {import("estree").Node} ESTreeNode - * @typedef {import("@babel/types").Node} BabelNode - * @typedef {import("@typescript-eslint/types").TSESTree.Node} TSNode - * @typedef {import("angular-estree-parser/lib/types").NGNode} NGNode - * @typedef {ESTreeNode | BabelNode | TSNode | NGNode} Node + * @typedef {import("./types/estree").Node} Node + * @typedef {import("./types/estree").TemplateLiteral} TemplateLiteral + * @typedef {import("./types/estree").Comment} Comment + * @typedef {import("./types/estree").MemberExpression} MemberExpression + * @typedef {import("./types/estree").OptionalMemberExpression} OptionalMemberExpression + * @typedef {import("./types/estree").CallExpression} CallExpression + * @typedef {import("./types/estree").BindExpression} BindExpression + * @typedef {import("./types/estree").Property} Property */ // We match any whitespace except line terminators because @@ -46,8 +49,12 @@ function hasFlowShorthandAnnotationComment(node) { ); } +/** + * @param {Comment[]} comments + * @returns {boolean} + */ function hasFlowAnnotationComment(comments) { - return comments && comments[0].value.match(FLOW_ANNOTATION); + return comments && FLOW_ANNOTATION.test(comments[0].value); } function hasNode(node, fn) { @@ -63,6 +70,10 @@ function hasNode(node, fn) { : Object.keys(node).some((key) => hasNode(node[key], fn)); } +/** + * @param {Node} node + * @returns {boolean} + */ function hasNakedLeftSide(node) { return ( node.type === "AssignmentExpression" || @@ -134,6 +145,10 @@ const exportDeclarationTypes = new Set([ "ExportNamedDeclaration", "ExportAllDeclaration", ]); +/** + * @param {Node} node + * @returns {boolean} + */ function isExportDeclaration(node) { return node && exportDeclarationTypes.has(node.type); } @@ -147,6 +162,10 @@ function getParentExportDeclaration(path) { return null; } +/** + * @param {Node} node + * @returns {boolean} + */ function isLiteral(node) { return ( node.type === "BooleanLiteral" || @@ -164,6 +183,10 @@ function isLiteral(node) { ); } +/** + * @param {Node} node + * @returns {boolean} + */ function isLiteralLikeValue(node) { return ( isLiteral(node) || @@ -182,6 +205,10 @@ function isLiteralLikeValue(node) { ); } +/** + * @param {Node} node + * @returns {boolean} + */ function isNumericLiteral(node) { return ( node.type === "NumericLiteral" || @@ -189,6 +216,10 @@ function isNumericLiteral(node) { ); } +/** + * @param {Node} node + * @returns {boolean} + */ function isStringLiteral(node) { return ( node.type === "StringLiteral" || @@ -196,10 +227,18 @@ function isStringLiteral(node) { ); } -function isObjectType(n) { - return n.type === "ObjectTypeAnnotation" || n.type === "TSTypeLiteral"; +/** + * @param {Node} node + * @returns {boolean} + */ +function isObjectType(node) { + return node.type === "ObjectTypeAnnotation" || node.type === "TSTypeLiteral"; } +/** + * @param {Node} node + * @returns {boolean} + */ function isFunctionOrArrowExpression(node) { return ( node.type === "FunctionExpression" || @@ -207,6 +246,10 @@ function isFunctionOrArrowExpression(node) { ); } +/** + * @param {Node} node + * @returns {boolean} + */ function isFunctionOrArrowExpressionWithBody(node) { return ( node.type === "FunctionExpression" || @@ -215,12 +258,20 @@ function isFunctionOrArrowExpressionWithBody(node) { ); } +/** + * @param {Node} node + * @returns {boolean} + */ function isTemplateLiteral(node) { return node.type === "TemplateLiteral"; } // `inject` is used in AngularJS 1.x, `async` in Angular 2+ // example: https://docs.angularjs.org/guide/unit-testing#using-beforeall- +/** + * @param {Node} node + * @returns {boolean} + */ function isAngularTestWrapper(node) { return ( (node.type === "CallExpression" || @@ -232,6 +283,10 @@ function isAngularTestWrapper(node) { ); } +/** + * @param {Node} node + * @returns {boolean} + */ function isJSXNode(node) { return node.type === "JSXElement" || node.type === "JSXFragment"; } @@ -262,6 +317,10 @@ function isJSXWhitespaceExpression(node) { ); } +/** + * @param {Node} node + * @returns {boolean} + */ function isMemberExpressionChain(node) { if ( node.type !== "MemberExpression" && @@ -319,15 +378,23 @@ const binaryishNodeTypes = new Set([ "LogicalExpression", "NGPipeExpression", ]); +/** + * @param {Node} node + * @returns {boolean} + */ function isBinaryish(node) { return binaryishNodeTypes.has(node.type); } +/** + * @param {Node} node + * @returns {boolean} + */ function isMemberish(node) { return ( node.type === "MemberExpression" || node.type === "OptionalMemberExpression" || - (node.type === "BindExpression" && node.object) + (node.type === "BindExpression" && Boolean(node.object)) ); } @@ -344,6 +411,10 @@ const flowTypeAnnotations = new Set([ "BooleanLiteralTypeAnnotation", "StringTypeAnnotation", ]); +/** + * @param {Node} node + * @returns {boolean} + */ function isSimpleFlowType(node) { return ( node && @@ -354,6 +425,10 @@ function isSimpleFlowType(node) { const unitTestRe = /^(skip|[fx]?(it|describe|test))$/; +/** + * @param {CallExpression} node + * @returns {boolean} + */ function isSkipOrOnlyBlock(node) { return ( (node.callee.type === "MemberExpression" || @@ -366,12 +441,12 @@ function isSkipOrOnlyBlock(node) { ); } -function isUnitTestSetUp(n) { +function isUnitTestSetUp(node) { const unitTestSetUpRe = /^(before|after)(Each|All)$/; return ( - n.callee.type === "Identifier" && - unitTestSetUpRe.test(n.callee.name) && - n.arguments.length === 1 + node.callee.type === "Identifier" && + unitTestSetUpRe.test(node.callee.name) && + node.arguments.length === 1 ); } @@ -427,6 +502,10 @@ function hasTrailingLineComment(node) { ); } +/** + * @param {Node} node + * @returns {boolean} + */ function isCallOrOptionalCallExpression(node) { return ( node.type === "CallExpression" || node.type === "OptionalCallExpression" @@ -465,9 +544,6 @@ function isNgForOf(node, index, parentNode) { } /** - * @typedef {import("estree").TemplateLiteral} ESTreeTemplateLiteral - * @typedef {import("@babel/types").TemplateLiteral} BabelTemplateLiteral - * @typedef {ESTreeTemplateLiteral | BabelTemplateLiteral} TemplateLiteral * * @param {TemplateLiteral} node * @returns {boolean} @@ -609,6 +685,11 @@ function classChildNeedsASIProtection(node) { } } +/** + * @param {string} tokenNode + * @param {string} keyword + * @returns {string} + */ function getTypeScriptMappedTypeModifier(tokenNode, keyword) { if (tokenNode === "+") { return "+" + keyword; @@ -639,6 +720,10 @@ const containsNonJsxWhitespaceRegex = new RegExp( // Meaningful if it contains non-whitespace characters, // or it contains whitespace without a new line. +/** + * @param {Node} node + * @returns {boolean} + */ function isMeaningfulJSXText(node) { return ( isLiteral(node) && @@ -802,6 +887,11 @@ function isSimpleNumber(numberString) { return /^(\d+|\d+\.\d+)$/.test(numberString); } +/** + * @param {Node} node + * @param {Node} parentNode + * @returns {boolean} + */ function isJestEachTemplateLiteral(node, parentNode) { /** * describe.each`table`(name, fn) @@ -831,6 +921,10 @@ function isJestEachTemplateLiteral(node, parentNode) { ); } +/** + * @param {TemplateLiteral} template + * @returns {boolean} + */ function templateLiteralHasNewLines(template) { return template.quasis.some((quasi) => quasi.value.raw.includes("\n")); } @@ -1014,6 +1108,11 @@ function shouldPrintComma(options, level = "es5") { // Tests if an expression starts with `{`, or (if forbidFunctionClassAndDoExpr // holds) `function`, `class`, or `do {}`. Will be overzealous if there's // already necessary grouping parentheses. +/** + * @param {Node} node + * @param {boolean} forbidFunctionClassAndDoExpr + * @returns {boolean} + */ function startsWithNoLookaheadToken(node, forbidFunctionClassAndDoExpr) { node = getLeftMost(node); switch (node.type) { From d86528052e8bcf7469eb9a370c1177145631f611 Mon Sep 17 00:00:00 2001 From: fisker Date: Mon, 10 Aug 2020 13:32:09 +0800 Subject: [PATCH 39/71] Rename `TSESTree`, export ESTree, Babel, TSTree, NGTree --- src/language-js/types/estree.d.ts | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/language-js/types/estree.d.ts b/src/language-js/types/estree.d.ts index 21a9bef4347b..8c5f2b896729 100644 --- a/src/language-js/types/estree.d.ts +++ b/src/language-js/types/estree.d.ts @@ -1,25 +1,27 @@ import * as ESTree from "estree"; import * as Babel from "@babel/types"; -import { TSESTree } from "@typescript-eslint/types"; +import { TSESTree as TSTree } from "@typescript-eslint/types"; import * as NGTree from "angular-estree-parser/lib/types"; -export type Node = ESTree.Node | Babel.Node | TSESTree.Node | NGTree.NGNode; +export type Node = ESTree.Node | Babel.Node | TSTree.Node | NGTree.NGNode; export type TemplateLiteral = | ESTree.TemplateLiteral | Babel.TemplateLiteral - | TSESTree.TemplateLiteral; -export type Comment = ESTree.Comment | Babel.Comment | TSESTree.Comment; + | TSTree.TemplateLiteral; +export type Comment = ESTree.Comment | Babel.Comment | TSTree.Comment; export type CallExpression = | ESTree.CallExpression | Babel.CallExpression - | TSESTree.CallExpression; + | TSTree.CallExpression; export type MemberExpression = | ESTree.MemberExpression | Babel.MemberExpression - | TSESTree.MemberExpression; + | TSTree.MemberExpression; export type OptionalMemberExpression = | Babel.OptionalMemberExpression - | TSESTree.OptionalMemberExpression; + | TSTree.OptionalMemberExpression; export type BindExpression = Babel.BindExpression; -export type Property = ESTree.Property | Babel.Property | TSESTree.Property; +export type Property = ESTree.Property | Babel.Property | TSTree.Property; export type ClassPrivateProperty = Babel.ClassPrivateProperty; + +export { ESTree, Babel, TSTree, NGTree }; From 895ce8726240c99b7a791a61b21efcd0f14ad6d3 Mon Sep 17 00:00:00 2001 From: fisker Date: Mon, 10 Aug 2020 14:07:42 +0800 Subject: [PATCH 40/71] Fix 2 `todo`s --- src/language-js/print/call-arguments.js | 4 +--- src/language-js/utils.js | 3 +-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/language-js/print/call-arguments.js b/src/language-js/print/call-arguments.js index 333407880b9f..bb151b0e8dac 100644 --- a/src/language-js/print/call-arguments.js +++ b/src/language-js/print/call-arguments.js @@ -159,7 +159,7 @@ function printCallArguments(path, options, print) { shouldBreakForArrowFunction; // We want to print the last argument with a special flag - let printedExpanded; + let printedExpanded = []; let i = 0; const printArgument = (argPath) => { if (shouldGroupFirst && i === 0) { @@ -202,9 +202,7 @@ function printCallArguments(path, options, print) { shouldGroupFirst ? concat([ "(", - // @ts-ignore - TBD printedExpanded may be undefined (...) group(printedExpanded[0], { shouldBreak: true }), - // @ts-ignore - TBD printedExpanded may be undefined (...) concat(printedExpanded.slice(1)), ")", ]) diff --git a/src/language-js/utils.js b/src/language-js/utils.js index 1d923c18e0d6..607914ef2043 100644 --- a/src/language-js/utils.js +++ b/src/language-js/utils.js @@ -134,8 +134,7 @@ function getLeftSidePathName(path, node) { if (node.expression) { return ["expression"]; } - // @ts-ignore - TBD (...) - throw new Error("Unexpected node has no left side", node); + throw new Error("Unexpected node has no left side."); } const exportDeclarationTypes = new Set([ From 5e7c3ceacad1ebc6ac25751470a36fbe87141954 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Mon, 10 Aug 2020 13:19:56 -0400 Subject: [PATCH 41/71] cleanup: add blank lines to src/language-js/utils.js --- src/language-js/utils.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/language-js/utils.js b/src/language-js/utils.js index 607914ef2043..5f8243adaec6 100644 --- a/src/language-js/utils.js +++ b/src/language-js/utils.js @@ -144,6 +144,7 @@ const exportDeclarationTypes = new Set([ "ExportNamedDeclaration", "ExportAllDeclaration", ]); + /** * @param {Node} node * @returns {boolean} @@ -377,6 +378,7 @@ const binaryishNodeTypes = new Set([ "LogicalExpression", "NGPipeExpression", ]); + /** * @param {Node} node * @returns {boolean} @@ -410,6 +412,7 @@ const flowTypeAnnotations = new Set([ "BooleanLiteralTypeAnnotation", "StringTypeAnnotation", ]); + /** * @param {Node} node * @returns {boolean} From 11b72c4bfbd81b2d6c044ab70d52182f69a61456 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Mon, 10 Aug 2020 13:24:35 -0400 Subject: [PATCH 42/71] cleanup comments for 2 functions in src/language-js/utils.js --- src/language-js/utils.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/language-js/utils.js b/src/language-js/utils.js index 5f8243adaec6..1afbe1e49c88 100644 --- a/src/language-js/utils.js +++ b/src/language-js/utils.js @@ -266,9 +266,10 @@ function isTemplateLiteral(node) { return node.type === "TemplateLiteral"; } -// `inject` is used in AngularJS 1.x, `async` in Angular 2+ -// example: https://docs.angularjs.org/guide/unit-testing#using-beforeall- /** + * Note: `inject` is used in AngularJS 1.x, `async` in Angular 2+ + * example: https://docs.angularjs.org/guide/unit-testing#using-beforeall- + * * @param {Node} node * @returns {boolean} */ @@ -1107,10 +1108,11 @@ function shouldPrintComma(options, level = "es5") { ); } -// Tests if an expression starts with `{`, or (if forbidFunctionClassAndDoExpr -// holds) `function`, `class`, or `do {}`. Will be overzealous if there's -// already necessary grouping parentheses. /** + * Tests if an expression starts with `{`, or (if forbidFunctionClassAndDoExpr + * holds) `function`, `class`, or `do {}`. Will be overzealous if there's + * already necessary grouping parentheses. + * * @param {Node} node * @param {boolean} forbidFunctionClassAndDoExpr * @returns {boolean} From 002d0651274d1e7243c437ac3dc408f106e5b593 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Mon, 10 Aug 2020 13:28:20 -0400 Subject: [PATCH 43/71] remove ESTree.Node option not needed in Node type in estree.d.ts --- src/language-js/types/estree.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/language-js/types/estree.d.ts b/src/language-js/types/estree.d.ts index 8c5f2b896729..faf704825335 100644 --- a/src/language-js/types/estree.d.ts +++ b/src/language-js/types/estree.d.ts @@ -3,7 +3,7 @@ import * as Babel from "@babel/types"; import { TSESTree as TSTree } from "@typescript-eslint/types"; import * as NGTree from "angular-estree-parser/lib/types"; -export type Node = ESTree.Node | Babel.Node | TSTree.Node | NGTree.NGNode; +export type Node = Babel.Node | TSTree.Node | NGTree.NGNode; export type TemplateLiteral = | ESTree.TemplateLiteral | Babel.TemplateLiteral From a620d67fb0dfc3f212c88f8e60c797e3fe34e43f Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Mon, 10 Aug 2020 13:28:23 -0400 Subject: [PATCH 44/71] remove `@ts-ignore` no longer needed from src/language-js/utils.js --- src/language-js/utils.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/language-js/utils.js b/src/language-js/utils.js index 1afbe1e49c88..9ba7a0c0f25c 100644 --- a/src/language-js/utils.js +++ b/src/language-js/utils.js @@ -1010,7 +1010,6 @@ function isSimpleCallArgument(node, depth) { const plusTwo = (node) => isSimpleCallArgument(node, depth + 2); const regexpPattern = - // @ts-ignore (node.type === "Literal" && node.regex && node.regex.pattern) || (node.type === "RegExpLiteral" && node.pattern); From ebd102f02290daad16d8cf2328b2c28d96896d6b Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Mon, 10 Aug 2020 19:40:52 -0400 Subject: [PATCH 45/71] Revert "remove ESTree.Node option not needed in Node type in estree.d.ts" This reverts commit 002d0651274d1e7243c437ac3dc408f106e5b593. --- src/language-js/types/estree.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/language-js/types/estree.d.ts b/src/language-js/types/estree.d.ts index faf704825335..8c5f2b896729 100644 --- a/src/language-js/types/estree.d.ts +++ b/src/language-js/types/estree.d.ts @@ -3,7 +3,7 @@ import * as Babel from "@babel/types"; import { TSESTree as TSTree } from "@typescript-eslint/types"; import * as NGTree from "angular-estree-parser/lib/types"; -export type Node = Babel.Node | TSTree.Node | NGTree.NGNode; +export type Node = ESTree.Node | Babel.Node | TSTree.Node | NGTree.NGNode; export type TemplateLiteral = | ESTree.TemplateLiteral | Babel.TemplateLiteral From f8483ad01c292715985d47efe747d372259d9fc7 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Mon, 10 Aug 2020 19:41:50 -0400 Subject: [PATCH 46/71] add `@ts-ignore` back into src/language-js/utils.js --- src/language-js/utils.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/language-js/utils.js b/src/language-js/utils.js index 9ba7a0c0f25c..1afbe1e49c88 100644 --- a/src/language-js/utils.js +++ b/src/language-js/utils.js @@ -1010,6 +1010,7 @@ function isSimpleCallArgument(node, depth) { const plusTwo = (node) => isSimpleCallArgument(node, depth + 2); const regexpPattern = + // @ts-ignore (node.type === "Literal" && node.regex && node.regex.pattern) || (node.type === "RegExpLiteral" && node.pattern); From cd6ae5a8107f03492d6cb1d0a005ecc97122052e Mon Sep 17 00:00:00 2001 From: fisker Date: Tue, 11 Aug 2020 09:17:16 +0800 Subject: [PATCH 47/71] Fix `ts-ignore` --- src/language-js/utils.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/language-js/utils.js b/src/language-js/utils.js index 1afbe1e49c88..ee07b7ed989f 100644 --- a/src/language-js/utils.js +++ b/src/language-js/utils.js @@ -1010,8 +1010,7 @@ function isSimpleCallArgument(node, depth) { const plusTwo = (node) => isSimpleCallArgument(node, depth + 2); const regexpPattern = - // @ts-ignore - (node.type === "Literal" && node.regex && node.regex.pattern) || + (node.type === "Literal" && "regex" in node && node.regex.pattern) || (node.type === "RegExpLiteral" && node.pattern); if (regexpPattern && regexpPattern.length > 5) { From d41c75abb75823e45b529438b78fb47e6954bbd3 Mon Sep 17 00:00:00 2001 From: fisker Date: Tue, 11 Aug 2020 10:08:34 +0800 Subject: [PATCH 48/71] More type check --- src/language-js/types/estree.d.ts | 45 +++++++++--- src/language-js/utils.js | 116 ++++++++++++++++++++++++++++-- 2 files changed, 146 insertions(+), 15 deletions(-) diff --git a/src/language-js/types/estree.d.ts b/src/language-js/types/estree.d.ts index 8c5f2b896729..51f6e0e7e2b4 100644 --- a/src/language-js/types/estree.d.ts +++ b/src/language-js/types/estree.d.ts @@ -1,27 +1,54 @@ import * as ESTree from "estree"; import * as Babel from "@babel/types"; -import { TSESTree as TSTree } from "@typescript-eslint/types"; +import * as TSESTree from "@typescript-eslint/types/dist/ts-estree"; import * as NGTree from "angular-estree-parser/lib/types"; -export type Node = ESTree.Node | Babel.Node | TSTree.Node | NGTree.NGNode; +export type Node = ESTree.Node | Babel.Node | TSESTree.Node | NGTree.NGNode; export type TemplateLiteral = | ESTree.TemplateLiteral | Babel.TemplateLiteral - | TSTree.TemplateLiteral; -export type Comment = ESTree.Comment | Babel.Comment | TSTree.Comment; + | TSESTree.TemplateLiteral; +export type Comment = ESTree.Comment | Babel.Comment | TSESTree.Comment; export type CallExpression = | ESTree.CallExpression | Babel.CallExpression - | TSTree.CallExpression; + | TSESTree.CallExpression; +export type OptionalCallExpression = + | Babel.OptionalCallExpression + | TSESTree.OptionalCallExpression; export type MemberExpression = | ESTree.MemberExpression | Babel.MemberExpression - | TSTree.MemberExpression; + | TSESTree.MemberExpression; export type OptionalMemberExpression = | Babel.OptionalMemberExpression - | TSTree.OptionalMemberExpression; + | TSESTree.OptionalMemberExpression; +export type Expression = + | ESTree.Expression + | Babel.Expression + | TSESTree.Expression; export type BindExpression = Babel.BindExpression; -export type Property = ESTree.Property | Babel.Property | TSTree.Property; +export type Property = ESTree.Property | Babel.Property | TSESTree.Property; export type ClassPrivateProperty = Babel.ClassPrivateProperty; +export type ObjectTypeProperty = Babel.ObjectTypeProperty; +export type JSXElement = Babel.JSXElement | TSESTree.JSXElement; +export type TaggedTemplateExpression = + | ESTree.TaggedTemplateExpression + | Babel.TaggedTemplateExpression + | TSESTree.TaggedTemplateExpression; +export type Literal = ESTree.Literal | Babel.Literal | TSESTree.Literal; -export { ESTree, Babel, TSTree, NGTree }; +type PrettierEsComment = Comment & { + printed: boolean; + trailing: boolean; + leading: boolean; +}; +export interface PrettierEsNode { + extra: any; + raw: string; + comments: PrettierEsComment[]; + trailingComments: PrettierEsComment[]; + leadingComments: PrettierEsComment[]; +} + +export { ESTree, Babel, TSESTree, NGTree }; diff --git a/src/language-js/utils.js b/src/language-js/utils.js index ee07b7ed989f..bff6a3a2f538 100644 --- a/src/language-js/utils.js +++ b/src/language-js/utils.js @@ -12,14 +12,22 @@ const { const handleComments = require("./comments"); /** + * @typedef {import("./types/estree").PrettierEsNode} PrettierEsNode * @typedef {import("./types/estree").Node} Node * @typedef {import("./types/estree").TemplateLiteral} TemplateLiteral * @typedef {import("./types/estree").Comment} Comment * @typedef {import("./types/estree").MemberExpression} MemberExpression * @typedef {import("./types/estree").OptionalMemberExpression} OptionalMemberExpression * @typedef {import("./types/estree").CallExpression} CallExpression - * @typedef {import("./types/estree").BindExpression} BindExpression + * @typedef {import("./types/estree").OptionalCallExpression} OptionalCallExpression + * @typedef {import("./types/estree").Expression} Expression * @typedef {import("./types/estree").Property} Property + * @typedef {import("./types/estree").ObjectTypeProperty} ObjectTypeProperty + * @typedef {import("./types/estree").JSXElement} JSXElement + * @typedef {import("./types/estree").TaggedTemplateExpression} TaggedTemplateExpression + * @typedef {import("./types/estree").Literal} Literal + * + * @typedef {import("../common/fast-path")} FastPath */ // We match any whitespace except line terminators because @@ -37,6 +45,10 @@ const FLOW_SHORTHAND_ANNOTATION = new RegExp( ); const FLOW_ANNOTATION = new RegExp(`^${NON_LINE_TERMINATING_WHITE_SPACE}*::`); +/** + * @param {Node & PrettierEsNode} node + * @returns {boolean} + */ function hasFlowShorthandAnnotationComment(node) { // https://flow.org/en/docs/types/comments/ // Syntax example: const r = new (window.Request /*: Class */)(""); @@ -45,7 +57,7 @@ function hasFlowShorthandAnnotationComment(node) { node.extra && node.extra.parenthesized && node.trailingComments && - node.trailingComments[0].value.match(FLOW_SHORTHAND_ANNOTATION) + FLOW_SHORTHAND_ANNOTATION.test(node.trailingComments[0].value) ); } @@ -57,6 +69,11 @@ function hasFlowAnnotationComment(comments) { return comments && FLOW_ANNOTATION.test(comments[0].value); } +/** + * @param {Node} node + * @param {(Node) => boolean} fn + * @returns {boolean} + */ function hasNode(node, fn) { if (!node || typeof node !== "object") { return false; @@ -153,6 +170,10 @@ function isExportDeclaration(node) { return node && exportDeclarationTypes.has(node.type); } +/** + * @param {FastPath} path + * @returns {Node | null} + */ function getParentExportDeclaration(path) { const parentNode = path.getParentNode(); if (path.getName() === "declaration" && isExportDeclaration(parentNode)) { @@ -339,6 +360,11 @@ function isGetterOrSetter(node) { return node.kind === "get" || node.kind === "set"; } +/** + * @param {Node} nodeA + * @param {Node} nodeB + * @returns {boolean} + */ function sameLocStart(nodeA, nodeB, options) { return options.locStart(nodeA) === options.locStart(nodeB); } @@ -352,6 +378,10 @@ function isFunctionNotation(node, options) { // Hack to differentiate between the following two which have the same ast // type T = { method: () => void }; // type T = { method(): void }; +/** + * @param {Node} node + * @returns {boolean} + */ function isObjectTypePropertyAFunction(node, options) { return ( (node.type === "ObjectTypeProperty" || @@ -444,6 +474,10 @@ function isSkipOrOnlyBlock(node) { ); } +/** + * @param {CallExpression} node + * @returns {boolean} + */ function isUnitTestSetUp(node) { const unitTestSetUpRe = /^(before|after)(Each|All)$/; return ( @@ -488,14 +522,26 @@ function isTestCall(n, parent) { return false; } +/** + * @param {Node & PrettierEsNode} node + * @returns {boolean} + */ function hasLeadingComment(node) { return node.comments && node.comments.some((comment) => comment.leading); } +/** + * @param {Node & PrettierEsNode} node + * @returns {boolean} + */ function hasTrailingComment(node) { return node.comments && node.comments.some((comment) => comment.trailing); } +/** + * @param {Node & PrettierEsNode} node + * @returns {boolean} + */ function hasTrailingLineComment(node) { return ( node.comments && @@ -506,7 +552,7 @@ function hasTrailingLineComment(node) { } /** - * @param {Node} node + * @param {CallExpression | OptionalCallExpression} node * @returns {boolean} */ function isCallOrOptionalCallExpression(node) { @@ -515,6 +561,10 @@ function isCallOrOptionalCallExpression(node) { ); } +/** + * @param {Node & PrettierEsNode} node + * @returns {boolean} + */ function hasDanglingComments(node) { return ( node.comments && @@ -523,6 +573,10 @@ function hasDanglingComments(node) { } /** identify if an angular expression seems to have side effects */ +/** + * @param {FastPath} path + * @returns {boolean} + */ function hasNgSideEffect(path) { return hasNode(path.getValue(), (node) => { switch (node.type) { @@ -602,15 +656,18 @@ function isSimpleTemplateLiteral(node) { }); } -function getFlowVariance(path) { - if (!path.variance) { +/** + * @param {ObjectTypeProperty} node + */ +function getFlowVariance(node) { + if (!node.variance) { return null; } // Babel 7.0 currently uses variance node type, and flow should // follow suit soon: // https://github.com/babel/babel/issues/4722 - const variance = path.variance.kind || path.variance; + const variance = node.variance.kind || node.variance; switch (variance) { case "plus": @@ -623,6 +680,10 @@ function getFlowVariance(path) { } } +/** + * @param {FastPath} path + * @returns {boolean} + */ function classPropMayCauseASIProblems(path) { const node = path.getNode(); @@ -735,6 +796,10 @@ function isMeaningfulJSXText(node) { ); } +/** + * @param {FastPath} path + * @returns {boolean} + */ function hasJsxIgnoreComment(path) { const node = path.getValue(); const parent = path.getParentNode(); @@ -765,6 +830,10 @@ function hasJsxIgnoreComment(path) { ); } +/** + * @param {JSXElement} node + * @returns {boolean} + */ function isEmptyJSXElement(node) { if (node.children.length === 0) { return true; @@ -779,10 +848,18 @@ function isEmptyJSXElement(node) { return isLiteral(child) && !isMeaningfulJSXText(child); } +/** + * @param {FastPath} path + * @returns {boolean} + */ function hasPrettierIgnore(path) { return hasIgnoreComment(path) || hasJsxIgnoreComment(path); } +/** + * @param {FastPath} path + * @returns {boolean} + */ function isLastStatement(path) { const parent = path.getParentNode(); if (!parent) { @@ -795,6 +872,11 @@ function isLastStatement(path) { return body && body[body.length - 1] === node; } +/** + * @param {string} text + * @param {Node} typeAnnotation + * @returns {boolean} + */ function isFlowAnnotationComment(text, typeAnnotation, options) { const start = options.locStart(typeAnnotation); const end = skipWhitespace(text, options.locEnd(typeAnnotation)); @@ -805,6 +887,11 @@ function isFlowAnnotationComment(text, typeAnnotation, options) { ); } +/** + * @param {string} text + * @param {Node & PrettierEsNode} node + * @returns {boolean} + */ function hasLeadingOwnLineComment(text, node, options) { if (isJSXNode(node)) { return hasNodeIgnoreComment(node); @@ -932,6 +1019,11 @@ function templateLiteralHasNewLines(template) { return template.quasis.some((quasi) => quasi.value.raw.includes("\n")); } +/** + * @param {TemplateLiteral | TaggedTemplateExpression} n + * @param {string} text + * @returns {boolean} + */ function isTemplateOnItsOwnLine(n, text, options) { return ( ((n.type === "TemplateLiteral" && templateLiteralHasNewLines(n)) || @@ -941,6 +1033,10 @@ function isTemplateOnItsOwnLine(n, text, options) { ); } +/** + * @param {Node & PrettierEsNode} node + * @returns {boolean} + */ function needsHardlineAfterDanglingComment(node) { if (!node.comments) { return false; @@ -956,6 +1052,10 @@ function needsHardlineAfterDanglingComment(node) { // Logic to check for args with multiple anonymous functions. For instance, // the following call should be split on multiple lines for readability: // source.pipe(map((x) => x + x), filter((x) => x % 2 === 0)) +/** + * @param {Node[]} args + * @returns {boolean} + */ function isFunctionCompositionArgs(args) { if (args.length <= 1) { return false; @@ -984,6 +1084,10 @@ function isFunctionCompositionArgs(args) { // `connect(a, b, c)(d)` // In the above call expression, the second call is the parent node and the // first call is the current node. +/** + * @param {FastPath} path + * @returns {boolean} + */ function isLongCurriedCallExpression(path) { const node = path.getValue(); const parent = path.getParentNode(); From a66e43a09319bf13beda421d00c04c6228a4ccba Mon Sep 17 00:00:00 2001 From: fisker Date: Tue, 11 Aug 2020 10:28:49 +0800 Subject: [PATCH 49/71] fix --- src/language-js/utils.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/language-js/utils.js b/src/language-js/utils.js index bff6a3a2f538..43a37ed5ac34 100644 --- a/src/language-js/utils.js +++ b/src/language-js/utils.js @@ -1052,10 +1052,6 @@ function needsHardlineAfterDanglingComment(node) { // Logic to check for args with multiple anonymous functions. For instance, // the following call should be split on multiple lines for readability: // source.pipe(map((x) => x + x), filter((x) => x % 2 === 0)) -/** - * @param {Node[]} args - * @returns {boolean} - */ function isFunctionCompositionArgs(args) { if (args.length <= 1) { return false; From 736dc79eaf516cdf400a2e7f5bd72af9b27b1a25 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Mon, 10 Aug 2020 22:45:16 -0400 Subject: [PATCH 50/71] add blank line to src/language-js/types/estree.d.ts --- src/language-js/types/estree.d.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/language-js/types/estree.d.ts b/src/language-js/types/estree.d.ts index 51f6e0e7e2b4..be468f31164a 100644 --- a/src/language-js/types/estree.d.ts +++ b/src/language-js/types/estree.d.ts @@ -43,6 +43,7 @@ type PrettierEsComment = Comment & { trailing: boolean; leading: boolean; }; + export interface PrettierEsNode { extra: any; raw: string; From 5cc4cdc6a6e200a55d85ab6eb13ebd175904465b Mon Sep 17 00:00:00 2001 From: fisker Date: Tue, 11 Aug 2020 10:54:36 +0800 Subject: [PATCH 51/71] Fix estree.d.ts --- src/language-js/types/estree.d.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/language-js/types/estree.d.ts b/src/language-js/types/estree.d.ts index 51f6e0e7e2b4..9a19eb25bd47 100644 --- a/src/language-js/types/estree.d.ts +++ b/src/language-js/types/estree.d.ts @@ -39,16 +39,16 @@ export type TaggedTemplateExpression = export type Literal = ESTree.Literal | Babel.Literal | TSESTree.Literal; type PrettierEsComment = Comment & { - printed: boolean; - trailing: boolean; - leading: boolean; + printed?: boolean; + trailing?: boolean; + leading?: boolean; }; export interface PrettierEsNode { - extra: any; - raw: string; - comments: PrettierEsComment[]; - trailingComments: PrettierEsComment[]; - leadingComments: PrettierEsComment[]; + extra?: any; + raw?: string; + comments?: PrettierEsComment[]; + trailingComments?: PrettierEsComment[]; + leadingComments?: PrettierEsComment[]; } export { ESTree, Babel, TSESTree, NGTree }; From 8eb54e4dc7906a65b752d45663364cd713e62cc6 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Tue, 11 Aug 2020 09:02:17 -0400 Subject: [PATCH 52/71] add blank line to estree.d.ts --- src/language-js/types/estree.d.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/language-js/types/estree.d.ts b/src/language-js/types/estree.d.ts index f24df657d9d4..8802d37d2b83 100644 --- a/src/language-js/types/estree.d.ts +++ b/src/language-js/types/estree.d.ts @@ -4,6 +4,7 @@ import * as TSESTree from "@typescript-eslint/types/dist/ts-estree"; import * as NGTree from "angular-estree-parser/lib/types"; export type Node = ESTree.Node | Babel.Node | TSESTree.Node | NGTree.NGNode; + export type TemplateLiteral = | ESTree.TemplateLiteral | Babel.TemplateLiteral From f95fb888466fa21eb0788dfe46b3ebe152d2268b Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Tue, 11 Aug 2020 09:02:51 -0400 Subject: [PATCH 53/71] update PrettierEsNode type --- src/language-js/types/estree.d.ts | 4 ++-- src/language-js/utils.js | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/language-js/types/estree.d.ts b/src/language-js/types/estree.d.ts index 8802d37d2b83..9523992ac6b3 100644 --- a/src/language-js/types/estree.d.ts +++ b/src/language-js/types/estree.d.ts @@ -45,12 +45,12 @@ type PrettierEsComment = Comment & { leading?: boolean; }; -export interface PrettierEsNode { +export type PrettierEsNode = Node & { extra?: any; raw?: string; comments?: PrettierEsComment[]; trailingComments?: PrettierEsComment[]; leadingComments?: PrettierEsComment[]; -} +}; export { ESTree, Babel, TSESTree, NGTree }; diff --git a/src/language-js/utils.js b/src/language-js/utils.js index 43a37ed5ac34..d7be6ac5bf0a 100644 --- a/src/language-js/utils.js +++ b/src/language-js/utils.js @@ -46,7 +46,7 @@ const FLOW_SHORTHAND_ANNOTATION = new RegExp( const FLOW_ANNOTATION = new RegExp(`^${NON_LINE_TERMINATING_WHITE_SPACE}*::`); /** - * @param {Node & PrettierEsNode} node + * @param {PrettierEsNode} node * @returns {boolean} */ function hasFlowShorthandAnnotationComment(node) { @@ -523,7 +523,7 @@ function isTestCall(n, parent) { } /** - * @param {Node & PrettierEsNode} node + * @param {PrettierEsNode} node * @returns {boolean} */ function hasLeadingComment(node) { @@ -531,7 +531,7 @@ function hasLeadingComment(node) { } /** - * @param {Node & PrettierEsNode} node + * @param {PrettierEsNode} node * @returns {boolean} */ function hasTrailingComment(node) { @@ -539,7 +539,7 @@ function hasTrailingComment(node) { } /** - * @param {Node & PrettierEsNode} node + * @param {PrettierEsNode} node * @returns {boolean} */ function hasTrailingLineComment(node) { @@ -562,7 +562,7 @@ function isCallOrOptionalCallExpression(node) { } /** - * @param {Node & PrettierEsNode} node + * @param {PrettierEsNode} node * @returns {boolean} */ function hasDanglingComments(node) { @@ -889,7 +889,7 @@ function isFlowAnnotationComment(text, typeAnnotation, options) { /** * @param {string} text - * @param {Node & PrettierEsNode} node + * @param {PrettierEsNode} node * @returns {boolean} */ function hasLeadingOwnLineComment(text, node, options) { @@ -1034,7 +1034,7 @@ function isTemplateOnItsOwnLine(n, text, options) { } /** - * @param {Node & PrettierEsNode} node + * @param {PrettierEsNode} node * @returns {boolean} */ function needsHardlineAfterDanglingComment(node) { From ddc404a65046e8b880bba5f818d39b5560a344f6 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Tue, 11 Aug 2020 11:37:37 -0400 Subject: [PATCH 54/71] combined Prettier Node type (quick update) --- src/language-js/types/estree.d.ts | 9 ++++----- src/language-js/utils.js | 15 +++++++-------- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/language-js/types/estree.d.ts b/src/language-js/types/estree.d.ts index 9523992ac6b3..772bb01d49bc 100644 --- a/src/language-js/types/estree.d.ts +++ b/src/language-js/types/estree.d.ts @@ -3,7 +3,7 @@ import * as Babel from "@babel/types"; import * as TSESTree from "@typescript-eslint/types/dist/ts-estree"; import * as NGTree from "angular-estree-parser/lib/types"; -export type Node = ESTree.Node | Babel.Node | TSESTree.Node | NGTree.NGNode; +type AnyNode = ESTree.Node | Babel.Node | TSESTree.Node | NGTree.NGNode; export type TemplateLiteral = | ESTree.TemplateLiteral @@ -45,12 +45,11 @@ type PrettierEsComment = Comment & { leading?: boolean; }; -export type PrettierEsNode = Node & { +export type Node = AnyNode & { extra?: any; - raw?: string; comments?: PrettierEsComment[]; - trailingComments?: PrettierEsComment[]; - leadingComments?: PrettierEsComment[]; + trailingComments?: any; + // leadingComments?: PrettierEsComment[]; }; export { ESTree, Babel, TSESTree, NGTree }; diff --git a/src/language-js/utils.js b/src/language-js/utils.js index d7be6ac5bf0a..9e9a5674443d 100644 --- a/src/language-js/utils.js +++ b/src/language-js/utils.js @@ -12,7 +12,6 @@ const { const handleComments = require("./comments"); /** - * @typedef {import("./types/estree").PrettierEsNode} PrettierEsNode * @typedef {import("./types/estree").Node} Node * @typedef {import("./types/estree").TemplateLiteral} TemplateLiteral * @typedef {import("./types/estree").Comment} Comment @@ -46,7 +45,7 @@ const FLOW_SHORTHAND_ANNOTATION = new RegExp( const FLOW_ANNOTATION = new RegExp(`^${NON_LINE_TERMINATING_WHITE_SPACE}*::`); /** - * @param {PrettierEsNode} node + * @param {Node} node * @returns {boolean} */ function hasFlowShorthandAnnotationComment(node) { @@ -523,7 +522,7 @@ function isTestCall(n, parent) { } /** - * @param {PrettierEsNode} node + * @param {Node} node * @returns {boolean} */ function hasLeadingComment(node) { @@ -531,7 +530,7 @@ function hasLeadingComment(node) { } /** - * @param {PrettierEsNode} node + * @param {Node} node * @returns {boolean} */ function hasTrailingComment(node) { @@ -539,7 +538,7 @@ function hasTrailingComment(node) { } /** - * @param {PrettierEsNode} node + * @param {Node} node * @returns {boolean} */ function hasTrailingLineComment(node) { @@ -562,7 +561,7 @@ function isCallOrOptionalCallExpression(node) { } /** - * @param {PrettierEsNode} node + * @param {Node} node * @returns {boolean} */ function hasDanglingComments(node) { @@ -889,7 +888,7 @@ function isFlowAnnotationComment(text, typeAnnotation, options) { /** * @param {string} text - * @param {PrettierEsNode} node + * @param {Node} node * @returns {boolean} */ function hasLeadingOwnLineComment(text, node, options) { @@ -1034,7 +1033,7 @@ function isTemplateOnItsOwnLine(n, text, options) { } /** - * @param {PrettierEsNode} node + * @param {Node} node * @returns {boolean} */ function needsHardlineAfterDanglingComment(node) { From e0ef9297c13cbe7d2c800fc5fb0f33ab76adcafe Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Tue, 11 Aug 2020 11:48:53 -0400 Subject: [PATCH 55/71] fix Prettier Node type using ReadonlyArray types --- src/language-js/types/estree.d.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/language-js/types/estree.d.ts b/src/language-js/types/estree.d.ts index 772bb01d49bc..1c4d70156c59 100644 --- a/src/language-js/types/estree.d.ts +++ b/src/language-js/types/estree.d.ts @@ -48,8 +48,8 @@ type PrettierEsComment = Comment & { export type Node = AnyNode & { extra?: any; comments?: PrettierEsComment[]; - trailingComments?: any; - // leadingComments?: PrettierEsComment[]; + trailingComments?: ReadonlyArray; + leadingComments?: ReadonlyArray; }; export { ESTree, Babel, TSESTree, NGTree }; From ea689167ebfd0af104c229fbd1844daf83f79e7b Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Tue, 11 Aug 2020 11:59:17 -0400 Subject: [PATCH 56/71] rename estree.d.ts -> ast.d.ts in src/language-js/types --- .../types/{estree.d.ts => ast.d.ts} | 0 src/language-js/utils.js | 26 +++++++++---------- 2 files changed, 13 insertions(+), 13 deletions(-) rename src/language-js/types/{estree.d.ts => ast.d.ts} (100%) diff --git a/src/language-js/types/estree.d.ts b/src/language-js/types/ast.d.ts similarity index 100% rename from src/language-js/types/estree.d.ts rename to src/language-js/types/ast.d.ts diff --git a/src/language-js/utils.js b/src/language-js/utils.js index 9e9a5674443d..e2e0f9ad7973 100644 --- a/src/language-js/utils.js +++ b/src/language-js/utils.js @@ -12,19 +12,19 @@ const { const handleComments = require("./comments"); /** - * @typedef {import("./types/estree").Node} Node - * @typedef {import("./types/estree").TemplateLiteral} TemplateLiteral - * @typedef {import("./types/estree").Comment} Comment - * @typedef {import("./types/estree").MemberExpression} MemberExpression - * @typedef {import("./types/estree").OptionalMemberExpression} OptionalMemberExpression - * @typedef {import("./types/estree").CallExpression} CallExpression - * @typedef {import("./types/estree").OptionalCallExpression} OptionalCallExpression - * @typedef {import("./types/estree").Expression} Expression - * @typedef {import("./types/estree").Property} Property - * @typedef {import("./types/estree").ObjectTypeProperty} ObjectTypeProperty - * @typedef {import("./types/estree").JSXElement} JSXElement - * @typedef {import("./types/estree").TaggedTemplateExpression} TaggedTemplateExpression - * @typedef {import("./types/estree").Literal} Literal + * @typedef {import("./types/ast").Node} Node + * @typedef {import("./types/ast").TemplateLiteral} TemplateLiteral + * @typedef {import("./types/ast").Comment} Comment + * @typedef {import("./types/ast").MemberExpression} MemberExpression + * @typedef {import("./types/ast").OptionalMemberExpression} OptionalMemberExpression + * @typedef {import("./types/ast").CallExpression} CallExpression + * @typedef {import("./types/ast").OptionalCallExpression} OptionalCallExpression + * @typedef {import("./types/ast").Expression} Expression + * @typedef {import("./types/ast").Property} Property + * @typedef {import("./types/ast").ObjectTypeProperty} ObjectTypeProperty + * @typedef {import("./types/ast").JSXElement} JSXElement + * @typedef {import("./types/ast").TaggedTemplateExpression} TaggedTemplateExpression + * @typedef {import("./types/ast").Literal} Literal * * @typedef {import("../common/fast-path")} FastPath */ From 767a9092ba1bc0382fcd8c82afb6e938f153a739 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Tue, 11 Aug 2020 12:25:47 -0400 Subject: [PATCH 57/71] update TemplateLiteral type Co-authored-by: fisker --- src/language-js/types/ast.d.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/language-js/types/ast.d.ts b/src/language-js/types/ast.d.ts index 1c4d70156c59..81ddf714da93 100644 --- a/src/language-js/types/ast.d.ts +++ b/src/language-js/types/ast.d.ts @@ -5,10 +5,11 @@ import * as NGTree from "angular-estree-parser/lib/types"; type AnyNode = ESTree.Node | Babel.Node | TSESTree.Node | NGTree.NGNode; -export type TemplateLiteral = +type AnyTemplateLiteral = | ESTree.TemplateLiteral | Babel.TemplateLiteral | TSESTree.TemplateLiteral; + export type Comment = ESTree.Comment | Babel.Comment | TSESTree.Comment; export type CallExpression = | ESTree.CallExpression @@ -45,6 +46,13 @@ type PrettierEsComment = Comment & { leading?: boolean; }; +export type TemplateLiteral = AnyTemplateLiteral & { + extra?: any; + comments?: PrettierEsComment[]; + trailingComments?: ReadonlyArray; + leadingComments?: ReadonlyArray; +}; + export type Node = AnyNode & { extra?: any; comments?: PrettierEsComment[]; From 954fd9b25b7c06c4f999d8edecf09d909d23b685 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Tue, 11 Aug 2020 12:30:22 -0400 Subject: [PATCH 58/71] update Comment type, replacing PrettierEsComment --- src/language-js/types/ast.d.ts | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/language-js/types/ast.d.ts b/src/language-js/types/ast.d.ts index 81ddf714da93..2b7a6bd8fcd3 100644 --- a/src/language-js/types/ast.d.ts +++ b/src/language-js/types/ast.d.ts @@ -10,7 +10,8 @@ type AnyTemplateLiteral = | Babel.TemplateLiteral | TSESTree.TemplateLiteral; -export type Comment = ESTree.Comment | Babel.Comment | TSESTree.Comment; +type AnyComment = ESTree.Comment | Babel.Comment | TSESTree.Comment; + export type CallExpression = | ESTree.CallExpression | Babel.CallExpression @@ -40,7 +41,7 @@ export type TaggedTemplateExpression = | TSESTree.TaggedTemplateExpression; export type Literal = ESTree.Literal | Babel.Literal | TSESTree.Literal; -type PrettierEsComment = Comment & { +export type Comment = AnyComment & { printed?: boolean; trailing?: boolean; leading?: boolean; @@ -48,16 +49,16 @@ type PrettierEsComment = Comment & { export type TemplateLiteral = AnyTemplateLiteral & { extra?: any; - comments?: PrettierEsComment[]; - trailingComments?: ReadonlyArray; - leadingComments?: ReadonlyArray; + comments?: Comment[]; + trailingComments?: ReadonlyArray; + leadingComments?: ReadonlyArray; }; export type Node = AnyNode & { extra?: any; - comments?: PrettierEsComment[]; - trailingComments?: ReadonlyArray; - leadingComments?: ReadonlyArray; + comments?: Comment[]; + trailingComments?: ReadonlyArray; + leadingComments?: ReadonlyArray; }; export { ESTree, Babel, TSESTree, NGTree }; From ce5c4cbbeb68717c06a88fdd9803c6f2591b3ad1 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Tue, 11 Aug 2020 12:33:43 -0400 Subject: [PATCH 59/71] remove leadingComments from Node type --- src/language-js/types/ast.d.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/language-js/types/ast.d.ts b/src/language-js/types/ast.d.ts index 2b7a6bd8fcd3..494ec32bc5cf 100644 --- a/src/language-js/types/ast.d.ts +++ b/src/language-js/types/ast.d.ts @@ -58,7 +58,6 @@ export type Node = AnyNode & { extra?: any; comments?: Comment[]; trailingComments?: ReadonlyArray; - leadingComments?: ReadonlyArray; }; export { ESTree, Babel, TSESTree, NGTree }; From a440d85b2f414eb4d9fceee533abd1a294f439bb Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Tue, 11 Aug 2020 21:04:26 -0400 Subject: [PATCH 60/71] update @typescript-eslint/types -> 3.9.0 --- package.json | 2 +- yarn.lock | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 6e0621cf736f..ec4590585d54 100644 --- a/package.json +++ b/package.json @@ -94,7 +94,7 @@ "@rollup/plugin-replace": "2.3.3", "@types/estree": "0.0.45", "@types/node": "14.0.27", - "@typescript-eslint/types": "3.8.0", + "@typescript-eslint/types": "3.9.0", "babel-loader": "8.1.0", "benchmark": "2.1.4", "builtin-modules": "3.1.0", diff --git a/yarn.lock b/yarn.lock index a8ac618502c8..996b5f424ca5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1423,6 +1423,11 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.8.0.tgz#58581dd863f86e0cd23353d94362bb90b4bea796" integrity sha512-8kROmEQkv6ss9kdQ44vCN1dTrgu4Qxrd2kXr10kz2NP5T8/7JnEfYNxCpPkArbLIhhkGLZV3aVMplH1RXQRF7Q== +"@typescript-eslint/types@3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.9.0.tgz#be9d0aa451e1bf3ce99f2e6920659e5b2e6bfe18" + integrity sha512-rb6LDr+dk9RVVXO/NJE8dT1pGlso3voNdEIN8ugm4CWM5w5GimbThCMiMl4da1t5u3YwPWEwOnKAULCZgBtBHg== + "@typescript-eslint/typescript-estree@2.34.0": version "2.34.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz#14aeb6353b39ef0732cc7f1b8285294937cf37d5" From 062f8b76e97d7f2b223b5c01572e0a543f5283d1 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Tue, 11 Aug 2020 23:12:35 -0400 Subject: [PATCH 61/71] WORKAROUND PATCH for typescript-eslint/typescript-eslint#2388 --- src/language-js/types/ast.d.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/language-js/types/ast.d.ts b/src/language-js/types/ast.d.ts index 494ec32bc5cf..f1161e72a6ce 100644 --- a/src/language-js/types/ast.d.ts +++ b/src/language-js/types/ast.d.ts @@ -3,6 +3,14 @@ import * as Babel from "@babel/types"; import * as TSESTree from "@typescript-eslint/types/dist/ts-estree"; import * as NGTree from "angular-estree-parser/lib/types"; +// WORKAROUND PATCH FOR typescript-eslint issue: +// https://github.com/typescript-eslint/typescript-eslint/issues/2388 +// REMOVE with TypeScript 4.0.0: +import * as ts from 'typescript'; +declare module 'typescript' { + type NamedTupleMember = Node; +} + type AnyNode = ESTree.Node | Babel.Node | TSESTree.Node | NGTree.NGNode; type AnyTemplateLiteral = From a4c02af134483ca89870731f24ba264ef65a6179 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Tue, 11 Aug 2020 23:14:09 -0400 Subject: [PATCH 62/71] simplify import of TSESTree type from `@typescript-eslint/types` --- src/language-js/types/ast.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/language-js/types/ast.d.ts b/src/language-js/types/ast.d.ts index f1161e72a6ce..385625ad4c6e 100644 --- a/src/language-js/types/ast.d.ts +++ b/src/language-js/types/ast.d.ts @@ -1,6 +1,6 @@ import * as ESTree from "estree"; import * as Babel from "@babel/types"; -import * as TSESTree from "@typescript-eslint/types/dist/ts-estree"; +import { TSESTree } from "@typescript-eslint/types"; import * as NGTree from "angular-estree-parser/lib/types"; // WORKAROUND PATCH FOR typescript-eslint issue: From d988fcf89cdc462e2125c614cb32f266fbb9144d Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Tue, 11 Aug 2020 23:57:00 -0400 Subject: [PATCH 63/71] add d.ts extension to lint:prettier script --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 74317c967d05..4fb01130ab93 100644 --- a/package.json +++ b/package.json @@ -142,7 +142,7 @@ "lint:typecheck": "tsc", "lint:eslint": "cross-env EFF_NO_LINK_RULES=true eslint . --format friendly", "lint:changelog": "node ./scripts/lint-changelog.js", - "lint:prettier": "prettier \"**/*.{md,json,yml,html,css,js}\" \"!test*\" --check", + "lint:prettier": "prettier \"**/*.{md,json,yml,html,css,js,d.ts}\" \"!test*\" --check", "lint:dist": "eslint --no-eslintrc --no-ignore --env=es6,browser --parser-options=ecmaVersion:2016 \"dist/!(bin-prettier|index|third-party).js\"", "lint:spellcheck": "cspell \"**/*\" \".github/**/*\"", "lint:deps": "node ./scripts/check-deps.js", From ea7d22414d3e60fcc2bfa1a5f9e2965ff5878a58 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Tue, 11 Aug 2020 23:58:13 -0400 Subject: [PATCH 64/71] FIX & UPDATE WORKAROUND HACK for typescript-eslint/typescript-eslint#2388 --- src/language-js/types/ast.d.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/language-js/types/ast.d.ts b/src/language-js/types/ast.d.ts index 385625ad4c6e..56ab487bd851 100644 --- a/src/language-js/types/ast.d.ts +++ b/src/language-js/types/ast.d.ts @@ -3,11 +3,11 @@ import * as Babel from "@babel/types"; import { TSESTree } from "@typescript-eslint/types"; import * as NGTree from "angular-estree-parser/lib/types"; -// WORKAROUND PATCH FOR typescript-eslint issue: +// WORKAROUND HACK for typescript-eslint issue: // https://github.com/typescript-eslint/typescript-eslint/issues/2388 -// REMOVE with TypeScript 4.0.0: -import * as ts from 'typescript'; -declare module 'typescript' { +// MUST REMOVE to avoid errors with TypeScript 4.0.0: +import * as ts from "typescript"; +declare module "typescript" { type NamedTupleMember = Node; } From 983a099f86ef0e7f878b1ea3c6672edfbfe07504 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Wed, 12 Aug 2020 00:04:17 -0400 Subject: [PATCH 65/71] add extra & comment fields to all exported AST node types in ast.d.ts --- src/language-js/types/ast.d.ts | 110 +++++++++++++++++++++------------ 1 file changed, 69 insertions(+), 41 deletions(-) diff --git a/src/language-js/types/ast.d.ts b/src/language-js/types/ast.d.ts index 56ab487bd851..163c8fe48dbb 100644 --- a/src/language-js/types/ast.d.ts +++ b/src/language-js/types/ast.d.ts @@ -11,61 +11,89 @@ declare module "typescript" { type NamedTupleMember = Node; } -type AnyNode = ESTree.Node | Babel.Node | TSESTree.Node | NGTree.NGNode; +type ASTComment = ESTree.Comment | Babel.Comment | TSESTree.Comment; -type AnyTemplateLiteral = +export type Comment = ASTComment & { + printed?: boolean; + trailing?: boolean; + leading?: boolean; +}; + +type NodeComments = { + comments?: Comment[]; + trailingComments?: ReadonlyArray; + leadingComments?: ReadonlyArray; +}; + +type AdditionalFields = { + extra?: any; +} & NodeComments; + +type ASTNode = ESTree.Node | Babel.Node | TSESTree.Node | NGTree.NGNode; + +export type Node = ASTNode & WithExtra & WithComments; + +export type TemplateLiteral = ( | ESTree.TemplateLiteral | Babel.TemplateLiteral - | TSESTree.TemplateLiteral; - -type AnyComment = ESTree.Comment | Babel.Comment | TSESTree.Comment; + | TSESTree.TemplateLiteral +) & + AdditionalFields; -export type CallExpression = +export type CallExpression = ( | ESTree.CallExpression | Babel.CallExpression - | TSESTree.CallExpression; -export type OptionalCallExpression = + | TSESTree.CallExpression +) & + AdditionalFields; + +export type OptionalCallExpression = ( | Babel.OptionalCallExpression - | TSESTree.OptionalCallExpression; -export type MemberExpression = + | TSESTree.OptionalCallExpression +) & + AdditionalFields; + +export type MemberExpression = ( | ESTree.MemberExpression | Babel.MemberExpression - | TSESTree.MemberExpression; -export type OptionalMemberExpression = + | TSESTree.MemberExpression +) & + AdditionalFields; + +export type OptionalMemberExpression = ( | Babel.OptionalMemberExpression - | TSESTree.OptionalMemberExpression; -export type Expression = + | TSESTree.OptionalMemberExpression +) & + AdditionalFields; + +export type Expression = ( | ESTree.Expression | Babel.Expression - | TSESTree.Expression; -export type BindExpression = Babel.BindExpression; -export type Property = ESTree.Property | Babel.Property | TSESTree.Property; -export type ClassPrivateProperty = Babel.ClassPrivateProperty; -export type ObjectTypeProperty = Babel.ObjectTypeProperty; -export type JSXElement = Babel.JSXElement | TSESTree.JSXElement; -export type TaggedTemplateExpression = - | ESTree.TaggedTemplateExpression - | Babel.TaggedTemplateExpression - | TSESTree.TaggedTemplateExpression; -export type Literal = ESTree.Literal | Babel.Literal | TSESTree.Literal; + | TSESTree.Expression +) & + AdditionalFields; -export type Comment = AnyComment & { - printed?: boolean; - trailing?: boolean; - leading?: boolean; -}; +export type BindExpression = Babel.BindExpression & WithExtra & WithComments; -export type TemplateLiteral = AnyTemplateLiteral & { - extra?: any; - comments?: Comment[]; - trailingComments?: ReadonlyArray; - leadingComments?: ReadonlyArray; -}; +export type Property = (ESTree.Property | Babel.Property | TSESTree.Property) & + AdditionalFields; -export type Node = AnyNode & { - extra?: any; - comments?: Comment[]; - trailingComments?: ReadonlyArray; -}; +export type ClassPrivateProperty = Babel.ClassPrivateProperty & + AdditionalFields; + +export type ObjectTypeProperty = Babel.ObjectTypeProperty & AdditionalFields; + +export type JSXElement = (Babel.JSXElement | TSESTree.JSXElement) & + AdditionalFields; + +export type TaggedTemplateExpression = ( + | ESTree.TaggedTemplateExpression + | Babel.TaggedTemplateExpression + | TSESTree.TaggedTemplateExpression +) & + AdditionalFields; + +export type Literal = (ESTree.Literal | Babel.Literal | TSESTree.Literal) & + AdditionalFields; export { ESTree, Babel, TSESTree, NGTree }; From 435b9c3e92d901d02cd07bc66f0466b13e577903 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Wed, 12 Aug 2020 00:08:47 -0400 Subject: [PATCH 66/71] fixup! add extra & comment fields to all exported AST node types in ast.d.ts --- src/language-js/types/ast.d.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/language-js/types/ast.d.ts b/src/language-js/types/ast.d.ts index 163c8fe48dbb..b9f474afb87b 100644 --- a/src/language-js/types/ast.d.ts +++ b/src/language-js/types/ast.d.ts @@ -31,7 +31,7 @@ type AdditionalFields = { type ASTNode = ESTree.Node | Babel.Node | TSESTree.Node | NGTree.NGNode; -export type Node = ASTNode & WithExtra & WithComments; +export type Node = ASTNode & AdditionalFields; export type TemplateLiteral = ( | ESTree.TemplateLiteral @@ -73,7 +73,7 @@ export type Expression = ( ) & AdditionalFields; -export type BindExpression = Babel.BindExpression & WithExtra & WithComments; +export type BindExpression = Babel.BindExpression & AdditionalFields; export type Property = (ESTree.Property | Babel.Property | TSESTree.Property) & AdditionalFields; From cd5284210ffdf53a4ee8ae879bfcaa3759899c00 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Wed, 12 Aug 2020 00:47:40 -0400 Subject: [PATCH 67/71] Revert "rename estree.d.ts -> ast.d.ts in src/language-js/types" This reverts commit ea689167ebfd0af104c229fbd1844daf83f79e7b. --- .../types/{ast.d.ts => estree.d.ts} | 0 src/language-js/utils.js | 26 +++++++++---------- 2 files changed, 13 insertions(+), 13 deletions(-) rename src/language-js/types/{ast.d.ts => estree.d.ts} (100%) diff --git a/src/language-js/types/ast.d.ts b/src/language-js/types/estree.d.ts similarity index 100% rename from src/language-js/types/ast.d.ts rename to src/language-js/types/estree.d.ts diff --git a/src/language-js/utils.js b/src/language-js/utils.js index e2e0f9ad7973..9e9a5674443d 100644 --- a/src/language-js/utils.js +++ b/src/language-js/utils.js @@ -12,19 +12,19 @@ const { const handleComments = require("./comments"); /** - * @typedef {import("./types/ast").Node} Node - * @typedef {import("./types/ast").TemplateLiteral} TemplateLiteral - * @typedef {import("./types/ast").Comment} Comment - * @typedef {import("./types/ast").MemberExpression} MemberExpression - * @typedef {import("./types/ast").OptionalMemberExpression} OptionalMemberExpression - * @typedef {import("./types/ast").CallExpression} CallExpression - * @typedef {import("./types/ast").OptionalCallExpression} OptionalCallExpression - * @typedef {import("./types/ast").Expression} Expression - * @typedef {import("./types/ast").Property} Property - * @typedef {import("./types/ast").ObjectTypeProperty} ObjectTypeProperty - * @typedef {import("./types/ast").JSXElement} JSXElement - * @typedef {import("./types/ast").TaggedTemplateExpression} TaggedTemplateExpression - * @typedef {import("./types/ast").Literal} Literal + * @typedef {import("./types/estree").Node} Node + * @typedef {import("./types/estree").TemplateLiteral} TemplateLiteral + * @typedef {import("./types/estree").Comment} Comment + * @typedef {import("./types/estree").MemberExpression} MemberExpression + * @typedef {import("./types/estree").OptionalMemberExpression} OptionalMemberExpression + * @typedef {import("./types/estree").CallExpression} CallExpression + * @typedef {import("./types/estree").OptionalCallExpression} OptionalCallExpression + * @typedef {import("./types/estree").Expression} Expression + * @typedef {import("./types/estree").Property} Property + * @typedef {import("./types/estree").ObjectTypeProperty} ObjectTypeProperty + * @typedef {import("./types/estree").JSXElement} JSXElement + * @typedef {import("./types/estree").TaggedTemplateExpression} TaggedTemplateExpression + * @typedef {import("./types/estree").Literal} Literal * * @typedef {import("../common/fast-path")} FastPath */ From 5414a629cbe40cf9489bcc901d0ba26a81dccb18 Mon Sep 17 00:00:00 2001 From: fisker Date: Wed, 12 Aug 2020 19:05:29 +0800 Subject: [PATCH 68/71] Add types to `Node.extra`, remove internal types --- src/language-js/types/estree.d.ts | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/src/language-js/types/estree.d.ts b/src/language-js/types/estree.d.ts index b9f474afb87b..2be273170609 100644 --- a/src/language-js/types/estree.d.ts +++ b/src/language-js/types/estree.d.ts @@ -11,27 +11,25 @@ declare module "typescript" { type NamedTupleMember = Node; } -type ASTComment = ESTree.Comment | Babel.Comment | TSESTree.Comment; +type AdditionalFields = { + extra?: { + parenthesized?: boolean; + parenStart?: number; + raw?: string; + }; + comments?: Comment[]; + trailingComments?: ReadonlyArray | Comment[]; + leadingComments?: ReadonlyArray | Comment[]; +}; -export type Comment = ASTComment & { +export type Comment = (ESTree.Comment | Babel.Comment | TSESTree.Comment) & { printed?: boolean; trailing?: boolean; leading?: boolean; }; -type NodeComments = { - comments?: Comment[]; - trailingComments?: ReadonlyArray; - leadingComments?: ReadonlyArray; -}; - -type AdditionalFields = { - extra?: any; -} & NodeComments; - -type ASTNode = ESTree.Node | Babel.Node | TSESTree.Node | NGTree.NGNode; - -export type Node = ASTNode & AdditionalFields; +export type Node = (ESTree.Node | Babel.Node | TSESTree.Node | NGTree.NGNode) & + AdditionalFields; export type TemplateLiteral = ( | ESTree.TemplateLiteral From c6662a6166710da6db47670591e58373b0df6dd3 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Tue, 18 Aug 2020 13:05:29 -0400 Subject: [PATCH 69/71] update @types/node -> 14.6.0 in devDependencies --- package.json | 2 +- yarn.lock | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 26c90c8db84b..0819fd41b8f9 100644 --- a/package.json +++ b/package.json @@ -94,7 +94,7 @@ "@rollup/plugin-node-resolve": "9.0.0", "@rollup/plugin-replace": "2.3.3", "@types/estree": "0.0.45", - "@types/node": "14.0.27", + "@types/node": "14.6.0", "@typescript-eslint/types": "3.9.0", "babel-loader": "8.1.0", "benchmark": "2.1.4", diff --git a/yarn.lock b/yarn.lock index 664baba55af9..c32e9e73703a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1358,10 +1358,10 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.14.tgz#24a0b5959f16ac141aeb0c5b3cd7a15b7c64cbce" integrity sha512-syUgf67ZQpaJj01/tRTknkMNoBBLWJOBODF0Zm4NrXmiSuxjymFrxnTu1QVYRubhVkRcZLYZG8STTwJRdVm/WQ== -"@types/node@14.0.27": - version "14.0.27" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.27.tgz#a151873af5a5e851b51b3b065c9e63390a9e0eb1" - integrity sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g== +"@types/node@14.6.0": + version "14.6.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.6.0.tgz#7d4411bf5157339337d7cff864d9ff45f177b499" + integrity sha512-mikldZQitV94akrc4sCcSjtJfsTKt4p+e/s0AGscVA6XArQ9kFclP+ZiYUMnq987rc6QlYxXv/EivqlfSLxpKA== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -1417,16 +1417,16 @@ eslint-scope "^5.0.0" eslint-utils "^2.0.0" -"@typescript-eslint/types@3.9.1": - version "3.9.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.9.1.tgz#b2a6eaac843cf2f2777b3f2464fb1fbce5111416" - integrity sha512-15JcTlNQE1BsYy5NBhctnEhEoctjXOjOK+Q+rk8ugC+WXU9rAcS2BYhoh6X4rOaXJEpIYDl+p7ix+A5U0BqPTw== - "@typescript-eslint/types@3.9.0": version "3.9.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.9.0.tgz#be9d0aa451e1bf3ce99f2e6920659e5b2e6bfe18" integrity sha512-rb6LDr+dk9RVVXO/NJE8dT1pGlso3voNdEIN8ugm4CWM5w5GimbThCMiMl4da1t5u3YwPWEwOnKAULCZgBtBHg== +"@typescript-eslint/types@3.9.1": + version "3.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.9.1.tgz#b2a6eaac843cf2f2777b3f2464fb1fbce5111416" + integrity sha512-15JcTlNQE1BsYy5NBhctnEhEoctjXOjOK+Q+rk8ugC+WXU9rAcS2BYhoh6X4rOaXJEpIYDl+p7ix+A5U0BqPTw== + "@typescript-eslint/typescript-estree@2.34.0": version "2.34.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz#14aeb6353b39ef0732cc7f1b8285294937cf37d5" From 83bd9569ad47984a22eee350c3b05326e8faa903 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Tue, 18 Aug 2020 13:09:28 -0400 Subject: [PATCH 70/71] update @typescript-eslint/types -> 3.9.1 in devDependencies --- package.json | 2 +- yarn.lock | 5 ----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/package.json b/package.json index 0819fd41b8f9..7b9b776fdcc4 100644 --- a/package.json +++ b/package.json @@ -95,7 +95,7 @@ "@rollup/plugin-replace": "2.3.3", "@types/estree": "0.0.45", "@types/node": "14.6.0", - "@typescript-eslint/types": "3.9.0", + "@typescript-eslint/types": "3.9.1", "babel-loader": "8.1.0", "benchmark": "2.1.4", "builtin-modules": "3.1.0", diff --git a/yarn.lock b/yarn.lock index c32e9e73703a..aa61b3281c50 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1417,11 +1417,6 @@ eslint-scope "^5.0.0" eslint-utils "^2.0.0" -"@typescript-eslint/types@3.9.0": - version "3.9.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.9.0.tgz#be9d0aa451e1bf3ce99f2e6920659e5b2e6bfe18" - integrity sha512-rb6LDr+dk9RVVXO/NJE8dT1pGlso3voNdEIN8ugm4CWM5w5GimbThCMiMl4da1t5u3YwPWEwOnKAULCZgBtBHg== - "@typescript-eslint/types@3.9.1": version "3.9.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.9.1.tgz#b2a6eaac843cf2f2777b3f2464fb1fbce5111416" From 534649835ffa32ea83116346fe0fc9df2afef0f1 Mon Sep 17 00:00:00 2001 From: "Christopher J. Brody" Date: Wed, 19 Aug 2020 14:08:24 -0400 Subject: [PATCH 71/71] Revert "fix(types): remove extra args from internal plusOne & plusTwo calls", to avoid a merge conflict from master This reverts commit d307f74ca8488a9713ff2c3f2ed47daf85a6e9f1. --- src/language-js/utils.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/language-js/utils.js b/src/language-js/utils.js index 9e9a5674443d..352f77dc5585 100644 --- a/src/language-js/utils.js +++ b/src/language-js/utils.js @@ -1150,7 +1150,7 @@ function isSimpleCallArgument(node, depth) { } if (node.type === "ImportExpression") { - return plusTwo(node.source); + return plusTwo(node.source, depth); } if ( @@ -1158,25 +1158,25 @@ function isSimpleCallArgument(node, depth) { node.type === "OptionalCallExpression" || node.type === "NewExpression" ) { - return plusOne(node.callee) && node.arguments.every(plusTwo); + return plusOne(node.callee, depth) && node.arguments.every(plusTwo); } if ( node.type === "MemberExpression" || node.type === "OptionalMemberExpression" ) { - return plusOne(node.object) && plusOne(node.property); + return plusOne(node.object, depth) && plusOne(node.property, depth); } if ( node.type === "UnaryExpression" && (node.operator === "!" || node.operator === "-") ) { - return plusOne(node.argument); + return plusOne(node.argument, depth); } if (node.type === "TSNonNullExpression") { - return plusOne(node.expression); + return plusOne(node.expression, depth); } return false;