Description
This issue tracks a couple of different useful ideas for making diagnostics "richer" for display purposes. We've wanted some of these for a while, and they're partially inspired by testing tools like Jest and Mocha. We've also seen tools like Rust, Rome, and Flow prove them out to some extent.
Long-term, you could imagine them being interactive with the a richer compiler client.
Printing Messages Across Lines
Types can get unwieldy, and displaying them inline makes it harder to see where things begin/end.
Type
{ x: string, y: number }
is not assignable to
{ x: string, y: string }
Notice no punctuation at the end. Not sure if we can generalize messages that way.
Also not sure how this plays well with
- tools that parse our output.
- diagnostic elaborations
Highlighted Spans in Messages
Imagine being able to highlight individual sections inside of types to indicate where the issue occurs.
vvvvvvvvvvv
Type '{ a: string; b: number; c: boolean; }' is not assignable to type '{ a: string; b: number; }'.
^^^^^^^^^^^
Object literal may only specify known properties, and 'c' does not exist in type '{ a: string; b: number; }'.
Diff Highlighting in Messages
Basically imagine red being the provided color, with green being an expected color.
Type '[string, number, boolean]' is not assignable to type '[string, string, boolean]'.
^^^^^^ ^^^^^^
rrrrrr gggggg