Skip to content

Commit f8eabbd

Browse files
committed
[Refactor] move collation normalization into getSorter()
1 parent dbb6506 commit f8eabbd

File tree

1 file changed

+16
-10
lines changed

1 file changed

+16
-10
lines changed

src/rules/order.js

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -242,10 +242,18 @@ function makeOutOfOrderReport(context, imported) {
242242
reportOutOfOrder(context, imported, outOfOrder, 'before');
243243
}
244244

245-
function getSorter(ascending) {
246-
const multiplier = ascending ? 1 : -1;
245+
function getSorter(alphabetizeOptions) {
246+
const multiplier = alphabetizeOptions.order === 'asc' ? 1 : -1;
247+
let collate;
248+
if (alphabetizeOptions.caseInsensitive) {
249+
if (alphabetizeOptions.caseFirst === 'lower') {
250+
collate = swapCase;
251+
} else {
252+
collate = (s) => String(s).toLowerCase();
253+
}
254+
}
247255

248-
return function importsSorter(importA, importB) {
256+
function importsSorter(importA, importB) {
249257
let result;
250258

251259
if (importA < importB) {
@@ -257,10 +265,12 @@ function getSorter(ascending) {
257265
}
258266

259267
return result * multiplier;
260-
};
268+
}
269+
return collate ? (a, b) => importsSorter(collate(a), collate(b)) : importsSorter;
261270
}
262271

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

281291
const groupRanks = Object.keys(groupedByRanks);
282292

283-
const sorterFn = getSorter(alphabetizeOptions.order === 'asc');
284-
const comparator =
285-
alphabetizeOptions.caseInsensitive === 'invert' ? (a, b) => sorterFn(swapCase(String(a)), swapCase(String(b)))
286-
: alphabetizeOptions.caseInsensitive ? (a, b) => sorterFn(String(a).toLowerCase(), String(b).toLowerCase())
287-
: (a, b) => sorterFn(a, b);
293+
const sorterFn = getSorter(alphabetizeOptions);
288294
// sort imports locally within their group
289295
groupRanks.forEach(function(groupRank) {
290-
groupedByRanks[groupRank].sort(comparator);
296+
groupedByRanks[groupRank].sort(sorterFn);
291297
});
292298

293299
// assign globally unique rank to each import

0 commit comments

Comments
 (0)