Voetnoot invoegen kan een bestaande ongebruikte definitie dupliceren #1658
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck#1658
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Probleem
nextFootnoteLabel zoekt definities met een regex die aan het begin van de volledige string is verankerd maar niet multiline is. Alleen een definitie op de allereerste regel wordt gevonden. Een bestaande, nog niet gerefereerde definitie verderop wordt gemist, waarna de invoegactie hetzelfde numerieke label kan kiezen en een dubbele definitie maakt.
Reproductie
Verwacht
Alle bestaande definities in alle regels reserveren hun label, ook als ze nog niet worden gerefereerd.
Technische aanwijzing
lib/utils/footnotes.dart:_definitionStart heeft ^ maar geen multiLine:true; nextFootnoteLabel gebruikt _definitionStart.allMatches(markdown).
Gevonden bij audit van commit
d439638c6b.Triage: accepted
Bevestigd tegen
main(e93ef205c).lib/utils/footnotes.dart—_definitionStartheeft wél^maar geenmultiLine: true.nextFootnoteLabeldraaitallMatchesover de héle documenttekst, dus alleen een definitie op regel 1 wordt gevonden. Verwijzingen komen wel binnen via_reference, dus dit bijt uitsluitend bij een definitie die (nog) nergens wordt aangehaald — precies het geval uit de reproductie.Oplossingsrichting
nextFootnoteLabeldezelfde regelscan laten gebruiken als de rest van dit bestand: over de regels lopen met de_fence-schakelaar, en labels verzamelen uit definitieregels búiten codehekken — zoalsstripFootnoteDefinitionsendocumentFootnoteshet al doen.Dat lost meteen een tweede, stillere fout op:
multiLine: trueop de bestaande regex zou een[^1]:ín een codeblok een label laten reserveren, en dat hoort juist níét. De regelscan houdt dat onderscheid.Regressietest (verplicht)
test/footnotes_test.dart:[^1]:op regel 5 →nextFootnoteLabel == '2';[^1]:binnen een ``` -hek →nextFootnoteLabel == '1';'3'.Kosten
Klein: één functie, drie tests.
Prioriteit
Middel: het resultaat is een document met twee definities voor hetzelfde label — kapot, en de gebruiker ziet het pas in de uitvoer.