mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-24 21:20:11 +01:00
The diagnostics documentation covers how a diagnostic is produced and worded, not the form it takes on a terminal. This adds `toolchain/docs/diagnostics_rendering.md`: what a diagnostic is made of, its layout, color, character set, and width, and how each degrades when the terminal can't render it. A diagnostic is one message plus labels read against the code they mark, `Primary` or `Info`; a context and a path are set out apart. It renders as one frame, anchored per file, with no headline: the message hangs off the range that is wrong, led by the level word on a heavy mark, with `->` in the margin on the reported lines. Labels read in the order of their ranges, connectors that cross earlier rows break around them, and a path draws only for the message's own location. Ten rows on the shared example, against Clang's six and rustc's eleven. Nothing a diagnostic says is dropped for width: source is windowed, words wrap past the level word, connectors slide, and a label that still can't hang is out-dented. Under sixty columns the compact form takes over, one located line per part. Color is named per element with a ramp per level and a light-background palette; ASCII keeps every distinction with `^`, `.`, and the level word. The `file:line:column:` header is the road not taken: structure comes from the language server, and the compact form covers a grep-able line. Assisted-by: Claude Code --------- Co-authored-by: Richard Smith <richard@metafoo.co.uk>