eslint-plugin-import-sorting
Version:
ESLint plugin to group and sort imports by module, à la Python isort
40 lines (39 loc) • 1.79 kB
JavaScript
import { ASTUtils, AST_TOKEN_TYPES } from "@typescript-eslint/utils";
import { getCommentsBefore } from "./get-comment.js";
import { getEslintDisabledRules } from "./get-eslint-disabled-rules.js";
function getNodeRange(node, sourceCode, additionalOptions) {
let start = node.range.at(0);
let end = node.range.at(1);
sourceCode.text.slice(start, end);
if (ASTUtils.isParenthesized(node, sourceCode)) {
let bodyOpeningParen = sourceCode.getTokenBefore(node, ASTUtils.isOpeningParenToken);
let bodyClosingParen = sourceCode.getTokenAfter(node, ASTUtils.isClosingParenToken);
start = bodyOpeningParen.range.at(0);
end = bodyClosingParen.range.at(1);
}
let comments = getCommentsBefore(node, sourceCode);
let highestBlockComment = comments.find((comment) => comment.type === AST_TOKEN_TYPES.Block);
let relevantTopComment;
for (let index = comments.length - 1; index >= 0; index--) {
let comment = comments[index];
let eslintDisabledRules = getEslintDisabledRules(comment.value);
if ((eslintDisabledRules == null ? void 0 : eslintDisabledRules.eslintDisableDirective) === "eslint-disable" || (eslintDisabledRules == null ? void 0 : eslintDisabledRules.eslintDisableDirective) === "eslint-enable") {
break;
}
let previousCommentOrNodeStartLine = index === comments.length - 1 ? node.loc.start.line : comments[index + 1].loc.start.line;
if (comment.loc.end.line !== previousCommentOrNodeStartLine - 1) {
break;
}
if ((additionalOptions == null ? void 0 : additionalOptions.ignoreHighestBlockComment) && comment === highestBlockComment) {
break;
}
relevantTopComment = comment;
}
if (relevantTopComment) {
start = relevantTopComment.range.at(0);
}
return [start, end];
}
export {
getNodeRange
};