From 7f2ba08fb043b6927c94db817c60dbc8707a01ff Mon Sep 17 00:00:00 2001 From: Georgii Dolzhykov Date: Wed, 27 May 2020 11:48:02 +0300 Subject: [PATCH] refactor(range): minor cleanup (#8421) --- src/main/core.js | 3 +-- src/main/range-util.js | 61 +++++++++++++++++------------------------- 2 files changed, 26 insertions(+), 38 deletions(-) diff --git a/src/main/core.js b/src/main/core.js index 58ff4fa31..4881002bc 100644 --- a/src/main/core.js +++ b/src/main/core.js @@ -175,8 +175,7 @@ function formatRange(text, opts) { const { ast } = parsed; text = parsed.text; - const range = rangeUtil.calculateRange(text, opts, ast); - const { rangeStart, rangeEnd } = range; + const { rangeStart, rangeEnd } = rangeUtil.calculateRange(text, opts, ast); const rangeString = text.slice(rangeStart, rangeEnd); // Try to extend the range backwards to the beginning of the line. diff --git a/src/main/range-util.js b/src/main/range-util.js index 5a818029e..623e72f4d 100644 --- a/src/main/range-util.js +++ b/src/main/range-util.js @@ -43,32 +43,30 @@ function findSiblingAncestors(startNodeAndParents, endNodeAndParents, opts) { }; } -function findNodeAtOffset(node, offset, options, predicate, parentNodes) { - predicate = predicate || (() => true); - parentNodes = parentNodes || []; - const start = options.locStart(node, options.locStart); - const end = options.locEnd(node, options.locEnd); - if (start <= offset && offset <= end) { - for (const childNode of comments.getSortedChildNodes(node, options)) { - const childResult = findNodeAtOffset( - childNode, - offset, - options, - predicate, - [node].concat(parentNodes) - ); - if (childResult) { - return childResult; - } - } +function findNodeAtOffset(node, offset, options, predicate, parentNodes = []) { + if (offset < options.locStart(node) || offset > options.locEnd(node)) { + return; + } - if (predicate(node)) { - return { - node, - parentNodes, - }; + for (const childNode of comments.getSortedChildNodes(node, options)) { + const childResult = findNodeAtOffset( + childNode, + offset, + options, + predicate, + [node, ...parentNodes] + ); + if (childResult) { + return childResult; } } + + if (!predicate || predicate(node)) { + return { + node, + parentNodes, + }; + } } // See https://www.ecma-international.org/ecma-262/5.1/#sec-A.5 @@ -166,7 +164,7 @@ function calculateRange(text, opts, ast) { endNonWhitespace > opts.rangeStart; --endNonWhitespace ) { - if (text[endNonWhitespace - 1].match(/\S/)) { + if (/\S/.test(text[endNonWhitespace - 1])) { break; } } @@ -191,24 +189,15 @@ function calculateRange(text, opts, ast) { }; } - const siblingAncestors = findSiblingAncestors( + const { startNode, endNode } = findSiblingAncestors( startNodeAndParents, endNodeAndParents, opts ); - const { startNode, endNode } = siblingAncestors; - const rangeStart = Math.min( - opts.locStart(startNode, opts.locStart), - opts.locStart(endNode, opts.locStart) - ); - const rangeEnd = Math.max( - opts.locEnd(startNode, opts.locEnd), - opts.locEnd(endNode, opts.locEnd) - ); return { - rangeStart, - rangeEnd, + rangeStart: Math.min(opts.locStart(startNode), opts.locStart(endNode)), + rangeEnd: Math.max(opts.locEnd(startNode), opts.locEnd(endNode)), }; }