refactor(okr): endelig sentinel for urangerte entries i akse-B-sammenligneren
`rankOf` returnerte Infinity for urangerte navn, så to urangerte ga Infinity - Infinity = NaN i sammenligneren. Det ga riktig resultat, men kun fordi NaN er falsy og faller gjennom til den alfabetiske sammenligneren -- en korrekt-ved-uhell-konstruksjon som neste leser lett ville "fikset" i feil retning. Erstattet med en endelig sentinel (MAX_SAFE_INTEGER) + begrunnelse. Ren lesbarhet; ingen oppførselsendring. Suite 187/187 uendret. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EaQkAtvpNCLxWkjdEJ11vx
This commit is contained in:
parent
3f4e89fe9b
commit
667b7037a1
1 changed files with 6 additions and 1 deletions
|
|
@ -144,9 +144,14 @@ function orderEntries(names, linkOf, existing, callerRank, dir) {
|
|||
const known = names.filter((n) => pos.has(linkOf(n)));
|
||||
const fresh = names.filter((n) => !pos.has(linkOf(n)));
|
||||
known.sort((a, b) => pos.get(linkOf(a)) - pos.get(linkOf(b)));
|
||||
// Urangert sorteres sist. Sentinelen er et ENDELIG tall, ikke Infinity: to
|
||||
// urangerte ville gitt Infinity - Infinity = NaN, som bare "virker" fordi NaN
|
||||
// er falsy og faller gjennom til den alfabetiske sammenligneren. Det er en
|
||||
// korrekt-ved-uhell-konstruksjon, og neste leser skal ikke behoeve aa se den.
|
||||
const UNRANKED = Number.MAX_SAFE_INTEGER;
|
||||
const rankOf = (n) => {
|
||||
const r = callerRank.get(resolve(dir, n));
|
||||
return r === undefined ? Infinity : r;
|
||||
return r === undefined ? UNRANKED : r;
|
||||
};
|
||||
fresh.sort((a, b) => (rankOf(a) - rankOf(b)) || (a < b ? -1 : a > b ? 1 : 0));
|
||||
return [...known, ...fresh];
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue