eslint-plugin-import-sorting
Version:
ESLint plugin to group and sort imports by module, à la Python isort
61 lines (60 loc) • 2.09 kB
JavaScript
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
};