UNPKG

eslint-plugin-import-sorting

Version:

ESLint plugin to group and sort imports by module, à la Python isort

61 lines (60 loc) 2.09 kB
import { getNodeRange } from "./get-node-range.js"; import { makeCommentAfterFixes } from "./make-comment-after-fixes.js"; function makeFixes({ fixer, nodes, sortedNodes, sourceCode, ignoreFirstNodeHighestBlockComment }) { let fixes = []; for (let max = nodes.length, index = 0; index < max; index++) { let sortingNode = nodes.at(index); let sortedSortingNode = sortedNodes.at(index); let { node } = sortingNode; let { shouldAddSafetySemicolonWhenInline, node: sortedNode } = sortedSortingNode; let isNodeFirstNode = node === nodes.at(0).node; let isSortedNodeFirstNode = sortedNode === nodes.at(0).node; if (node === sortedNode) { continue; } let sortedNodeCode = sourceCode.text.slice( ...getNodeRange(sortedNode, sourceCode, { ignoreHighestBlockComment: ignoreFirstNodeHighestBlockComment && isSortedNodeFirstNode }) ); let sortedNodeText = sourceCode.getText(sortedNode); let tokensAfter = sourceCode.getTokensAfter(node, { includeComments: false, count: 1 }); let nextToken = tokensAfter.at(0); let willSortedNextNodeEndWithSafeCharacter = sortedNodeText.endsWith(";") || sortedNodeText.endsWith(","); let isNextTokenOnSameLineAsNode = (nextToken == null ? void 0 : nextToken.loc.start.line) === node.loc.end.line; let isNextTokenSafeCharacter = (nextToken == null ? void 0 : nextToken.value) === ";" || (nextToken == null ? void 0 : nextToken.value) === ","; if (shouldAddSafetySemicolonWhenInline && isNextTokenOnSameLineAsNode && !willSortedNextNodeEndWithSafeCharacter && !isNextTokenSafeCharacter) { sortedNodeCode += ";"; } fixes.push( fixer.replaceTextRange( getNodeRange(node, sourceCode, { ignoreHighestBlockComment: ignoreFirstNodeHighestBlockComment && isNodeFirstNode }), sortedNodeCode ) ); fixes = [ ...fixes, ...makeCommentAfterFixes({ fixer, node, sortedNode, sourceCode }) ]; } return fixes; } export { makeFixes };