sortier
Version:
An opinionated code sorter
27 lines (26 loc) • 1.22 kB
JavaScript
import { compare, getContextGroups, reorderValues } from "../../utilities/sort-utils.js";
import { getSpreadGroups } from "../utilities/sort-utils.js";
export function sortJsxElement(jsxElement, comments, fileContents,
// Left in for consistency with other sort functions
// eslint-disable-next-line @typescript-eslint/no-unused-vars
options) {
if (jsxElement.openingElement == null) {
// Fragment element
return fileContents;
}
let newFileContents = fileContents.slice();
const allNodes = jsxElement.openingElement.attributes;
// Any time there is a spread operator, we need to sort around it... moving it could cause functionality changes
const spreadGroups = getSpreadGroups(allNodes);
for (const nodes of spreadGroups) {
const groupings = getContextGroups(nodes, comments, fileContents);
groupings.forEach((element) => {
const unsorted = element.nodes;
const sorted = element.nodes.slice().sort((a, b) => {
return compare(a.name.name, b.name.name);
});
newFileContents = reorderValues(newFileContents, element.comments, unsorted, sorted);
});
}
return newFileContents;
}