Skip to content

Commit

Permalink
[Refactor] move collation normalization into getSorter()
Browse files Browse the repository at this point in the history
  • Loading branch information
forivall committed Mar 3, 2021
1 parent dbb6506 commit f8eabbd
Showing 1 changed file with 16 additions and 10 deletions.
26 changes: 16 additions & 10 deletions src/rules/order.js
Original file line number Diff line number Diff line change
Expand Up @@ -242,10 +242,18 @@ function makeOutOfOrderReport(context, imported) {
reportOutOfOrder(context, imported, outOfOrder, 'before');
}

function getSorter(ascending) {
const multiplier = ascending ? 1 : -1;
function getSorter(alphabetizeOptions) {
const multiplier = alphabetizeOptions.order === 'asc' ? 1 : -1;
let collate;
if (alphabetizeOptions.caseInsensitive) {
if (alphabetizeOptions.caseFirst === 'lower') {
collate = swapCase;
} else {
collate = (s) => String(s).toLowerCase();
}
}

return function importsSorter(importA, importB) {
function importsSorter(importA, importB) {
let result;

if (importA < importB) {
Expand All @@ -257,10 +265,12 @@ function getSorter(ascending) {
}

return result * multiplier;
};
}
return collate ? (a, b) => importsSorter(collate(a), collate(b)) : importsSorter;
}

function swapCase(input) {
input = String(input);
let result = '';
for (let i = 0; i < input.length; i++) {
const lower = input[i].toLowerCase();
Expand All @@ -280,14 +290,10 @@ function mutateRanksToAlphabetize(imported, alphabetizeOptions) {

const groupRanks = Object.keys(groupedByRanks);

const sorterFn = getSorter(alphabetizeOptions.order === 'asc');
const comparator =
alphabetizeOptions.caseInsensitive === 'invert' ? (a, b) => sorterFn(swapCase(String(a)), swapCase(String(b)))
: alphabetizeOptions.caseInsensitive ? (a, b) => sorterFn(String(a).toLowerCase(), String(b).toLowerCase())
: (a, b) => sorterFn(a, b);
const sorterFn = getSorter(alphabetizeOptions);
// sort imports locally within their group
groupRanks.forEach(function(groupRank) {
groupedByRanks[groupRank].sort(comparator);
groupedByRanks[groupRank].sort(sorterFn);
});

// assign globally unique rank to each import
Expand Down

0 comments on commit f8eabbd

Please sign in to comment.