diff --git a/src/language-js/loc.js b/src/language-js/loc.js index 139dabc3a..d6409ca92 100644 --- a/src/language-js/loc.js +++ b/src/language-js/loc.js @@ -25,21 +25,6 @@ function locEnd(node) { return node.typeAnnotation ? Math.max(end, locEnd(node.typeAnnotation)) : end; } -/** - * @param {Node} startNode - * @param {Node | number} endNodeOrLength - * @returns {number[]} - */ -function composeLoc(startNode, endNodeOrLength = startNode) { - const start = locStart(startNode); - const end = - typeof endNodeOrLength === "number" - ? start + endNodeOrLength - : locEnd(endNodeOrLength); - - return [start, end]; -} - /** * @param {Node} nodeA * @param {Node} nodeB @@ -70,7 +55,6 @@ function hasSameLoc(nodeA, nodeB) { module.exports = { locStart, locEnd, - composeLoc, hasSameLocStart, hasSameLoc, }; diff --git a/src/language-js/parse-postprocess.js b/src/language-js/parse-postprocess.js index 0d8c34733..be9dcd9dd 100644 --- a/src/language-js/parse-postprocess.js +++ b/src/language-js/parse-postprocess.js @@ -6,7 +6,7 @@ const { getShebang, } = require("../common/util"); const createError = require("../common/parser-create-error"); -const { composeLoc, locStart, locEnd } = require("./loc"); +const { locStart, locEnd } = require("./loc"); const { isTypeCastComment } = require("./comments"); function postprocess(ast, options) { @@ -126,7 +126,7 @@ function postprocess(ast, options) { } // remove redundant TypeScript nodes case "TSParenthesizedType": { - node.typeAnnotation.range = composeLoc(node); + node.typeAnnotation.range = [locStart(node), locEnd(node)]; return node.typeAnnotation; } case "TSUnionType": @@ -134,26 +134,28 @@ function postprocess(ast, options) { if (node.types.length === 1) { const [firstType] = node.types; // override loc, so that comments are attached properly - firstType.range = composeLoc(node); + firstType.range = [locStart(node), locEnd(node)]; return firstType; } break; case "TSTypeParameter": // babel-ts if (typeof node.name === "string") { + const start = locStart(node); node.name = { type: "Identifier", name: node.name, - range: composeLoc(node, node.name.length), + range: [start, start + node.name.length], }; } break; case "SequenceExpression": { // Babel (unlike other parsers) includes spaces and comments in the range. Let's unify this. const lastExpression = getLast(node.expressions); - if (locEnd(node) > locEnd(lastExpression)) { - node.range = composeLoc(node, lastExpression); - } + node.range = [ + locStart(node), + Math.min(locEnd(lastExpression), locEnd(node)), + ]; break; } case "ClassProperty": @@ -183,7 +185,10 @@ function postprocess(ast, options) { if (options.originalText[locEnd(toOverrideNode)] === ";") { return; } - toBeOverriddenNode.range = composeLoc(toBeOverriddenNode, toOverrideNode); + toBeOverriddenNode.range = [ + locStart(toBeOverriddenNode), + locEnd(toOverrideNode), + ]; } } @@ -253,10 +258,10 @@ function rebalanceLogicalTree(node) { operator: node.operator, left: node.left, right: node.right.left, - range: composeLoc(node.left, node.right.left), + range: [locStart(node.left), locEnd(node.right.left)], }), right: node.right.right, - range: composeLoc(node), + range: [locStart(node), locEnd(node)], }); }