Native API: formatDiagnosticsWithColorAndContext drops related information without a file location

Đang mở Phù hợp với người mới
#65,087 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

@timurzvural đang làm issue này rồi.

Từ ngày 2/11/2026.

  • #65112 của @timurzvural — đang mở

Đánh giá

Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
75/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
node.js, typescript
Lĩnh vực
api

Hướng nghiên cứu

Lỗi nằm trong packages/typescript/src/api/diagnosticFormatter.ts, nơi lệnh gọi flattenDiagnosticMessage(related, ...) nằm trong nhánh if (related.fileName && related.startPosition). Chạy script tái hiện trong issue để xác nhận văn bản liên quan đang bị thiếu. Việc hoàn thành khi văn bản liên quan xuất hiện với các chẩn đoán không có vị trí, trong khi tiêu đề vị trí và ngữ cảnh mã nguồn vẫn phụ thuộc vào có tệp hay không. Thêm một bài kiểm thử hồi quy bên cạnh các bài kiểm thử formatter hiện có.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

🔎 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.

Ngôn ngữ chính
Go
Star
112k
Fork
15.4k
Merge trung bình
2 ngày 21 giờ
Pull request đã merge (30 ngày)
126

Chuẩn bị môi trường

Mở trong Codespaces

Khởi chạy dev container của dự án ngay trên trình duyệt, bằng tài khoản GitHub của bạn.

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của microsoft/TypeScript

Tất cả issue của microsoft/TypeScript

Issue tương tự

Thêm issue về Go

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.