From 9f0c6f15ce32661e65034898155fcdaa8539201e Mon Sep 17 00:00:00 2001 From: jyn Date: Fri, 8 Dec 2023 11:28:08 -0500 Subject: Simplify and comment the special-casing for Windows colors --- compiler/rustc_errors/src/emitter.rs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'compiler/rustc_errors/src') diff --git a/compiler/rustc_errors/src/emitter.rs b/compiler/rustc_errors/src/emitter.rs index ba9cd02a9ec..62aa8e602af 100644 --- a/compiler/rustc_errors/src/emitter.rs +++ b/compiler/rustc_errors/src/emitter.rs @@ -2674,6 +2674,14 @@ fn from_stderr(color: ColorConfig) -> Destination { } } +/// On Windows, BRIGHT_BLUE is hard to read on black. Use cyan instead. +/// +/// See #36178. +#[cfg(windows)] +const BRIGHT_BLUE: Color = Color::Cyan; +#[cfg(not(windows))] +const BRIGHT_BLUE: Color = Color::Blue; + impl Style { fn color_spec(&self, lvl: Level) -> ColorSpec { let mut spec = ColorSpec::new(); @@ -2688,11 +2696,7 @@ impl Style { Style::LineNumber => { spec.set_bold(true); spec.set_intense(true); - if cfg!(windows) { - spec.set_fg(Some(Color::Cyan)); - } else { - spec.set_fg(Some(Color::Blue)); - } + spec.set_fg(Some(BRIGHT_BLUE)); } Style::Quotation => {} Style::MainHeaderMsg => { @@ -2707,11 +2711,7 @@ impl Style { } Style::UnderlineSecondary | Style::LabelSecondary => { spec.set_bold(true).set_intense(true); - if cfg!(windows) { - spec.set_fg(Some(Color::Cyan)); - } else { - spec.set_fg(Some(Color::Blue)); - } + spec.set_fg(Some(BRIGHT_BLUE)); } Style::HeaderMsg | Style::NoStyle => {} Style::Level(lvl) => { -- cgit 1.4.1-3-g733a5 From 96b027f35df93a0fe963c9825b39b248672e18fb Mon Sep 17 00:00:00 2001 From: jyn Date: Fri, 8 Dec 2023 14:09:10 -0500 Subject: use magenta instead of bold for highlighting according to a poll of gay people in my phone, purple is the most popular color to use for highlighting | color | percentage | | ---------- | ---------- | | bold white | 6% | | blue | 14% | | cyan | 26% | | purple | 37% | | magenta | 17% | unfortunately, purple is not supported by 16-color terminals, which rustc apparently wants to support for some reason. until we require support for full 256-color terms (e.g. by doing the same feature detection as we currently do for urls), we can't use it. instead, i have collapsed the purple votes into magenta on the theory that they're close, and also because magenta is pretty. --- compiler/rustc_errors/src/emitter.rs | 2 +- src/tools/tidy/src/ui_tests.rs | 2 +- tests/ui/error-emitter/highlighting.rs | 23 +++++++++++ tests/ui/error-emitter/highlighting.stderr | 22 +++++++++++ .../multiline-multipart-suggestion.rs | 20 ++++++++++ .../multiline-multipart-suggestion.stderr | 46 ++++++++++++++++++++++ .../suggestions/multiline-multipart-suggestion.rs | 19 --------- .../multiline-multipart-suggestion.stderr | 46 ---------------------- 8 files changed, 113 insertions(+), 67 deletions(-) create mode 100644 tests/ui/error-emitter/highlighting.rs create mode 100644 tests/ui/error-emitter/highlighting.stderr create mode 100644 tests/ui/error-emitter/multiline-multipart-suggestion.rs create mode 100644 tests/ui/error-emitter/multiline-multipart-suggestion.stderr delete mode 100644 tests/ui/suggestions/multiline-multipart-suggestion.rs delete mode 100644 tests/ui/suggestions/multiline-multipart-suggestion.stderr (limited to 'compiler/rustc_errors/src') diff --git a/compiler/rustc_errors/src/emitter.rs b/compiler/rustc_errors/src/emitter.rs index 62aa8e602af..3f257fdd9cf 100644 --- a/compiler/rustc_errors/src/emitter.rs +++ b/compiler/rustc_errors/src/emitter.rs @@ -2719,7 +2719,7 @@ impl Style { spec.set_bold(true); } Style::Highlight => { - spec.set_bold(true); + spec.set_bold(true).set_fg(Some(Color::Magenta)); } } spec diff --git a/src/tools/tidy/src/ui_tests.rs b/src/tools/tidy/src/ui_tests.rs index 40149f8f1c3..dfa386b49de 100644 --- a/src/tools/tidy/src/ui_tests.rs +++ b/src/tools/tidy/src/ui_tests.rs @@ -11,7 +11,7 @@ use std::path::{Path, PathBuf}; const ENTRY_LIMIT: usize = 900; // FIXME: The following limits should be reduced eventually. const ISSUES_ENTRY_LIMIT: usize = 1852; -const ROOT_ENTRY_LIMIT: usize = 866; +const ROOT_ENTRY_LIMIT: usize = 867; const EXPECTED_TEST_FILE_EXTENSIONS: &[&str] = &[ "rs", // test source files diff --git a/tests/ui/error-emitter/highlighting.rs b/tests/ui/error-emitter/highlighting.rs new file mode 100644 index 00000000000..f7c15100fed --- /dev/null +++ b/tests/ui/error-emitter/highlighting.rs @@ -0,0 +1,23 @@ +// Make sure "highlighted" code is colored purple + +// compile-flags: --error-format=human --color=always +// error-pattern:for<'a>  +// edition:2018 + +use core::pin::Pin; +use core::future::Future; +use core::any::Any; + +fn query(_: fn(Box<(dyn Any + Send + '_)>) -> Pin, String>> + Send + 'static +)>>) {} + +fn wrapped_fn<'a>(_: Box<(dyn Any + Send)>) -> Pin, String>> + Send + 'static +)>> { + Box::pin(async { Err("nope".into()) }) +} + +fn main() { + query(wrapped_fn); +} diff --git a/tests/ui/error-emitter/highlighting.stderr b/tests/ui/error-emitter/highlighting.stderr new file mode 100644 index 00000000000..12a1caa6ef3 --- /dev/null +++ b/tests/ui/error-emitter/highlighting.stderr @@ -0,0 +1,22 @@ +error[E0308]: mismatched types + --> $DIR/highlighting.rs:22:11 + | +LL |  query(wrapped_fn); + |  ----- ^^^^^^^^^^ one type is more general than the other + |  | + |  arguments to this function are incorrect + | + = note: expected fn pointer `for<'a> fn(Box<(dyn Any + Send + 'a)>) -> Pin<_>` + found fn item `fn(Box<(dyn Any + Send + 'static)>) -> Pin<_> {wrapped_fn}` +note: function defined here + --> $DIR/highlighting.rs:11:4 + | +LL | fn query(_: fn(Box<(dyn Any + Send + '_)>) -> Pin, String>> + Send + 'static +LL | | )>>) {} + | |___- + +error: aborting due to 1 previous error + +For more information about this error, try `rustc --explain E0308`. diff --git a/tests/ui/error-emitter/multiline-multipart-suggestion.rs b/tests/ui/error-emitter/multiline-multipart-suggestion.rs new file mode 100644 index 00000000000..5532fe3d6f7 --- /dev/null +++ b/tests/ui/error-emitter/multiline-multipart-suggestion.rs @@ -0,0 +1,20 @@ +// compile-flags: --error-format=human --color=always +// error-pattern: missing lifetime specifier +// ignore-windows + +fn short(foo_bar: &Vec<&i32>) -> &i32 { + &12 +} + +fn long( + foo_bar: &Vec<&i32>, + something_very_long_so_that_the_line_will_wrap_around__________: i32, +) -> &i32 { + &12 +} + +fn long2( + foo_bar: &Vec<&i32>) -> &i32 { + &12 +} +fn main() {} diff --git a/tests/ui/error-emitter/multiline-multipart-suggestion.stderr b/tests/ui/error-emitter/multiline-multipart-suggestion.stderr new file mode 100644 index 00000000000..7f418fe8ad1 --- /dev/null +++ b/tests/ui/error-emitter/multiline-multipart-suggestion.stderr @@ -0,0 +1,46 @@ +error[E0106]: missing lifetime specifier + --> $DIR/multiline-multipart-suggestion.rs:5:34 + | +LL | fn short(foo_bar: &Vec<&i32>) -> &i32 { + |  ---------- ^ expected named lifetime parameter + | + = help: this function's return type contains a borrowed value, but the signature does not say which one of `foo_bar`'s 2 lifetimes it is borrowed from +help: consider introducing a named lifetime parameter + | +LL | fn short<'a>(foo_bar: &'a Vec<&'a i32>) -> &'a i32 { + | ++++ ++ ++ ++ + +error[E0106]: missing lifetime specifier + --> $DIR/multiline-multipart-suggestion.rs:12:6 + | +LL |  foo_bar: &Vec<&i32>, + |  ---------- +LL |  something_very_long_so_that_the_line_will_wrap_around__________: i32, +LL | ) -> &i32 { + |  ^ expected named lifetime parameter + | + = help: this function's return type contains a borrowed value, but the signature does not say which one of `foo_bar`'s 2 lifetimes it is borrowed from +help: consider introducing a named lifetime parameter + | +LL ~ fn long<'a>( +LL ~  foo_bar: &'a Vec<&'a i32>, +LL |  something_very_long_so_that_the_line_will_wrap_around__________: i32, +LL ~ ) -> &'a i32 { + | + +error[E0106]: missing lifetime specifier + --> $DIR/multiline-multipart-suggestion.rs:17:29 + | +LL |  foo_bar: &Vec<&i32>) -> &i32 { + |  ---------- ^ expected named lifetime parameter + | + = help: this function's return type contains a borrowed value, but the signature does not say which one of `foo_bar`'s 2 lifetimes it is borrowed from +help: consider introducing a named lifetime parameter + | +LL ~ fn long2<'a>( +LL ~  foo_bar: &'a Vec<&'a i32>) -> &'a i32 { + | + +error: aborting due to 3 previous errors + +For more information about this error, try `rustc --explain E0106`. diff --git a/tests/ui/suggestions/multiline-multipart-suggestion.rs b/tests/ui/suggestions/multiline-multipart-suggestion.rs deleted file mode 100644 index 77d0322d05f..00000000000 --- a/tests/ui/suggestions/multiline-multipart-suggestion.rs +++ /dev/null @@ -1,19 +0,0 @@ -// compile-flags: --error-format=human --color=always -// ignore-windows - -fn short(foo_bar: &Vec<&i32>) -> &i32 { //~ ERROR missing lifetime specifier - &12 -} - -fn long( //~ ERROR missing lifetime specifier - foo_bar: &Vec<&i32>, - something_very_long_so_that_the_line_will_wrap_around__________: i32, -) -> &i32 { - &12 -} - -fn long2( //~ ERROR missing lifetime specifier - foo_bar: &Vec<&i32>) -> &i32 { - &12 -} -fn main() {} diff --git a/tests/ui/suggestions/multiline-multipart-suggestion.stderr b/tests/ui/suggestions/multiline-multipart-suggestion.stderr deleted file mode 100644 index 045a86b4f54..00000000000 --- a/tests/ui/suggestions/multiline-multipart-suggestion.stderr +++ /dev/null @@ -1,46 +0,0 @@ -error[E0106]: missing lifetime specifier - --> $DIR/multiline-multipart-suggestion.rs:4:34 - | -LL | fn short(foo_bar: &Vec<&i32>) -> &i32 { - |  ---------- ^ expected named lifetime parameter - | - = help: this function's return type contains a borrowed value, but the signature does not say which one of `foo_bar`'s 2 lifetimes it is borrowed from -help: consider introducing a named lifetime parameter - | -LL | fn short<'a>(foo_bar: &'a Vec<&'a i32>) -> &'a i32 { - | ++++ ++ ++ ++ - -error[E0106]: missing lifetime specifier - --> $DIR/multiline-multipart-suggestion.rs:11:6 - | -LL |  foo_bar: &Vec<&i32>, - |  ---------- -LL |  something_very_long_so_that_the_line_will_wrap_around__________: i32, -LL | ) -> &i32 { - |  ^ expected named lifetime parameter - | - = help: this function's return type contains a borrowed value, but the signature does not say which one of `foo_bar`'s 2 lifetimes it is borrowed from -help: consider introducing a named lifetime parameter - | -LL ~ fn long<'a>( -LL ~  foo_bar: &'a Vec<&'a i32>, -LL |  something_very_long_so_that_the_line_will_wrap_around__________: i32, -LL ~ ) -> &'a i32 { - | - -error[E0106]: missing lifetime specifier - --> $DIR/multiline-multipart-suggestion.rs:16:29 - | -LL |  foo_bar: &Vec<&i32>) -> &i32 { - |  ---------- ^ expected named lifetime parameter - | - = help: this function's return type contains a borrowed value, but the signature does not say which one of `foo_bar`'s 2 lifetimes it is borrowed from -help: consider introducing a named lifetime parameter - | -LL ~ fn long2<'a>( -LL ~  foo_bar: &'a Vec<&'a i32>) -> &'a i32 { - | - -error: aborting due to 3 previous errors - -For more information about this error, try `rustc --explain E0106`. -- cgit 1.4.1-3-g733a5