Auto merge of #126597 - estebank:unicode-output, r=fmease

Add Unicode block-drawing compiler output support

Add nightly-only theming support to rustc output using Unicode box
drawing characters instead of ASCII-art to draw the terminal UI.

In order to enable, the flags `-Zunstable-options=yes --error-format=human-unicode` must be passed in.

After:

```
error: foo
  ╭▸ test.rs:3:3
  │
3 │       X0 Y0 Z0
  │   ┌───╿──│──┘
  │  ┌│───│──┘
  │ ┏││━━━┙
  │ ┃││
4 │ ┃││   X1 Y1 Z1
5 │ ┃││   X2 Y2 Z2
  │ ┃│└────╿──│──┘ `Z` label
  │ ┃└─────│──┤
  │ ┗━━━━━━┥  `Y` is a good letter too
  │        `X` is a good letter
  ╰╴
note: bar
  ╭▸ test.rs:4:3
  │
4 │ ┏   X1 Y1 Z1
5 │ ┃   X2 Y2 Z2
6 │ ┃   X3 Y3 Z3
  │ ┗━━━━━━━━━━┛
  ├ note: bar
  ╰ note: baz
note: qux
  ╭▸ test.rs:4:3
  │
4 │   X1 Y1 Z1
  ╰╴  ━━━━━━━━
```

Before:

```
error: foo
 --> test.rs:3:3
  |
3 |       X0 Y0 Z0
  |    ___^__-__-
  |   |___|__|
  |  ||___|
  | |||
4 | |||   X1 Y1 Z1
5 | |||   X2 Y2 Z2
  | |||____^__-__- `Z` label
  | ||_____|__|
  | |______|  `Y` is a good letter too
  |        `X` is a good letter
  |
note: bar
 --> test.rs:4:3
  |
4 | /   X1 Y1 Z1
5 | |   X2 Y2 Z2
6 | |   X3 Y3 Z3
  | |__________^
  = note: bar
  = note: baz
note: qux
 --> test.rs:4:3
  |
4 |   X1 Y1 Z1
  |   ^^^^^^^^
```

After:

