Native API: formatDiagnosticsWithColorAndContext drops related information without a file location

Ouverte Adaptée aux débutants
#65,087 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

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
75/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
node.js, typescript
Domaine
api

Piste de recherche

Le bogue se trouve dans packages/typescript/src/api/diagnosticFormatter.ts, où l'appel flattenDiagnosticMessage(related, ...) se situe dans une branche if (related.fileName && related.startPosition). Exécute le script de reproduction de l'issue pour confirmer que le texte associé est absent. C'est terminé lorsque le texte associé apparaît pour les diagnostics sans emplacement, tandis que l'en-tête d'emplacement et le contexte source restent conditionnés à la présence d'un fichier. Ajoute un test de régression à côté des tests existants du formateur.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

🔎 Search Terms

formatDiagnosticsWithColorAndContext, relatedInformation, fileless diagnostic, missing related diagnostic text, diagnosticFormatter

🕗 Version & Regression Information

Reproduced against main at 6161772c1370bdd4a82f808e6823bd755eb1870d using Node.js v24.14.0. The same conditional is still present on current main.

The TypeScript 6.0.3 implementation outputs related diagnostic text outside the if (file) branch; the native API implementation only outputs it inside the location branch.

⏯ Playground Link

Not applicable: this exercises the diagnostic formatting API.

💻 Code

Save as repro.mts at the repository root and run node repro.mts with Node.js 24. This calls the formatter directly with a diagnostic containing a related message without a file location.

import { formatDiagnosticsWithColorAndContext } from "./packages/typescript/src/api/diagnosticFormatter.ts";

const host = {
    getCurrentDirectory: () => "/project",
    getCanonicalFileName: (name: string) => name,
    getNewLine: () => "\n",
};

const output = formatDiagnosticsWithColorAndContext([{
    category: 1,
    code: 2322,
    pos: 0,
    end: 0,
    text: "Primary error.",
    relatedInformation: [{
        category: 3,
        code: 9999,
        pos: 0,
        end: 0,
        text: "This related explanation must remain visible.",
    }],
}], host);

console.log(JSON.stringify(output.replace(/\x1b\[[0-9;]*m/g, "")));
🙁 Actual behavior

The related explanation disappears:

"error TS2322: Primary error.\n"

Adding fileName: "/project/a.ts" and startPosition: { line: 0, character: 0 } to the related diagnostic makes its text appear.

🙂 Expected behavior

The related explanation should be included even when it has no file location. Only the location heading and source context depend on a location.

Additional information about the issue

In diagnosticFormatter.ts, the call to flattenDiagnosticMessage(related, ...) is inside if (related.fileName && related.startPosition). This also drops message chains on locationless related diagnostics.

The diagnostic response type permits omitted file names and positions. In the 6.0.3 formatter, related message text is emitted independently of the file check.

The reproduction uses constructed diagnostic objects to isolate the formatter behavior. Existing formatter tests cover related information with a location.

I would be happy to submit a focused fix and regression tests once this is triaged.

Langage dominant
Go
Étoiles
112k
Forks
15.4k
Merge moyen
3 j 6 h
PR mergées (30 j)
136

Préparer son environnement

Ouvrir dans Codespaces

Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de microsoft/TypeScript

Toutes les issues de microsoft/TypeScript

Issues similaires

Plus d'issues Go

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.