Native tsc: merge conflict markers after U+2028/U+2029 are not recognized (false TS1109 instead of TS1185)
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 62/100
- Type d'issue
- Bug
- Clarté
- Clairement spécifiée
- Activité
- Active
- Stack technique
- go, typescript
- Domaine
- compilers
Piste de recherche
Le bogue se trouve dans isConflictMarkerTrivia dans tsc/internal/scanner/scanner.go, vers les lignes 2422–2425, où le repli en début de ligne décode text[:pos-2] au lieu de text[:pos]. Commence par reproduire le problème avec un U+2028 littéral avant <<<<<<< HEAD et vérifie que TS1109 apparaît à la place de TS1185. La correction consiste à décoder le rune précédent à partir de text[:pos] ; c'est terminé quand les cas LS et PS signalent TS1185, comme le contrôle LF/CR.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
🔎 Search Terms
merge conflict marker, TS1185, isConflictMarkerTrivia, U+2028, U+2029, line separator, paragraph separator, UTF-8
🕗 Version & Regression Information
- This changed between classic TypeScript 5.9.3 and native
tsc7.1.0-dev - Verified on current
main(Go / tsgo) - Markers after LF/CR still work; only LS/PS break recognition
⏯ Playground Link
N/A (needs a literal U+2028 / U+2029 in the source)
💻 Code
export {};
<<<<<<< HEAD
(U+2028 between {}; and <<<<<<<; same with U+2029. Also reproduces with ======= / >>>>>>>.)
tsc file.ts
Control (works on both):
export {};
<<<<<<< HEAD
🙁 Actual behavior
Native tsc treats the markers as ordinary tokens, e.g.:
error TS1109: Expression expected.
(and further cascade errors)
🙂 Expected behavior
Classic 5.9.3:
error TS1185: Merge conflict marker encountered.
Additional information about the issue
Root cause in tsc/internal/scanner/scanner.go (isConflictMarkerTrivia, ~2422–2425):
atLineStart := pos == 0 || stringutil.IsLineBreak(rune(text[pos-1]))
if !atLineStart && pos >= 2 {
prev, _ := utf8.DecodeLastRuneInString(text[:pos-2]) // should be text[:pos]
atLineStart = stringutil.IsLineBreak(prev)
}
After LS (E2 80 A8), text[pos-1] is 0xA8 (not a line break). The fallback decodes text[:pos-2] (ends at E2) instead of the full prior rune. Classic UTF-16 charCodeAt(pos-1) sees 0x2028 correctly.
Fix: utf8.DecodeLastRuneInString(text[:pos]).
Same UTF-8 line-break family as literal U+2028 in regex first-pass scanning.
- Langage dominant
- Go
- Étoiles
- 112k
- Forks
- 15.4k
- Merge moyen
- 3 j 1 h
- PR mergées (30 j)
- 136
Préparer son environnement
Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de microsoft/TypeScript
-
Native API: formatDiagnosticsWithColorAndContext drops related information without a file locationPeut-être pris @timurzvural l’a pris il y a 1 jour. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
microsoft/TypeScript#65087 ·
Les mainteneurs répondent en général sous 1 jour
-
TS7 LSP: documentHighlight returns nothing when the file path contains '@'Peut-être à nouveau libre Une pull request pour cette issue a été fermée sans être fusionnée. OuverteBug
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
microsoft/TypeScript#64758 ·
Les mainteneurs répondent en général sous 1 jour
-
Language server (tsc --lsp) exits with code 1 after `shutdown` and `exit`Peut-être pris @rajnish-verma-22172 l’a pris il y a 13 jours. OuverteBug
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
microsoft/TypeScript#64742 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Class names `eval` and `arguments` are not reported as invalid strict mode bindingsPeut-être pris @dmety l’a pris il y a 26 jours. OuverteBug
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
microsoft/TypeScript#64661 ·
Les mainteneurs répondent en général sous 1 jour
-
Non-enum CLI options with multiple values separated by comma and space aren't whitespace trimmedPeut-être pris @RyanCavanaugh l’a pris il y a 27 jours. OuverteBug
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
microsoft/TypeScript#64618 · 1 personne assignée ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de microsoft/TypeScript
Issues similaires
-
area: frontend priority: normal
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
TestAutonomousStop_ReportsObservedState fails under host load: 1s wall-clock ceiling vs 250ms cycleOuvertetype:bug
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
nightgauge/nightgauge#2909 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
jasonfen/terminal-space-program#842 ·
Les mainteneurs répondent en général sous 1 jour
-
enhancement good first issue
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
MustacheCase/zanadir#521 ·
Les mainteneurs répondent en général sous 1 jour
-
v3.1.0: spread placement groups fail — label key uses the reserved hetzner.cloud prefixPeut-être pris @ScrimReaper l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 86/100
stubbi/karpenter-provider-hetzner#120 ·
Les mainteneurs répondent en général sous 4 jours