![rustc output with unicode box drawing characters](https://github.com/rust-lang/rust/assets/1606434/d210b79a-6579-4407-9706-ba8edc6e9f25)

Before:
![current rustc output with ASCII art](https://github.com/rust-lang/rust/assets/1606434/5aecccf8-a6ee-4469-8b39-72fb0d979a9f)
This commit is contained in:
bors 2024-11-11 00:00:58 +00:00
commit e2962cc079
6 changed files with 28 additions and 28 deletions

View file

@ -3,7 +3,7 @@ error: empty line after doc comment
|
LL | / /// for the crate
LL | |
| |_
| |_^
LL | fn first_in_crate() {}
| ------------------- the comment documents this function
|
@ -22,7 +22,7 @@ error: empty line after doc comment
|
LL | / /// for the module
LL | |
| |_
| |_^
LL | fn first_in_module() {}
| -------------------- the comment documents this function
|
@ -39,7 +39,7 @@ error: empty line after doc comment
|
LL | / /// # Indented
LL | |
| |_
| |_^
LL | /// Blank line
LL | fn indented() {}
| ------------- the comment documents this function
@ -55,7 +55,7 @@ error: empty line after doc comment
|
LL | / /// This should produce a warning
LL | |
| |_
| |_^
LL | fn with_doc_and_newline() {}
| ------------------------- the comment documents this function
|
@ -69,7 +69,7 @@ LL | |
LL | | /** This is also a doc comment and is part of the warning
LL | | */
LL | |
| |_
| |_^
...
LL | fn three_attributes() {}
| --------------------- the comment documents this function
@ -82,7 +82,7 @@ error: empty line after doc comment
LL | / /// docs for `old_code`
LL | | // fn old_code() {}
LL | |
| |_
| |_^
LL | fn new_code() {}
| ------------- the comment documents this function
|
@ -102,7 +102,7 @@ LL | | /// Docs
LL | | /// for OldB
LL | | // struct OldB;
LL | |
| |_
| |_^
...
LL | struct Multiple;
| --------------- the comment documents this struct
@ -125,7 +125,7 @@ LL | / /**
LL | | * Meant to be inner doc comment
LL | | */
LL | |
| |_
| |_^
LL | fn first_in_module() {}
| -------------------- the comment documents this function
|
@ -143,7 +143,7 @@ LL | | * Docs for `old_code`
LL | | */
LL | | /* fn old_code() {} */
LL | |
| |_
| |_^
...
LL | fn new_code() {}
| ------------- the comment documents this function
@ -161,7 +161,7 @@ error: empty line after doc comment
LL | / /// Docs for `old_code2`
LL | | /* fn old_code2() {} */
LL | |
| |_
| |_^
LL | /// Docs for `new_code2`
LL | fn new_code2() {}
| -------------- the comment documents this function

View file

@ -3,7 +3,7 @@ error: empty line after outer attribute
|
LL | / #[crate_type = "lib"]
LL | |
| |_
| |_^
LL | fn first_in_crate() {}
| ------------------- the attribute applies to this function
|
@ -20,7 +20,7 @@ error: empty line after outer attribute
|
LL | / #[inline]
LL | |
| |_
| |_^
LL | /// some comment
LL | fn with_one_newline_and_comment() {}
| --------------------------------- the attribute applies to this function
@ -32,7 +32,7 @@ error: empty line after outer attribute
|
LL | / #[inline]
LL | |
| |_
| |_^
LL | fn with_one_newline() {}
| --------------------- the attribute applies to this function
|
@ -44,7 +44,7 @@ error: empty lines after outer attribute
LL | / #[crate_type = "lib"]
LL | |
LL | |
| |_
| |_^
LL | fn with_two_newlines() {}
| ---------------------- the attribute applies to this function
|
@ -59,7 +59,7 @@ error: empty line after outer attribute
|
LL | / #[doc = "doc attributes should be considered attributes"]
LL | |
| |_
| |_^
LL | enum Baz {
| -------- the attribute applies to this enum
|
@ -70,7 +70,7 @@ error: empty line after outer attribute
|
LL | / #[repr(C)]
LL | |
| |_
| |_^
LL | struct Foo {
| ---------- the attribute applies to this struct
|
@ -81,7 +81,7 @@ error: empty line after outer attribute
|
LL | / #[allow(dead_code)]
LL | |
| |_
| |_^
LL | mod foo {}
| ------- the attribute applies to this module
|
@ -93,7 +93,7 @@ error: empty line after outer attribute
LL | / #[inline]
LL | | // Still lint cases where the empty line does not immediately follow the attribute
LL | |
| |_
| |_^
LL | fn comment_before_empty_line() {}
| ------------------------------ the attribute applies to this function
|
@ -106,7 +106,7 @@ LL | / #[allow(unused)]
LL | |
LL | | // This comment is isolated
LL | |
| |_
| |_^
LL | pub fn isolated_comment() {}
| ------------------------- the attribute applies to this function
|

View file

@ -3,7 +3,7 @@ error: this item has comments with 4 forward slashes (`////`). These look like d
|
LL | / //// whoops
LL | | fn a() {}
| |_
| |_^
|
= note: `-D clippy::four-forward-slashes` implied by `-D warnings`
= help: to override `-D warnings` add `#[allow(clippy::four_forward_slashes)]`
@ -18,7 +18,7 @@ error: this item has comments with 4 forward slashes (`////`). These look like d
LL | / //// whoops
LL | | #[allow(dead_code)]
LL | | fn b() {}
| |_
| |_^
|
help: make this a doc comment by removing one `/`
|
@ -32,7 +32,7 @@ LL | / //// whoops
LL | | //// two borked comments!
LL | | #[track_caller]
LL | | fn c() {}
| |_
| |_^
|
help: turn these into doc comments by removing one `/`
|
@ -46,7 +46,7 @@ error: this item has comments with 4 forward slashes (`////`). These look like d
LL | / //// between attributes
LL | | #[allow(dead_code)]
LL | | fn g() {}
| |_
| |_^
|
help: make this a doc comment by removing one `/`
|
@ -58,7 +58,7 @@ error: this item has comments with 4 forward slashes (`////`). These look like d
|
LL | / //// not very start of contents
LL | | fn h() {}
| |_
| |_^
|
help: make this a doc comment by removing one `/`
|

View file

@ -3,7 +3,7 @@ error: this item has comments with 4 forward slashes (`////`). These look like d
|
LL | / //// borked doc comment on the first line. doesn't combust!
LL | | fn a() {}
| |_
| |_^
|
= note: `-D clippy::four-forward-slashes` implied by `-D warnings`
= help: to override `-D warnings` add `#[allow(clippy::four_forward_slashes)]`

View file

@ -6,7 +6,7 @@ LL | | /// A much longer explanation that goes into a lot more detail about
LL | | /// how the thing works, possibly with doclinks and so one,
LL | | /// and probably spanning a many rows. Blablabla, it needs to be over
LL | | /// 200 characters so I needed to write something longeeeeeeer.
| |_
| |_^
|
= note: `-D clippy::too-long-first-doc-paragraph` implied by `-D warnings`
= help: to override `-D warnings` add `#[allow(clippy::too_long_first_doc_paragraph)]`

View file

@ -23,7 +23,7 @@ error: first doc comment paragraph is too long
LL | / /// Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc turpis nunc, lacinia
LL | | /// a dolor in, pellentesque aliquet enim. Cras nec maximus sem. Mauris arcu libero,
LL | | /// gravida non lacinia at, rhoncus eu lacus.
| |_
| |_^
error: first doc comment paragraph is too long
--> tests/ui/too_long_first_doc_paragraph.rs:36:1
@ -32,7 +32,7 @@ LL | / /// Lorem
LL | | /// ipsum dolor sit amet, consectetur adipiscing elit. Nunc turpis nunc, lacinia
LL | | /// a dolor in, pellentesque aliquet enim. Cras nec maximus sem. Mauris arcu libero,
LL | | /// gravida non lacinia at, rhoncus eu lacus.
| |_
| |_^
error: aborting due to 3 previous errors