Rollup merge of #118756 - jyn514:colors, r=estebank

use bold magenta instead of bold white 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.

before:
![image](https://github.com/rust-lang/rust/assets/23638587/9a89eee2-8b89-422e-8554-812827bb2a23)

after:
![image](https://github.com/rust-lang/rust/assets/23638587/5bf3a917-8a20-4afd-af3e-f9491d0d57f5)

other colors for comparison:
blue: ![image](https://github.com/rust-lang/rust/assets/23638587/6f199c7b-d598-4009-8ffc-6b7b1d0d1f8c)
cyan: ![image](https://github.com/rust-lang/rust/assets/23638587/a77e4fe3-563e-4aa5-ae92-745bb67287d1)
purple: ![image](https://github.com/rust-lang/rust/assets/23638587/ffe603fb-d811-4106-95a9-4dd4c955924c)
magenta without bolding: ![image](https://github.com/rust-lang/rust/assets/23638587/cf927e5f-8b25-4dc2-b8e7-32905a11a459)

r? ``@estebank``
This commit is contained in:
Matthias Krüger 2023-12-12 06:52:49 +01:00 committed by GitHub
commit dfc5ffacd3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 144 additions and 23 deletions

View File

@ -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 { impl Style {
fn color_spec(&self, lvl: Level) -> ColorSpec { fn color_spec(&self, lvl: Level) -> ColorSpec {
let mut spec = ColorSpec::new(); let mut spec = ColorSpec::new();
@ -2688,11 +2696,7 @@ fn color_spec(&self, lvl: Level) -> ColorSpec {
Style::LineNumber => { Style::LineNumber => {
spec.set_bold(true); spec.set_bold(true);
spec.set_intense(true); spec.set_intense(true);
if cfg!(windows) { spec.set_fg(Some(BRIGHT_BLUE));
spec.set_fg(Some(Color::Cyan));
} else {
spec.set_fg(Some(Color::Blue));
}
} }
Style::Quotation => {} Style::Quotation => {}
Style::MainHeaderMsg => { Style::MainHeaderMsg => {
@ -2707,11 +2711,7 @@ fn color_spec(&self, lvl: Level) -> ColorSpec {
} }
Style::UnderlineSecondary | Style::LabelSecondary => { Style::UnderlineSecondary | Style::LabelSecondary => {
spec.set_bold(true).set_intense(true); spec.set_bold(true).set_intense(true);
if cfg!(windows) { spec.set_fg(Some(BRIGHT_BLUE));
spec.set_fg(Some(Color::Cyan));
} else {
spec.set_fg(Some(Color::Blue));
}
} }
Style::HeaderMsg | Style::NoStyle => {} Style::HeaderMsg | Style::NoStyle => {}
Style::Level(lvl) => { Style::Level(lvl) => {
@ -2719,7 +2719,7 @@ fn color_spec(&self, lvl: Level) -> ColorSpec {
spec.set_bold(true); spec.set_bold(true);
} }
Style::Highlight => { Style::Highlight => {
spec.set_bold(true); spec.set_bold(true).set_fg(Some(Color::Magenta));
} }
} }
spec spec

View File

@ -11,7 +11,7 @@
const ENTRY_LIMIT: usize = 900; const ENTRY_LIMIT: usize = 900;
// FIXME: The following limits should be reduced eventually. // FIXME: The following limits should be reduced eventually.
const ISSUES_ENTRY_LIMIT: usize = 1852; const ISSUES_ENTRY_LIMIT: usize = 1852;
const ROOT_ENTRY_LIMIT: usize = 866; const ROOT_ENTRY_LIMIT: usize = 867;
const EXPECTED_TEST_FILE_EXTENSIONS: &[&str] = &[ const EXPECTED_TEST_FILE_EXTENSIONS: &[&str] = &[
"rs", // test source files "rs", // test source files

View File

@ -0,0 +1,22 @@
error[E0308]: mismatched types
 --> $DIR/highlighting.rs:26: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:15:4
 |
LL | fn query(_: fn(Box<(dyn Any + Send + '_)>) -> Pin<Box<(
 |  ____^^^^^_-
LL | |  dyn Future<Output = Result<Box<(dyn Any + 'static)>, String>> + Send + 'static
LL | | )>>) {}
 | |___-
error: aborting due to 1 previous error
For more information about this error, try `rustc --explain E0308`.

View File

@ -0,0 +1,27 @@
// Make sure "highlighted" code is colored purple
// compile-flags: --error-format=human --color=always
// error-pattern:for<'a> 
// edition:2018
// revisions: windows not-windows
// [windows]only-windows
// [not-windows]ignore-windows
use core::pin::Pin;
use core::future::Future;
use core::any::Any;
fn query(_: fn(Box<(dyn Any + Send + '_)>) -> Pin<Box<(
dyn Future<Output = Result<Box<(dyn Any + 'static)>, String>> + Send + 'static
)>>) {}
fn wrapped_fn<'a>(_: Box<(dyn Any + Send)>) -> Pin<Box<(
dyn Future<Output = Result<Box<(dyn Any + 'static)>, String>> + Send + 'static
)>> {
Box::pin(async { Err("nope".into()) })
}
fn main() {
query(wrapped_fn);
}

View File

@ -0,0 +1,22 @@
error[E0308]: mismatched types
 --> $DIR/highlighting.rs:26: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:15:4
 |
LL | fn query(_: fn(Box<(dyn Any + Send + '_)>) -> Pin<Box<(
 |  ____^^^^^_-
LL | |  dyn Future<Output = Result<Box<(dyn Any + 'static)>, String>> + Send + 'static
LL | | )>>) {}
 | |___-
error: aborting due to 1 previous error
For more information about this error, try `rustc --explain E0308`.

View File

@ -1,17 +1,17 @@
error[E0106]: missing lifetime specifier error[E0106]: missing lifetime specifier
 --> $DIR/multiline-multipart-suggestion.rs:4:34  --> $DIR/multiline-multipart-suggestion.rs:8:34
 |  |
LL | fn short(foo_bar: &Vec<&i32>) -> &i32 { LL | fn short(foo_bar: &Vec<&i32>) -> &i32 {
 |  ---------- ^ expected named lifetime parameter  |  ---------- ^ 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: 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 help: consider introducing a named lifetime parameter
 |  |
LL | fn short<'a>(foo_bar: &'a Vec<&'a i32>) -> &'a i32 { LL | fn short<'a>(foo_bar: &'a Vec<&'a i32>) -> &'a i32 {
 | ++++ ++ ++ ++  | ++++ ++ ++ ++
error[E0106]: missing lifetime specifier error[E0106]: missing lifetime specifier
 --> $DIR/multiline-multipart-suggestion.rs:11:6  --> $DIR/multiline-multipart-suggestion.rs:15:6
 |  |
LL |  foo_bar: &Vec<&i32>, LL |  foo_bar: &Vec<&i32>,
 |  ----------  |  ----------
@ -22,14 +22,14 @@
 = 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: 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 help: consider introducing a named lifetime parameter
 |  |
LL ~ fn long<'a>( LL ~ fn long<'a>(
LL ~  foo_bar: &'a Vec<&'a i32>, LL ~  foo_bar: &'a Vec<&'a i32>,
LL |  something_very_long_so_that_the_line_will_wrap_around__________: i32, LL |  something_very_long_so_that_the_line_will_wrap_around__________: i32,
LL ~ ) -> &'a i32 { LL ~ ) -> &'a i32 {
 |  |
error[E0106]: missing lifetime specifier error[E0106]: missing lifetime specifier
 --> $DIR/multiline-multipart-suggestion.rs:16:29  --> $DIR/multiline-multipart-suggestion.rs:20:29
 |  |
LL |  foo_bar: &Vec<&i32>) -> &i32 { LL |  foo_bar: &Vec<&i32>) -> &i32 {
 |  ---------- ^ expected named lifetime parameter  |  ---------- ^ expected named lifetime parameter
@ -37,7 +37,7 @@
 = 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: 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 help: consider introducing a named lifetime parameter
 |  |
LL ~ fn long2<'a>( LL ~ fn long2<'a>(
LL ~  foo_bar: &'a Vec<&'a i32>) -> &'a i32 { LL ~  foo_bar: &'a Vec<&'a i32>) -> &'a i32 {
 |  |

View File

@ -1,18 +1,22 @@
// compile-flags: --error-format=human --color=always // compile-flags: --error-format=human --color=always
// ignore-windows // error-pattern: missing lifetime specifier
fn short(foo_bar: &Vec<&i32>) -> &i32 { //~ ERROR missing lifetime specifier // revisions: windows not-windows
// [windows]only-windows
// [not-windows]ignore-windows
fn short(foo_bar: &Vec<&i32>) -> &i32 {
&12 &12
} }
fn long( //~ ERROR missing lifetime specifier fn long(
foo_bar: &Vec<&i32>, foo_bar: &Vec<&i32>,
something_very_long_so_that_the_line_will_wrap_around__________: i32, something_very_long_so_that_the_line_will_wrap_around__________: i32,
) -> &i32 { ) -> &i32 {
&12 &12
} }
fn long2( //~ ERROR missing lifetime specifier fn long2(
foo_bar: &Vec<&i32>) -> &i32 { foo_bar: &Vec<&i32>) -> &i32 {
&12 &12
} }

View File

@ -0,0 +1,46 @@
error[E0106]: missing lifetime specifier
 --> $DIR/multiline-multipart-suggestion.rs:8: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:15: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:20: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`.