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)
@ -27,7 +27,7 @@
|
|||||||
|
|
||||||
use crate::diagnostic::IsLint;
|
use crate::diagnostic::IsLint;
|
||||||
use crate::emitter::{
|
use crate::emitter::{
|
||||||
ColorConfig, Destination, Emitter, HumanEmitter, HumanReadableErrorType,
|
ColorConfig, Destination, Emitter, HumanEmitter, HumanReadableErrorType, OutputTheme,
|
||||||
should_show_source_code,
|
should_show_source_code,
|
||||||
};
|
};
|
||||||
use crate::registry::Registry;
|
use crate::registry::Registry;
|
||||||
@ -377,6 +377,11 @@ fn reset(&mut self) -> io::Result<()> {
|
|||||||
.terminal_url(je.terminal_url)
|
.terminal_url(je.terminal_url)
|
||||||
.ui_testing(je.ui_testing)
|
.ui_testing(je.ui_testing)
|
||||||
.ignored_directories_in_source_blocks(je.ignored_directories_in_source_blocks.clone())
|
.ignored_directories_in_source_blocks(je.ignored_directories_in_source_blocks.clone())
|
||||||
|
.theme(if let HumanReadableErrorType::Unicode = je.json_rendered {
|
||||||
|
OutputTheme::Unicode
|
||||||
|
} else {
|
||||||
|
OutputTheme::Ascii
|
||||||
|
})
|
||||||
.emit_diagnostic(diag);
|
.emit_diagnostic(diag);
|
||||||
let buf = Arc::try_unwrap(buf.0).unwrap().into_inner().unwrap();
|
let buf = Arc::try_unwrap(buf.0).unwrap().into_inner().unwrap();
|
||||||
let buf = String::from_utf8(buf).unwrap();
|
let buf = String::from_utf8(buf).unwrap();
|
||||||
|
@ -1721,6 +1721,9 @@ pub fn parse_json(early_dcx: &EarlyDiagCtxt, matches: &getopts::Matches) -> Json
|
|||||||
for sub_option in option.split(',') {
|
for sub_option in option.split(',') {
|
||||||
match sub_option {
|
match sub_option {
|
||||||
"diagnostic-short" => json_rendered = HumanReadableErrorType::Short,
|
"diagnostic-short" => json_rendered = HumanReadableErrorType::Short,
|
||||||
|
"diagnostic-unicode" => {
|
||||||
|
json_rendered = HumanReadableErrorType::Unicode;
|
||||||
|
}
|
||||||
"diagnostic-rendered-ansi" => json_color = ColorConfig::Always,
|
"diagnostic-rendered-ansi" => json_color = ColorConfig::Always,
|
||||||
"artifacts" => json_artifact_notifications = true,
|
"artifacts" => json_artifact_notifications = true,
|
||||||
"unused-externs" => json_unused_externs = JsonUnusedExterns::Loud,
|
"unused-externs" => json_unused_externs = JsonUnusedExterns::Loud,
|
||||||
@ -1767,14 +1770,17 @@ pub fn parse_error_format(
|
|||||||
ErrorOutputType::Json { pretty: true, json_rendered, color_config: json_color }
|
ErrorOutputType::Json { pretty: true, json_rendered, color_config: json_color }
|
||||||
}
|
}
|
||||||
Some("short") => ErrorOutputType::HumanReadable(HumanReadableErrorType::Short, color),
|
Some("short") => ErrorOutputType::HumanReadable(HumanReadableErrorType::Short, color),
|
||||||
|
Some("human-unicode") => {
|
||||||
|
ErrorOutputType::HumanReadable(HumanReadableErrorType::Unicode, color)
|
||||||
|
}
|
||||||
Some(arg) => {
|
Some(arg) => {
|
||||||
early_dcx.abort_if_error_and_set_error_format(ErrorOutputType::HumanReadable(
|
early_dcx.abort_if_error_and_set_error_format(ErrorOutputType::HumanReadable(
|
||||||
HumanReadableErrorType::Default,
|
HumanReadableErrorType::Default,
|
||||||
color,
|
color,
|
||||||
));
|
));
|
||||||
early_dcx.early_fatal(format!(
|
early_dcx.early_fatal(format!(
|
||||||
"argument for `--error-format` must be `human`, `json` or \
|
"argument for `--error-format` must be `human`, `human-annotate-rs`, \
|
||||||
`short` (instead was `{arg}`)"
|
`human-unicode`, `json`, `pretty-json` or `short` (instead was `{arg}`)"
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1827,18 +1833,21 @@ pub fn parse_crate_edition(early_dcx: &EarlyDiagCtxt, matches: &getopts::Matches
|
|||||||
fn check_error_format_stability(
|
fn check_error_format_stability(
|
||||||
early_dcx: &EarlyDiagCtxt,
|
early_dcx: &EarlyDiagCtxt,
|
||||||
unstable_opts: &UnstableOptions,
|
unstable_opts: &UnstableOptions,
|
||||||
error_format: ErrorOutputType,
|
format: ErrorOutputType,
|
||||||
) {
|
) {
|
||||||
if !unstable_opts.unstable_options {
|
if unstable_opts.unstable_options {
|
||||||
if let ErrorOutputType::Json { pretty: true, .. } = error_format {
|
return;
|
||||||
early_dcx.early_fatal("`--error-format=pretty-json` is unstable");
|
|
||||||
}
|
|
||||||
if let ErrorOutputType::HumanReadable(HumanReadableErrorType::AnnotateSnippet, _) =
|
|
||||||
error_format
|
|
||||||
{
|
|
||||||
early_dcx.early_fatal("`--error-format=human-annotate-rs` is unstable");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
let format = match format {
|
||||||
|
ErrorOutputType::Json { pretty: true, .. } => "pretty-json",
|
||||||
|
ErrorOutputType::HumanReadable(format, _) => match format {
|
||||||
|
HumanReadableErrorType::AnnotateSnippet => "human-annotate-rs",
|
||||||
|
HumanReadableErrorType::Unicode => "human-unicode",
|
||||||
|
_ => return,
|
||||||
|
},
|
||||||
|
_ => return,
|
||||||
|
};
|
||||||
|
early_dcx.early_fatal(format!("`--error-format={format}` is unstable"))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parse_output_types(
|
fn parse_output_types(
|
||||||
|
@ -16,7 +16,9 @@
|
|||||||
};
|
};
|
||||||
use rustc_errors::annotate_snippet_emitter_writer::AnnotateSnippetEmitter;
|
use rustc_errors::annotate_snippet_emitter_writer::AnnotateSnippetEmitter;
|
||||||
use rustc_errors::codes::*;
|
use rustc_errors::codes::*;
|
||||||
use rustc_errors::emitter::{DynEmitter, HumanEmitter, HumanReadableErrorType, stderr_destination};
|
use rustc_errors::emitter::{
|
||||||
|
DynEmitter, HumanEmitter, HumanReadableErrorType, OutputTheme, stderr_destination,
|
||||||
|
};
|
||||||
use rustc_errors::json::JsonEmitter;
|
use rustc_errors::json::JsonEmitter;
|
||||||
use rustc_errors::registry::Registry;
|
use rustc_errors::registry::Registry;
|
||||||
use rustc_errors::{
|
use rustc_errors::{
|
||||||
@ -966,6 +968,11 @@ fn default_emitter(
|
|||||||
.macro_backtrace(macro_backtrace)
|
.macro_backtrace(macro_backtrace)
|
||||||
.track_diagnostics(track_diagnostics)
|
.track_diagnostics(track_diagnostics)
|
||||||
.terminal_url(terminal_url)
|
.terminal_url(terminal_url)
|
||||||
|
.theme(if let HumanReadableErrorType::Unicode = kind {
|
||||||
|
OutputTheme::Unicode
|
||||||
|
} else {
|
||||||
|
OutputTheme::Ascii
|
||||||
|
})
|
||||||
.ignored_directories_in_source_blocks(
|
.ignored_directories_in_source_blocks(
|
||||||
sopts.unstable_opts.ignore_directory_in_diagnostics_source_blocks.clone(),
|
sopts.unstable_opts.ignore_directory_in_diagnostics_source_blocks.clone(),
|
||||||
);
|
);
|
||||||
@ -1470,6 +1477,11 @@ fn mk_emitter(output: ErrorOutputType) -> Box<DynEmitter> {
|
|||||||
let short = kind.short();
|
let short = kind.short();
|
||||||
Box::new(
|
Box::new(
|
||||||
HumanEmitter::new(stderr_destination(color_config), fallback_bundle)
|
HumanEmitter::new(stderr_destination(color_config), fallback_bundle)
|
||||||
|
.theme(if let HumanReadableErrorType::Unicode = kind {
|
||||||
|
OutputTheme::Unicode
|
||||||
|
} else {
|
||||||
|
OutputTheme::Ascii
|
||||||
|
})
|
||||||
.short_message(short),
|
.short_message(short),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -2223,6 +2223,10 @@ pub fn char_width(ch: char) -> usize {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn str_width(s: &str) -> usize {
|
||||||
|
s.chars().map(char_width).sum()
|
||||||
|
}
|
||||||
|
|
||||||
/// Normalizes the source code and records the normalizations.
|
/// Normalizes the source code and records the normalizations.
|
||||||
fn normalize_src(src: &mut String) -> Vec<NormalizedPos> {
|
fn normalize_src(src: &mut String) -> Vec<NormalizedPos> {
|
||||||
let mut normalized_pos = vec![];
|
let mut normalized_pos = vec![];
|
||||||
|
@ -6,7 +6,9 @@
|
|||||||
use rustc_data_structures::sync::Lrc;
|
use rustc_data_structures::sync::Lrc;
|
||||||
use rustc_data_structures::unord::UnordSet;
|
use rustc_data_structures::unord::UnordSet;
|
||||||
use rustc_errors::codes::*;
|
use rustc_errors::codes::*;
|
||||||
use rustc_errors::emitter::{DynEmitter, HumanEmitter, stderr_destination};
|
use rustc_errors::emitter::{
|
||||||
|
DynEmitter, HumanEmitter, HumanReadableErrorType, OutputTheme, stderr_destination,
|
||||||
|
};
|
||||||
use rustc_errors::json::JsonEmitter;
|
use rustc_errors::json::JsonEmitter;
|
||||||
use rustc_errors::{ErrorGuaranteed, TerminalUrl};
|
use rustc_errors::{ErrorGuaranteed, TerminalUrl};
|
||||||
use rustc_feature::UnstableFeatures;
|
use rustc_feature::UnstableFeatures;
|
||||||
@ -154,6 +156,11 @@ pub(crate) fn new_dcx(
|
|||||||
.teach(unstable_opts.teach)
|
.teach(unstable_opts.teach)
|
||||||
.diagnostic_width(diagnostic_width)
|
.diagnostic_width(diagnostic_width)
|
||||||
.track_diagnostics(unstable_opts.track_diagnostics)
|
.track_diagnostics(unstable_opts.track_diagnostics)
|
||||||
|
.theme(if let HumanReadableErrorType::Unicode = kind {
|
||||||
|
OutputTheme::Unicode
|
||||||
|
} else {
|
||||||
|
OutputTheme::Ascii
|
||||||
|
})
|
||||||
.ui_testing(unstable_opts.ui_testing),
|
.ui_testing(unstable_opts.ui_testing),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
pub(crate) use markdown::test as test_markdown;
|
pub(crate) use markdown::test as test_markdown;
|
||||||
use rustc_ast as ast;
|
use rustc_ast as ast;
|
||||||
use rustc_data_structures::fx::{FxHashMap, FxIndexMap, FxIndexSet};
|
use rustc_data_structures::fx::{FxHashMap, FxIndexMap, FxIndexSet};
|
||||||
|
use rustc_errors::emitter::HumanReadableErrorType;
|
||||||
use rustc_errors::{ColorConfig, DiagCtxtHandle, ErrorGuaranteed, FatalError};
|
use rustc_errors::{ColorConfig, DiagCtxtHandle, ErrorGuaranteed, FatalError};
|
||||||
use rustc_hir::CRATE_HIR_ID;
|
use rustc_hir::CRATE_HIR_ID;
|
||||||
use rustc_hir::def_id::LOCAL_CRATE;
|
use rustc_hir::def_id::LOCAL_CRATE;
|
||||||
@ -520,10 +521,14 @@ fn run_test(
|
|||||||
});
|
});
|
||||||
if let ErrorOutputType::HumanReadable(kind, color_config) = rustdoc_options.error_format {
|
if let ErrorOutputType::HumanReadable(kind, color_config) = rustdoc_options.error_format {
|
||||||
let short = kind.short();
|
let short = kind.short();
|
||||||
|
let unicode = kind == HumanReadableErrorType::Unicode;
|
||||||
|
|
||||||
if short {
|
if short {
|
||||||
compiler.arg("--error-format").arg("short");
|
compiler.arg("--error-format").arg("short");
|
||||||
}
|
}
|
||||||
|
if unicode {
|
||||||
|
compiler.arg("--error-format").arg("human-unicode");
|
||||||
|
}
|
||||||
|
|
||||||
match color_config {
|
match color_config {
|
||||||
ColorConfig::Never => {
|
ColorConfig::Never => {
|
||||||
|
@ -3,7 +3,7 @@ error: empty line after doc comment
|
|||||||
|
|
|
|
||||||
LL | / /// for the crate
|
LL | / /// for the crate
|
||||||
LL | |
|
LL | |
|
||||||
| |_
|
| |_^
|
||||||
LL | fn first_in_crate() {}
|
LL | fn first_in_crate() {}
|
||||||
| ------------------- the comment documents this function
|
| ------------------- the comment documents this function
|
||||||
|
|
|
|
||||||
@ -22,7 +22,7 @@ error: empty line after doc comment
|
|||||||
|
|
|
|
||||||
LL | / /// for the module
|
LL | / /// for the module
|
||||||
LL | |
|
LL | |
|
||||||
| |_
|
| |_^
|
||||||
LL | fn first_in_module() {}
|
LL | fn first_in_module() {}
|
||||||
| -------------------- the comment documents this function
|
| -------------------- the comment documents this function
|
||||||
|
|
|
|
||||||
@ -39,7 +39,7 @@ error: empty line after doc comment
|
|||||||
|
|
|
|
||||||
LL | / /// # Indented
|
LL | / /// # Indented
|
||||||
LL | |
|
LL | |
|
||||||
| |_
|
| |_^
|
||||||
LL | /// Blank line
|
LL | /// Blank line
|
||||||
LL | fn indented() {}
|
LL | fn indented() {}
|
||||||
| ------------- the comment documents this function
|
| ------------- the comment documents this function
|
||||||
@ -55,7 +55,7 @@ error: empty line after doc comment
|
|||||||
|
|
|
|
||||||
LL | / /// This should produce a warning
|
LL | / /// This should produce a warning
|
||||||
LL | |
|
LL | |
|
||||||
| |_
|
| |_^
|
||||||
LL | fn with_doc_and_newline() {}
|
LL | fn with_doc_and_newline() {}
|
||||||
| ------------------------- the comment documents this function
|
| ------------------------- the comment documents this function
|
||||||
|
|
|
|
||||||
@ -69,7 +69,7 @@ LL | |
|
|||||||
LL | | /** This is also a doc comment and is part of the warning
|
LL | | /** This is also a doc comment and is part of the warning
|
||||||
LL | | */
|
LL | | */
|
||||||
LL | |
|
LL | |
|
||||||
| |_
|
| |_^
|
||||||
...
|
...
|
||||||
LL | fn three_attributes() {}
|
LL | fn three_attributes() {}
|
||||||
| --------------------- the comment documents this function
|
| --------------------- the comment documents this function
|
||||||
@ -82,7 +82,7 @@ error: empty line after doc comment
|
|||||||
LL | / /// docs for `old_code`
|
LL | / /// docs for `old_code`
|
||||||
LL | | // fn old_code() {}
|
LL | | // fn old_code() {}
|
||||||
LL | |
|
LL | |
|
||||||
| |_
|
| |_^
|
||||||
LL | fn new_code() {}
|
LL | fn new_code() {}
|
||||||
| ------------- the comment documents this function
|
| ------------- the comment documents this function
|
||||||
|
|
|
|
||||||
@ -102,7 +102,7 @@ LL | | /// Docs
|
|||||||
LL | | /// for OldB
|
LL | | /// for OldB
|
||||||
LL | | // struct OldB;
|
LL | | // struct OldB;
|
||||||
LL | |
|
LL | |
|
||||||
| |_
|
| |_^
|
||||||
...
|
...
|
||||||
LL | struct Multiple;
|
LL | struct Multiple;
|
||||||
| --------------- the comment documents this struct
|
| --------------- the comment documents this struct
|
||||||
@ -125,7 +125,7 @@ LL | / /**
|
|||||||
LL | | * Meant to be inner doc comment
|
LL | | * Meant to be inner doc comment
|
||||||
LL | | */
|
LL | | */
|
||||||
LL | |
|
LL | |
|
||||||
| |_
|
| |_^
|
||||||
LL | fn first_in_module() {}
|
LL | fn first_in_module() {}
|
||||||
| -------------------- the comment documents this function
|
| -------------------- the comment documents this function
|
||||||
|
|
|
|
||||||
@ -143,7 +143,7 @@ LL | | * Docs for `old_code`
|
|||||||
LL | | */
|
LL | | */
|
||||||
LL | | /* fn old_code() {} */
|
LL | | /* fn old_code() {} */
|
||||||
LL | |
|
LL | |
|
||||||
| |_
|
| |_^
|
||||||
...
|
...
|
||||||
LL | fn new_code() {}
|
LL | fn new_code() {}
|
||||||
| ------------- the comment documents this function
|
| ------------- the comment documents this function
|
||||||
@ -161,7 +161,7 @@ error: empty line after doc comment
|
|||||||
LL | / /// Docs for `old_code2`
|
LL | / /// Docs for `old_code2`
|
||||||
LL | | /* fn old_code2() {} */
|
LL | | /* fn old_code2() {} */
|
||||||
LL | |
|
LL | |
|
||||||
| |_
|
| |_^
|
||||||
LL | /// Docs for `new_code2`
|
LL | /// Docs for `new_code2`
|
||||||
LL | fn new_code2() {}
|
LL | fn new_code2() {}
|
||||||
| -------------- the comment documents this function
|
| -------------- the comment documents this function
|
||||||
|
@ -3,7 +3,7 @@ error: empty line after outer attribute
|
|||||||
|
|
|
|
||||||
LL | / #[crate_type = "lib"]
|
LL | / #[crate_type = "lib"]
|
||||||
LL | |
|
LL | |
|
||||||
| |_
|
| |_^
|
||||||
LL | fn first_in_crate() {}
|
LL | fn first_in_crate() {}
|
||||||
| ------------------- the attribute applies to this function
|
| ------------------- the attribute applies to this function
|
||||||
|
|
|
|
||||||
@ -20,7 +20,7 @@ error: empty line after outer attribute
|
|||||||
|
|
|
|
||||||
LL | / #[inline]
|
LL | / #[inline]
|
||||||
LL | |
|
LL | |
|
||||||
| |_
|
| |_^
|
||||||
LL | /// some comment
|
LL | /// some comment
|
||||||
LL | fn with_one_newline_and_comment() {}
|
LL | fn with_one_newline_and_comment() {}
|
||||||
| --------------------------------- the attribute applies to this function
|
| --------------------------------- the attribute applies to this function
|
||||||
@ -32,7 +32,7 @@ error: empty line after outer attribute
|
|||||||
|
|
|
|
||||||
LL | / #[inline]
|
LL | / #[inline]
|
||||||
LL | |
|
LL | |
|
||||||
| |_
|
| |_^
|
||||||
LL | fn with_one_newline() {}
|
LL | fn with_one_newline() {}
|
||||||
| --------------------- the attribute applies to this function
|
| --------------------- the attribute applies to this function
|
||||||
|
|
|
|
||||||
@ -44,7 +44,7 @@ error: empty lines after outer attribute
|
|||||||
LL | / #[crate_type = "lib"]
|
LL | / #[crate_type = "lib"]
|
||||||
LL | |
|
LL | |
|
||||||
LL | |
|
LL | |
|
||||||
| |_
|
| |_^
|
||||||
LL | fn with_two_newlines() {}
|
LL | fn with_two_newlines() {}
|
||||||
| ---------------------- the attribute applies to this function
|
| ---------------------- 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 | / #[doc = "doc attributes should be considered attributes"]
|
||||||
LL | |
|
LL | |
|
||||||
| |_
|
| |_^
|
||||||
LL | enum Baz {
|
LL | enum Baz {
|
||||||
| -------- the attribute applies to this enum
|
| -------- the attribute applies to this enum
|
||||||
|
|
|
|
||||||
@ -70,7 +70,7 @@ error: empty line after outer attribute
|
|||||||
|
|
|
|
||||||
LL | / #[repr(C)]
|
LL | / #[repr(C)]
|
||||||
LL | |
|
LL | |
|
||||||
| |_
|
| |_^
|
||||||
LL | struct Foo {
|
LL | struct Foo {
|
||||||
| ---------- the attribute applies to this struct
|
| ---------- the attribute applies to this struct
|
||||||
|
|
|
|
||||||
@ -81,7 +81,7 @@ error: empty line after outer attribute
|
|||||||
|
|
|
|
||||||
LL | / #[allow(dead_code)]
|
LL | / #[allow(dead_code)]
|
||||||
LL | |
|
LL | |
|
||||||
| |_
|
| |_^
|
||||||
LL | mod foo {}
|
LL | mod foo {}
|
||||||
| ------- the attribute applies to this module
|
| ------- the attribute applies to this module
|
||||||
|
|
|
|
||||||
@ -93,7 +93,7 @@ error: empty line after outer attribute
|
|||||||
LL | / #[inline]
|
LL | / #[inline]
|
||||||
LL | | // Still lint cases where the empty line does not immediately follow the attribute
|
LL | | // Still lint cases where the empty line does not immediately follow the attribute
|
||||||
LL | |
|
LL | |
|
||||||
| |_
|
| |_^
|
||||||
LL | fn comment_before_empty_line() {}
|
LL | fn comment_before_empty_line() {}
|
||||||
| ------------------------------ the attribute applies to this function
|
| ------------------------------ the attribute applies to this function
|
||||||
|
|
|
|
||||||
@ -106,7 +106,7 @@ LL | / #[allow(unused)]
|
|||||||
LL | |
|
LL | |
|
||||||
LL | | // This comment is isolated
|
LL | | // This comment is isolated
|
||||||
LL | |
|
LL | |
|
||||||
| |_
|
| |_^
|
||||||
LL | pub fn isolated_comment() {}
|
LL | pub fn isolated_comment() {}
|
||||||
| ------------------------- the attribute applies to this function
|
| ------------------------- the attribute applies to this function
|
||||||
|
|
|
|
||||||
|
@ -3,7 +3,7 @@ error: this item has comments with 4 forward slashes (`////`). These look like d
|
|||||||
|
|
|
|
||||||
LL | / //// whoops
|
LL | / //// whoops
|
||||||
LL | | fn a() {}
|
LL | | fn a() {}
|
||||||
| |_
|
| |_^
|
||||||
|
|
|
|
||||||
= note: `-D clippy::four-forward-slashes` implied by `-D warnings`
|
= note: `-D clippy::four-forward-slashes` implied by `-D warnings`
|
||||||
= help: to override `-D warnings` add `#[allow(clippy::four_forward_slashes)]`
|
= 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 | / //// whoops
|
||||||
LL | | #[allow(dead_code)]
|
LL | | #[allow(dead_code)]
|
||||||
LL | | fn b() {}
|
LL | | fn b() {}
|
||||||
| |_
|
| |_^
|
||||||
|
|
|
|
||||||
help: make this a doc comment by removing one `/`
|
help: make this a doc comment by removing one `/`
|
||||||
|
|
|
|
||||||
@ -32,7 +32,7 @@ LL | / //// whoops
|
|||||||
LL | | //// two borked comments!
|
LL | | //// two borked comments!
|
||||||
LL | | #[track_caller]
|
LL | | #[track_caller]
|
||||||
LL | | fn c() {}
|
LL | | fn c() {}
|
||||||
| |_
|
| |_^
|
||||||
|
|
|
|
||||||
help: turn these into doc comments by removing one `/`
|
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 | / //// between attributes
|
||||||
LL | | #[allow(dead_code)]
|
LL | | #[allow(dead_code)]
|
||||||
LL | | fn g() {}
|
LL | | fn g() {}
|
||||||
| |_
|
| |_^
|
||||||
|
|
|
|
||||||
help: make this a doc comment by removing one `/`
|
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 | / //// not very start of contents
|
||||||
LL | | fn h() {}
|
LL | | fn h() {}
|
||||||
| |_
|
| |_^
|
||||||
|
|
|
|
||||||
help: make this a doc comment by removing one `/`
|
help: make this a doc comment by removing one `/`
|
||||||
|
|
|
|
||||||
|
@ -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 | / //// borked doc comment on the first line. doesn't combust!
|
||||||
LL | | fn a() {}
|
LL | | fn a() {}
|
||||||
| |_
|
| |_^
|
||||||
|
|
|
|
||||||
= note: `-D clippy::four-forward-slashes` implied by `-D warnings`
|
= note: `-D clippy::four-forward-slashes` implied by `-D warnings`
|
||||||
= help: to override `-D warnings` add `#[allow(clippy::four_forward_slashes)]`
|
= help: to override `-D warnings` add `#[allow(clippy::four_forward_slashes)]`
|
||||||
|
@ -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 | | /// how the thing works, possibly with doclinks and so one,
|
||||||
LL | | /// and probably spanning a many rows. Blablabla, it needs to be over
|
LL | | /// and probably spanning a many rows. Blablabla, it needs to be over
|
||||||
LL | | /// 200 characters so I needed to write something longeeeeeeer.
|
LL | | /// 200 characters so I needed to write something longeeeeeeer.
|
||||||
| |_
|
| |_^
|
||||||
|
|
|
|
||||||
= note: `-D clippy::too-long-first-doc-paragraph` implied by `-D warnings`
|
= 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)]`
|
= help: to override `-D warnings` add `#[allow(clippy::too_long_first_doc_paragraph)]`
|
||||||
|
@ -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 | / /// 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 | | /// a dolor in, pellentesque aliquet enim. Cras nec maximus sem. Mauris arcu libero,
|
||||||
LL | | /// gravida non lacinia at, rhoncus eu lacus.
|
LL | | /// gravida non lacinia at, rhoncus eu lacus.
|
||||||
| |_
|
| |_^
|
||||||
|
|
||||||
error: first doc comment paragraph is too long
|
error: first doc comment paragraph is too long
|
||||||
--> tests/ui/too_long_first_doc_paragraph.rs:36:1
|
--> 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 | | /// 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 | | /// a dolor in, pellentesque aliquet enim. Cras nec maximus sem. Mauris arcu libero,
|
||||||
LL | | /// gravida non lacinia at, rhoncus eu lacus.
|
LL | | /// gravida non lacinia at, rhoncus eu lacus.
|
||||||
| |_
|
| |_^
|
||||||
|
|
||||||
error: aborting due to 3 previous errors
|
error: aborting due to 3 previous errors
|
||||||
|
|
||||||
|
@ -130,7 +130,7 @@ warning: could not parse code block as Rust code
|
|||||||
LL | /// \____/
|
LL | /// \____/
|
||||||
| _________^
|
| _________^
|
||||||
LL | | ///
|
LL | | ///
|
||||||
| |_
|
| |_^
|
||||||
|
|
|
|
||||||
= note: error from rustc: unknown start of token: \
|
= note: error from rustc: unknown start of token: \
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<svg width="818px" height="848px" xmlns="http://www.w3.org/2000/svg">
|
<svg width="743px" height="848px" xmlns="http://www.w3.org/2000/svg">
|
||||||
<style>
|
<style>
|
||||||
.fg { fill: #AAAAAA }
|
.fg { fill: #AAAAAA }
|
||||||
.bg { background: #000000 }
|
.bg { background: #000000 }
|
||||||
@ -21,7 +21,7 @@
|
|||||||
<text xml:space="preserve" class="container fg">
|
<text xml:space="preserve" class="container fg">
|
||||||
<tspan x="10px" y="28px"><tspan class="fg-ansi256-009 bold">error[E0308]</tspan><tspan class="bold">: `match` arms have incompatible types</tspan>
|
<tspan x="10px" y="28px"><tspan class="fg-ansi256-009 bold">error[E0308]</tspan><tspan class="bold">: `match` arms have incompatible types</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="46px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">--> </tspan><tspan>$DIR/huge_multispan_highlight.rs:96:18</tspan>
|
<tspan x="10px" y="46px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">--> </tspan><tspan>$DIR/huge_multispan_highlight.rs:99:18</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="64px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan>
|
<tspan x="10px" y="64px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
@ -31,7 +31,7 @@
|
|||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="118px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan><tspan> true => (</tspan>
|
<tspan x="10px" y="118px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan><tspan> true => (</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="136px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">_________________-</tspan>
|
<tspan x="10px" y="136px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold"> _________________-</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="154px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan><tspan> // last line shown in multispan header</tspan>
|
<tspan x="10px" y="154px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan><tspan> // last line shown in multispan header</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
@ -45,7 +45,7 @@
|
|||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="244px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan><tspan> false => "</tspan>
|
<tspan x="10px" y="244px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan><tspan> false => "</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="262px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan><tspan> </tspan><tspan class="fg-ansi256-009 bold">__________________^</tspan>
|
<tspan x="10px" y="262px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan><tspan> </tspan><tspan class="fg-ansi256-009 bold"> __________________^</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="280px"><tspan class="fg-ansi256-012 bold">...</tspan><tspan> </tspan><tspan class="fg-ansi256-009 bold">|</tspan>
|
<tspan x="10px" y="280px"><tspan class="fg-ansi256-012 bold">...</tspan><tspan> </tspan><tspan class="fg-ansi256-009 bold">|</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
@ -59,7 +59,7 @@
|
|||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="370px"><tspan class="fg-ansi256-009 bold">error[E0308]</tspan><tspan class="bold">: `match` arms have incompatible types</tspan>
|
<tspan x="10px" y="370px"><tspan class="fg-ansi256-009 bold">error[E0308]</tspan><tspan class="bold">: `match` arms have incompatible types</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="388px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">--> </tspan><tspan>$DIR/huge_multispan_highlight.rs:213:18</tspan>
|
<tspan x="10px" y="388px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">--> </tspan><tspan>$DIR/huge_multispan_highlight.rs:216:18</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="406px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan>
|
<tspan x="10px" y="406px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
@ -69,7 +69,7 @@
|
|||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="460px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan><tspan> true => (</tspan>
|
<tspan x="10px" y="460px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan><tspan> true => (</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="478px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">_________________-</tspan>
|
<tspan x="10px" y="478px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold"> _________________-</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="496px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan>
|
<tspan x="10px" y="496px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
@ -85,7 +85,7 @@
|
|||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="604px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan><tspan> false => "</tspan>
|
<tspan x="10px" y="604px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan><tspan> false => "</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="622px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan><tspan> </tspan><tspan class="fg-ansi256-009 bold">__________________^</tspan>
|
<tspan x="10px" y="622px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan><tspan> </tspan><tspan class="fg-ansi256-009 bold"> __________________^</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="640px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan><tspan> </tspan><tspan class="fg-ansi256-009 bold">|</tspan>
|
<tspan x="10px" y="640px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan><tspan> </tspan><tspan class="fg-ansi256-009 bold">|</tspan>
|
||||||
</tspan>
|
</tspan>
|
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 8.9 KiB |
@ -1,4 +1,7 @@
|
|||||||
//@ compile-flags: --error-format=human --color=always
|
//@ revisions: ascii unicode
|
||||||
|
//@ compile-flags: --color=always
|
||||||
|
//@[ascii] compile-flags: --error-format=human
|
||||||
|
//@[unicode] compile-flags: -Zunstable-options=yes --error-format=human-unicode
|
||||||
//@ ignore-windows
|
//@ ignore-windows
|
||||||
fn main() {
|
fn main() {
|
||||||
let _ = match true {
|
let _ = match true {
|
||||||
|
116
tests/ui/codemap_tests/huge_multispan_highlight.unicode.svg
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
<svg width="743px" height="848px" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<style>
|
||||||
|
.fg { fill: #AAAAAA }
|
||||||
|
.bg { background: #000000 }
|
||||||
|
.fg-ansi256-009 { fill: #FF5555 }
|
||||||
|
.fg-ansi256-012 { fill: #5555FF }
|
||||||
|
.container {
|
||||||
|
padding: 0 10px;
|
||||||
|
line-height: 18px;
|
||||||
|
}
|
||||||
|
.bold { font-weight: bold; }
|
||||||
|
tspan {
|
||||||
|
font: 14px SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;
|
||||||
|
white-space: pre;
|
||||||
|
line-height: 18px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<rect width="100%" height="100%" y="0" rx="4.5" class="bg" />
|
||||||
|
|
||||||
|
<text xml:space="preserve" class="container fg">
|
||||||
|
<tspan x="10px" y="28px"><tspan class="fg-ansi256-009 bold">error[E0308]</tspan><tspan class="bold">: `match` arms have incompatible types</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="46px"><tspan> </tspan><tspan class="fg-ansi256-012 bold"> ╭▸ </tspan><tspan>$DIR/huge_multispan_highlight.rs:99:18</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="64px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="82px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> let _ = match true {</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="100px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">──────────</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">`match` arms have incompatible types</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="118px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> true => (</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="136px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">┌─────────────────┘</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="154px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> // last line shown in multispan header</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="172px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">‡</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="190px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="208px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> ),</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="226px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">└─────────┘</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">this is found to be of type `()`</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="244px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> false => "</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="262px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> </tspan><tspan class="fg-ansi256-009 bold">┏━━━━━━━━━━━━━━━━━━┛</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="280px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">‡</tspan><tspan> </tspan><tspan class="fg-ansi256-009 bold">┃</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="298px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> </tspan><tspan class="fg-ansi256-009 bold">┃</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="316px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> </tspan><tspan class="fg-ansi256-009 bold">┃</tspan><tspan> ",</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="334px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">╰╴</tspan><tspan class="fg-ansi256-009 bold">┗━━━━━━━━━┛</tspan><tspan> </tspan><tspan class="fg-ansi256-009 bold">expected `()`, found `&str`</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="352px">
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="370px"><tspan class="fg-ansi256-009 bold">error[E0308]</tspan><tspan class="bold">: `match` arms have incompatible types</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="388px"><tspan> </tspan><tspan class="fg-ansi256-012 bold"> ╭▸ </tspan><tspan>$DIR/huge_multispan_highlight.rs:216:18</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="406px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="424px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> let _ = match true {</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="442px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">──────────</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">`match` arms have incompatible types</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="460px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> true => (</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="478px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">┌─────────────────┘</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="496px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="514px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> 1 // last line shown in multispan header</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="532px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">‡</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="550px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="568px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> ),</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="586px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">└─────────┘</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">this is found to be of type `{integer}`</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="604px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> false => "</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="622px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> </tspan><tspan class="fg-ansi256-009 bold">┏━━━━━━━━━━━━━━━━━━┛</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="640px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> </tspan><tspan class="fg-ansi256-009 bold">┃</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="658px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> </tspan><tspan class="fg-ansi256-009 bold">┃</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="676px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> </tspan><tspan class="fg-ansi256-009 bold">┃</tspan><tspan> 1 last line shown in multispan</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="694px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">‡</tspan><tspan> </tspan><tspan class="fg-ansi256-009 bold">┃</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="712px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> </tspan><tspan class="fg-ansi256-009 bold">┃</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="730px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> </tspan><tspan class="fg-ansi256-009 bold">┃</tspan><tspan> ",</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="748px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">╰╴</tspan><tspan class="fg-ansi256-009 bold">┗━━━━━━━━━┛</tspan><tspan> </tspan><tspan class="fg-ansi256-009 bold">expected integer, found `&str`</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="766px">
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="784px"><tspan class="fg-ansi256-009 bold">error</tspan><tspan class="bold">: aborting due to 2 previous errors</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="802px">
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="820px"><tspan class="bold">For more information about this error, try `rustc --explain E0308`.</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="838px">
|
||||||
|
</tspan>
|
||||||
|
</text>
|
||||||
|
|
||||||
|
</svg>
|
After Width: | Height: | Size: 9.3 KiB |
@ -1,5 +1,5 @@
|
|||||||
error[E0271]: type mismatch resolving `<Result<Result<(), Result<Result<(), Result<Result<(), Option<{integer}>>, ...>>, ...>>, ...> as Future>::Error == Foo`
|
error[E0271]: type mismatch resolving `<Result<Result<(), Result<Result<(), Result<Result<(), Option<{integer}>>, ...>>, ...>>, ...> as Future>::Error == Foo`
|
||||||
--> $DIR/E0271.rs:18:5
|
--> $DIR/E0271.rs:20:5
|
||||||
|
|
|
|
||||||
LL | / Box::new(
|
LL | / Box::new(
|
||||||
LL | | Ok::<_, ()>(
|
LL | | Ok::<_, ()>(
|
||||||
@ -11,7 +11,7 @@ LL | | )
|
|||||||
| |_____^ type mismatch resolving `<Result<Result<(), Result<Result<(), ...>, ...>>, ...> as Future>::Error == Foo`
|
| |_____^ type mismatch resolving `<Result<Result<(), Result<Result<(), ...>, ...>>, ...> as Future>::Error == Foo`
|
||||||
|
|
|
|
||||||
note: expected this to be `Foo`
|
note: expected this to be `Foo`
|
||||||
--> $DIR/E0271.rs:8:18
|
--> $DIR/E0271.rs:10:18
|
||||||
|
|
|
|
||||||
LL | type Error = E;
|
LL | type Error = E;
|
||||||
| ^
|
| ^
|
@ -1,4 +1,6 @@
|
|||||||
//@ compile-flags: --diagnostic-width=40
|
//@ revisions: ascii unicode
|
||||||
|
//@[ascii] compile-flags: --diagnostic-width=40
|
||||||
|
//@[unicode] compile-flags: -Zunstable-options=yes --error-format=human-unicode --diagnostic-width=40
|
||||||
//@ normalize-stderr-test: "long-type-\d+" -> "long-type-hash"
|
//@ normalize-stderr-test: "long-type-\d+" -> "long-type-hash"
|
||||||
trait Future {
|
trait Future {
|
||||||
type Error;
|
type Error;
|
||||||
@ -15,7 +17,7 @@ impl<T> Future for Option<T> {
|
|||||||
struct Foo;
|
struct Foo;
|
||||||
|
|
||||||
fn foo() -> Box<dyn Future<Error=Foo>> {
|
fn foo() -> Box<dyn Future<Error=Foo>> {
|
||||||
Box::new( //~ ERROR E0271
|
Box::new( //[ascii]~ ERROR E0271
|
||||||
Ok::<_, ()>(
|
Ok::<_, ()>(
|
||||||
Err::<(), _>(
|
Err::<(), _>(
|
||||||
Ok::<_, ()>(
|
Ok::<_, ()>(
|
||||||
|
22
tests/ui/diagnostic-width/E0271.unicode.stderr
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
error[E0271]: type mismatch resolving `<Result<Result<(), Result<Result<(), Result<Result<(), Option<{integer}>>, ...>>, ...>>, ...> as Future>::Error == Foo`
|
||||||
|
╭▸ $DIR/E0271.rs:20:5
|
||||||
|
│
|
||||||
|
LL │ ┏ Box::new(
|
||||||
|
LL │ ┃ Ok::<_, ()>(
|
||||||
|
LL │ ┃ Err::<(), _>(
|
||||||
|
LL │ ┃ Ok::<_, ()>(
|
||||||
|
‡ ┃
|
||||||
|
LL │ ┃ )
|
||||||
|
LL │ ┃ )
|
||||||
|
│ ┗━━━━━┛ type mismatch resolving `<Result<Result<(), Result<Result<(), ...>, ...>>, ...> as Future>::Error == Foo`
|
||||||
|
╰╴
|
||||||
|
note: expected this to be `Foo`
|
||||||
|
╭▸ $DIR/E0271.rs:10:18
|
||||||
|
│
|
||||||
|
LL │ type Error = E;
|
||||||
|
│ ━
|
||||||
|
╰ note: required for the cast from `Box<Result<Result<(), Result<Result<(), Result<Result<(), Option<{integer}>>, ()>>, ()>>, ()>>` to `Box<(dyn Future<Error = Foo> + 'static)>`
|
||||||
|
|
||||||
|
error: aborting due to 1 previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0271`.
|
@ -1,5 +1,5 @@
|
|||||||
error[E0308]: mismatched types
|
error[E0308]: mismatched types
|
||||||
--> $DIR/flag-human.rs:7:17
|
--> $DIR/flag-human.rs:9:17
|
||||||
|
|
|
|
||||||
LL | ..._: () = 42;
|
LL | ..._: () = 42;
|
||||||
| -- ^^ expected `()`, found integer
|
| -- ^^ expected `()`, found integer
|
@ -1,9 +1,11 @@
|
|||||||
//@ compile-flags: --diagnostic-width=20
|
//@ revisions: ascii unicode
|
||||||
|
//@[ascii] compile-flags: --diagnostic-width=20
|
||||||
|
//@[unicode] compile-flags: -Zunstable-options=yes --error-format=human-unicode --diagnostic-width=20
|
||||||
|
|
||||||
// This test checks that `-Z output-width` effects the human error output by restricting it to an
|
// This test checks that `-Z output-width` effects the human error output by restricting it to an
|
||||||
// arbitrarily low value so that the effect is visible.
|
// arbitrarily low value so that the effect is visible.
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let _: () = 42;
|
let _: () = 42;
|
||||||
//~^ ERROR mismatched types
|
//[ascii]~^ ERROR mismatched types
|
||||||
}
|
}
|
||||||
|
11
tests/ui/diagnostic-width/flag-human.unicode.stderr
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
error[E0308]: mismatched types
|
||||||
|
╭▸ $DIR/flag-human.rs:9:17
|
||||||
|
│
|
||||||
|
LL │ …t _: () = 42;
|
||||||
|
│ ┬─ ━━ expected `()`, found integer
|
||||||
|
│ │
|
||||||
|
╰╴ expected due to this
|
||||||
|
|
||||||
|
error: aborting due to 1 previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0308`.
|
@ -1,5 +1,5 @@
|
|||||||
error[E0308]: mismatched types
|
error[E0308]: mismatched types
|
||||||
--> $DIR/long-E0308.rs:44:9
|
--> $DIR/long-E0308.rs:46:9
|
||||||
|
|
|
|
||||||
LL | let x: Atype<
|
LL | let x: Atype<
|
||||||
| _____________-
|
| _____________-
|
||||||
@ -20,11 +20,11 @@ LL | | ))))))))))))))))))))))))))))));
|
|||||||
|
|
|
|
||||||
= note: expected struct `Atype<Btype<..., ...>, ...>`
|
= note: expected struct `Atype<Btype<..., ...>, ...>`
|
||||||
found enum `Result<Result<..., ...>, ...>`
|
found enum `Result<Result<..., ...>, ...>`
|
||||||
= note: the full type name has been written to '$TEST_BUILD_DIR/diagnostic-width/long-E0308/long-E0308.long-type-hash.txt'
|
= note: the full type name has been written to '$TEST_BUILD_DIR/diagnostic-width/long-E0308.ascii/long-E0308.long-type-hash.txt'
|
||||||
= note: consider using `--verbose` to print the full type name to the console
|
= note: consider using `--verbose` to print the full type name to the console
|
||||||
|
|
||||||
error[E0308]: mismatched types
|
error[E0308]: mismatched types
|
||||||
--> $DIR/long-E0308.rs:57:26
|
--> $DIR/long-E0308.rs:59:26
|
||||||
|
|
|
|
||||||
LL | ))))))))))))))))) == Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(O...
|
LL | ))))))))))))))))) == Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(O...
|
||||||
| __________________________^
|
| __________________________^
|
||||||
@ -36,11 +36,11 @@ LL | | ))))))))))))))))))))))));
|
|||||||
|
|
|
|
||||||
= note: expected enum `Option<Result<..., ...>>`
|
= note: expected enum `Option<Result<..., ...>>`
|
||||||
found enum `Result<Result<..., ...>, ...>`
|
found enum `Result<Result<..., ...>, ...>`
|
||||||
= note: the full type name has been written to '$TEST_BUILD_DIR/diagnostic-width/long-E0308/long-E0308.long-type-hash.txt'
|
= note: the full type name has been written to '$TEST_BUILD_DIR/diagnostic-width/long-E0308.ascii/long-E0308.long-type-hash.txt'
|
||||||
= note: consider using `--verbose` to print the full type name to the console
|
= note: consider using `--verbose` to print the full type name to the console
|
||||||
|
|
||||||
error[E0308]: mismatched types
|
error[E0308]: mismatched types
|
||||||
--> $DIR/long-E0308.rs:88:9
|
--> $DIR/long-E0308.rs:90:9
|
||||||
|
|
|
|
||||||
LL | let x: Atype<
|
LL | let x: Atype<
|
||||||
| ____________-
|
| ____________-
|
||||||
@ -56,11 +56,11 @@ LL | | > = ();
|
|||||||
|
|
|
|
||||||
= note: expected struct `Atype<Btype<..., ...>, ...>`
|
= note: expected struct `Atype<Btype<..., ...>, ...>`
|
||||||
found unit type `()`
|
found unit type `()`
|
||||||
= note: the full type name has been written to '$TEST_BUILD_DIR/diagnostic-width/long-E0308/long-E0308.long-type-hash.txt'
|
= note: the full type name has been written to '$TEST_BUILD_DIR/diagnostic-width/long-E0308.ascii/long-E0308.long-type-hash.txt'
|
||||||
= note: consider using `--verbose` to print the full type name to the console
|
= note: consider using `--verbose` to print the full type name to the console
|
||||||
|
|
||||||
error[E0308]: mismatched types
|
error[E0308]: mismatched types
|
||||||
--> $DIR/long-E0308.rs:91:17
|
--> $DIR/long-E0308.rs:93:17
|
||||||
|
|
|
|
||||||
LL | let _: () = Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(O...
|
LL | let _: () = Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(O...
|
||||||
| ____________--___^
|
| ____________--___^
|
||||||
@ -74,7 +74,7 @@ LL | | ))))))))))))))))))))))));
|
|||||||
|
|
|
|
||||||
= note: expected unit type `()`
|
= note: expected unit type `()`
|
||||||
found enum `Result<Result<..., ...>, ...>`
|
found enum `Result<Result<..., ...>, ...>`
|
||||||
= note: the full type name has been written to '$TEST_BUILD_DIR/diagnostic-width/long-E0308/long-E0308.long-type-hash.txt'
|
= note: the full type name has been written to '$TEST_BUILD_DIR/diagnostic-width/long-E0308.ascii/long-E0308.long-type-hash.txt'
|
||||||
= note: consider using `--verbose` to print the full type name to the console
|
= note: consider using `--verbose` to print the full type name to the console
|
||||||
|
|
||||||
error: aborting due to 4 previous errors
|
error: aborting due to 4 previous errors
|
@ -1,4 +1,6 @@
|
|||||||
//@ compile-flags: --diagnostic-width=60 -Zwrite-long-types-to-disk=yes
|
//@ revisions: ascii unicode
|
||||||
|
//@[ascii] compile-flags: --diagnostic-width=60 -Zwrite-long-types-to-disk=yes
|
||||||
|
//@[unicode] compile-flags: -Zunstable-options=yes --json=diagnostic-unicode --diagnostic-width=60 -Zwrite-long-types-to-disk=yes
|
||||||
//@ normalize-stderr-test: "long-type-\d+" -> "long-type-hash"
|
//@ normalize-stderr-test: "long-type-\d+" -> "long-type-hash"
|
||||||
|
|
||||||
mod a {
|
mod a {
|
||||||
|
82
tests/ui/diagnostic-width/long-E0308.unicode.stderr
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
error[E0308]: mismatched types
|
||||||
|
╭▸ $DIR/long-E0308.rs:46:9
|
||||||
|
│
|
||||||
|
LL │ let x: Atype<
|
||||||
|
│ ┌─────────────┘
|
||||||
|
LL │ │ Btype<
|
||||||
|
LL │ │ Ctype<
|
||||||
|
LL │ │ Atype<
|
||||||
|
‡ │
|
||||||
|
LL │ │ i32
|
||||||
|
LL │ │ > = Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(O…
|
||||||
|
│ │┏━━━━━│━━━┛
|
||||||
|
│ └┃─────┤
|
||||||
|
│ ┃ expected due to this
|
||||||
|
LL │ ┃ Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(O…
|
||||||
|
LL │ ┃ Ok("")
|
||||||
|
LL │ ┃ ))))))))))))))))))))))))))))))
|
||||||
|
LL │ ┃ ))))))))))))))))))))))))))))));
|
||||||
|
│ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ expected `Atype<Btype<..., ...>, ...>`, found `Result<Result<..., ...>, ...>`
|
||||||
|
│
|
||||||
|
├ note: expected struct `Atype<Btype<..., ...>, ...>`
|
||||||
|
│ found enum `Result<Result<..., ...>, ...>`
|
||||||
|
├ note: the full type name has been written to '$TEST_BUILD_DIR/diagnostic-width/long-E0308.unicode/long-E0308.long-type-hash.txt'
|
||||||
|
╰ note: consider using `--verbose` to print the full type name to the console
|
||||||
|
|
||||||
|
error[E0308]: mismatched types
|
||||||
|
╭▸ $DIR/long-E0308.rs:59:26
|
||||||
|
│
|
||||||
|
LL │ ))))))))))))))))) == Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(…
|
||||||
|
│ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━┛
|
||||||
|
LL │ ┃ Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok…
|
||||||
|
LL │ ┃ Ok(Ok(Ok(Ok(Ok(Ok(Ok("")))))))
|
||||||
|
LL │ ┃ ))))))))))))))))))))))))))))))
|
||||||
|
LL │ ┃ ))))))))))))))))))))))));
|
||||||
|
│ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ expected `Option<Result<..., ...>>`, found `Result<Result<..., ...>, ...>`
|
||||||
|
│
|
||||||
|
├ note: expected enum `Option<Result<..., ...>>`
|
||||||
|
│ found enum `Result<Result<..., ...>, ...>`
|
||||||
|
├ note: the full type name has been written to '$TEST_BUILD_DIR/diagnostic-width/long-E0308.unicode/long-E0308.long-type-hash.txt'
|
||||||
|
╰ note: consider using `--verbose` to print the full type name to the console
|
||||||
|
|
||||||
|
error[E0308]: mismatched types
|
||||||
|
╭▸ $DIR/long-E0308.rs:90:9
|
||||||
|
│
|
||||||
|
LL │ let x: Atype<
|
||||||
|
│ ┌────────────┘
|
||||||
|
LL │ │ Btype<
|
||||||
|
LL │ │ Ctype<
|
||||||
|
LL │ │ Atype<
|
||||||
|
‡ │
|
||||||
|
LL │ │ i32
|
||||||
|
LL │ │ > = ();
|
||||||
|
│ │ │ ━━ expected `Atype<Btype<..., ...>, ...>`, found `()`
|
||||||
|
│ └─────┤
|
||||||
|
│ expected due to this
|
||||||
|
│
|
||||||
|
├ note: expected struct `Atype<Btype<..., ...>, ...>`
|
||||||
|
│ found unit type `()`
|
||||||
|
├ note: the full type name has been written to '$TEST_BUILD_DIR/diagnostic-width/long-E0308.unicode/long-E0308.long-type-hash.txt'
|
||||||
|
╰ note: consider using `--verbose` to print the full type name to the console
|
||||||
|
|
||||||
|
error[E0308]: mismatched types
|
||||||
|
╭▸ $DIR/long-E0308.rs:93:17
|
||||||
|
│
|
||||||
|
LL │ let _: () = Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(…
|
||||||
|
│ ┏━━━━━━━━━━━━┬─━━━┛
|
||||||
|
│ ┃ │
|
||||||
|
│ ┃ expected due to this
|
||||||
|
LL │ ┃ Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok…
|
||||||
|
LL │ ┃ Ok(Ok(Ok(Ok(Ok(Ok(Ok("")))))))
|
||||||
|
LL │ ┃ ))))))))))))))))))))))))))))))
|
||||||
|
LL │ ┃ ))))))))))))))))))))))));
|
||||||
|
│ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ expected `()`, found `Result<Result<..., ...>, ...>`
|
||||||
|
│
|
||||||
|
├ note: expected unit type `()`
|
||||||
|
│ found enum `Result<Result<..., ...>, ...>`
|
||||||
|
├ note: the full type name has been written to '$TEST_BUILD_DIR/diagnostic-width/long-E0308.unicode/long-E0308.long-type-hash.txt'
|
||||||
|
╰ note: consider using `--verbose` to print the full type name to the console
|
||||||
|
|
||||||
|
error: aborting due to 4 previous errors
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0308`.
|
@ -1,5 +1,5 @@
|
|||||||
error[E0369]: cannot add `&str` to `&str`
|
error[E0369]: cannot add `&str` to `&str`
|
||||||
--> $DIR/non-1-width-unicode-multiline-label.rs:5:260
|
--> $DIR/non-1-width-unicode-multiline-label.rs:7:260
|
||||||
|
|
|
|
||||||
LL | ...ཽཾཿ྄ཱྀྀྂྃ྅྆྇ྈྉྊྋྌྍྎྏྐྑྒྒྷྔྕྖྗྙྚྛྜྜྷྞྟྠྡྡྷྣྤྥྦྦྷྨྩྪྫྫྷྭྮྯྰྱྲླྴྵྶྷྸྐྵྺྻྼ྾྿࿀࿁࿂࿃࿄࿅࿆࿇...࿋࿌࿎࿏࿐࿑࿒࿓࿔࿕࿖࿗࿘࿙࿚"; let _a = unicode_is_fun + " really fun!";
|
LL | ...ཽཾཿ྄ཱྀྀྂྃ྅྆྇ྈྉྊྋྌྍྎྏྐྑྒྒྷྔྕྖྗྙྚྛྜྜྷྞྟྠྡྡྷྣྤྥྦྦྷྨྩྪྫྫྷྭྮྯྰྱྲླྴྵྶྷྸྐྵྺྻྼ྾྿࿀࿁࿂࿃࿄࿅࿆࿇...࿋࿌࿎࿏࿐࿑࿒࿓࿔࿕࿖࿗࿘࿙࿚"; let _a = unicode_is_fun + " really fun!";
|
||||||
| -------------- ^ -------------- &str
|
| -------------- ^ -------------- &str
|
@ -1,7 +1,9 @@
|
|||||||
|
//@ revisions: ascii unicode
|
||||||
|
//@[unicode] compile-flags: -Zunstable-options=yes --error-format=human-unicode
|
||||||
// ignore-tidy-linelength
|
// ignore-tidy-linelength
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let unicode_is_fun = "‱ஹ௸௵꧄.ဪ꧅⸻𒈙𒐫﷽𒌄𒈟𒍼𒁎𒀱𒌧𒅃 𒈓𒍙𒊎𒄡𒅌𒁏𒀰𒐪𒐩𒈙𒐫𪚥";
|
let unicode_is_fun = "‱ஹ௸௵꧄.ဪ꧅⸻𒈙𒐫﷽𒌄𒈟𒍼𒁎𒀱𒌧𒅃 𒈓𒍙𒊎𒄡𒅌𒁏𒀰𒐪𒐩𒈙𒐫𪚥";
|
||||||
let _ = "ༀ༁༂༃༄༅༆༇༈༉༊་༌།༎༏༐༑༒༓༔༕༖༗༘༙༚༛༜༝༞༟༠༡༢༣༤༥༦༧༨༩༪༫༬༭༮༯༰༱༲༳༴༵༶༷༸༹༺༻༼༽༾༿ཀཁགགྷངཅཆཇཉཊཋཌཌྷཎཏཐདདྷནཔཕབབྷམཙཚཛཛྷཝཞཟའཡརལཤཥསཧཨཀྵཪཫཬཱཱཱིིུུྲྀཷླྀཹེཻོཽཾཿ྄ཱྀྀྂྃ྅྆྇ྈྉྊྋྌྍྎྏྐྑྒྒྷྔྕྖྗྙྚྛྜྜྷྞྟྠྡྡྷྣྤྥྦྦྷྨྩྪྫྫྷྭྮྯྰྱྲླྴྵྶྷྸྐྵྺྻྼ྾྿࿀࿁࿂࿃࿄࿅࿆࿇࿈࿉࿊࿋࿌࿎࿏࿐࿑࿒࿓࿔࿕࿖࿗࿘࿙࿚"; let _a = unicode_is_fun + " really fun!";
|
let _ = "ༀ༁༂༃༄༅༆༇༈༉༊་༌།༎༏༐༑༒༓༔༕༖༗༘༙༚༛༜༝༞༟༠༡༢༣༤༥༦༧༨༩༪༫༬༭༮༯༰༱༲༳༴༵༶༷༸༹༺༻༼༽༾༿ཀཁགགྷངཅཆཇཉཊཋཌཌྷཎཏཐདདྷནཔཕབབྷམཙཚཛཛྷཝཞཟའཡརལཤཥསཧཨཀྵཪཫཬཱཱཱིིུུྲྀཷླྀཹེཻོཽཾཿ྄ཱྀྀྂྃ྅྆྇ྈྉྊྋྌྍྎྏྐྑྒྒྷྔྕྖྗྙྚྛྜྜྷྞྟྠྡྡྷྣྤྥྦྦྷྨྩྪྫྫྷྭྮྯྰྱྲླྴྵྶྷྸྐྵྺྻྼ྾྿࿀࿁࿂࿃࿄࿅࿆࿇࿈࿉࿊࿋࿌࿎࿏࿐࿑࿒࿓࿔࿕࿖࿗࿘࿙࿚"; let _a = unicode_is_fun + " really fun!";
|
||||||
//~^ ERROR cannot add `&str` to `&str`
|
//[ascii]~^ ERROR cannot add `&str` to `&str`
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,18 @@
|
|||||||
|
error[E0369]: cannot add `&str` to `&str`
|
||||||
|
╭▸ $DIR/non-1-width-unicode-multiline-label.rs:7:260
|
||||||
|
│
|
||||||
|
LL │ …ཻོཽཾཿ྄ཱྀྀྂྃ྅྆྇ྈྉྊྋྌྍྎྏྐྑྒྒྷྔྕྖྗྙྚྛྜྜྷྞྟྠྡྡྷྣྤྥྦྦྷྨྩྪྫྫྷྭྮྯྰྱྲླྴྵྶྷྸྐྵྺྻྼ྾྿࿀࿁࿂࿃࿄࿅࿆࿇࿈࿉…࿋࿌࿎࿏࿐࿑࿒࿓࿔࿕࿖࿗࿘࿙࿚"; let _a = unicode_is_fun + " really fun!";
|
||||||
|
│ ┬───────────── ┯ ────────────── &str
|
||||||
|
│ │ │
|
||||||
|
│ │ `+` cannot be used to concatenate two `&str` strings
|
||||||
|
│ &str
|
||||||
|
│
|
||||||
|
╰ note: string concatenation requires an owned `String` on the left
|
||||||
|
help: create an owned `String` from a string reference
|
||||||
|
╭╴
|
||||||
|
LL │ let _ = "ༀ༁༂༃༄༅༆༇༈༉༊་༌།༎༏༐༑༒༓༔༕༖༗༘༙༚༛༜༝༞༟༠༡༢༣༤༥༦༧༨༩༪༫༬༭༮༯༰༱༲༳༴༵༶༷༸༹༺༻༼༽༾༿ཀཁགགྷངཅཆཇཉཊཋཌཌྷཎཏཐདདྷནཔཕབབྷམཙཚཛཛྷཝཞཟའཡརལཤཥསཧཨཀྵཪཫཬཱཱཱིིུུྲྀཷླྀཹེཻོཽཾཿ྄ཱྀྀྂྃ྅྆྇ྈྉྊྋྌྍྎྏྐྑྒྒྷྔྕྖྗྙྚྛྜྜྷྞྟྠྡྡྷྣྤྥྦྦྷྨྩྪྫྫྷྭྮྯྰྱྲླྴྵྶྷྸྐྵྺྻྼ྾྿࿀࿁࿂࿃࿄࿅࿆࿇࿈࿉࿊࿋࿌࿎࿏࿐࿑࿒࿓࿔࿕࿖࿗࿘࿙࿚"; let _a = unicode_is_fun.to_owned() + " really fun!";
|
||||||
|
╰╴ +++++++++++
|
||||||
|
|
||||||
|
error: aborting due to 1 previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0369`.
|
@ -1,5 +1,5 @@
|
|||||||
error[E0308]: mismatched types
|
error[E0308]: mismatched types
|
||||||
--> $DIR/non-whitespace-trimming-2.rs:4:311
|
--> $DIR/non-whitespace-trimming-2.rs:6:311
|
||||||
|
|
|
|
||||||
LL | ...13; let _: usize = 14; let _: usize = 15; let _: () = 42; let _: usize = 0; let _: usize = 1; let _: usize = 2; let _: usize = 3; let ...
|
LL | ...13; let _: usize = 14; let _: usize = 15; let _: () = 42; let _: usize = 0; let _: usize = 1; let _: usize = 2; let _: usize = 3; let ...
|
||||||
| -- ^^ expected `()`, found integer
|
| -- ^^ expected `()`, found integer
|
@ -1,6 +1,8 @@
|
|||||||
|
//@ revisions: ascii unicode
|
||||||
|
//@[unicode] compile-flags: -Zunstable-options=yes --error-format=human-unicode
|
||||||
// ignore-tidy-linelength
|
// ignore-tidy-linelength
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let _: usize = 0; let _: usize = 1; let _: usize = 2; let _: usize = 3; let _: usize = 4; let _: usize = 5; let _: usize = 6; let _: usize = 7; let _: usize = 8; let _: usize = 9; let _: usize = 10; let _: usize = 11; let _: usize = 12; let _: usize = 13; let _: usize = 14; let _: usize = 15; let _: () = 42; let _: usize = 0; let _: usize = 1; let _: usize = 2; let _: usize = 3; let _: usize = 4; let _: usize = 5; let _: usize = 6; let _: usize = 7; let _: usize = 8; let _: usize = 9; let _: usize = 10; let _: usize = 11; let _: usize = 12; let _: usize = 13; let _: usize = 14; let _: usize = 15;
|
let _: usize = 0; let _: usize = 1; let _: usize = 2; let _: usize = 3; let _: usize = 4; let _: usize = 5; let _: usize = 6; let _: usize = 7; let _: usize = 8; let _: usize = 9; let _: usize = 10; let _: usize = 11; let _: usize = 12; let _: usize = 13; let _: usize = 14; let _: usize = 15; let _: () = 42; let _: usize = 0; let _: usize = 1; let _: usize = 2; let _: usize = 3; let _: usize = 4; let _: usize = 5; let _: usize = 6; let _: usize = 7; let _: usize = 8; let _: usize = 9; let _: usize = 10; let _: usize = 11; let _: usize = 12; let _: usize = 13; let _: usize = 14; let _: usize = 15;
|
||||||
//~^ ERROR mismatched types
|
//[ascii]~^ ERROR mismatched types
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,11 @@
|
|||||||
|
error[E0308]: mismatched types
|
||||||
|
╭▸ $DIR/non-whitespace-trimming-2.rs:6:311
|
||||||
|
│
|
||||||
|
LL │ …= 13; let _: usize = 14; let _: usize = 15; let _: () = 42; let _: usize = 0; let _: usize = 1; let _: usize = 2; let _: usize = 3; let _:…
|
||||||
|
│ ┬─ ━━ expected `()`, found integer
|
||||||
|
│ │
|
||||||
|
╰╴ expected due to this
|
||||||
|
|
||||||
|
error: aborting due to 1 previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0308`.
|
@ -49,7 +49,7 @@
|
|||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="262px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan><tspan> fn query(_: fn(Box<(dyn Any + Send + '_)>) -> Pin<Box<(</tspan>
|
<tspan x="10px" y="262px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan><tspan> fn query(_: fn(Box<(dyn Any + Send + '_)>) -> Pin<Box<(</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="280px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">____</tspan><tspan class="fg-ansi256-010 bold">^^^^^</tspan><tspan class="fg-ansi256-012 bold">_-</tspan>
|
<tspan x="10px" y="280px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold"> ____</tspan><tspan class="fg-ansi256-010 bold">^^^^^</tspan><tspan class="fg-ansi256-012 bold">_-</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="298px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan><tspan> dyn Future<Output = Result<Box<(dyn Any + 'static)>, String>> + Send + 'static</tspan>
|
<tspan x="10px" y="298px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">|</tspan><tspan> dyn Future<Output = Result<Box<(dyn Any + 'static)>, String>> + Send + 'static</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB |
@ -50,7 +50,7 @@
|
|||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="262px"><tspan class="fg-ansi256-014 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-014 bold">|</tspan><tspan> fn query(_: fn(Box<(dyn Any + Send + '_)>) -> Pin<Box<(</tspan>
|
<tspan x="10px" y="262px"><tspan class="fg-ansi256-014 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-014 bold">|</tspan><tspan> fn query(_: fn(Box<(dyn Any + Send + '_)>) -> Pin<Box<(</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="280px"><tspan> </tspan><tspan class="fg-ansi256-014 bold">|</tspan><tspan> </tspan><tspan class="fg-ansi256-014 bold">____</tspan><tspan class="fg-ansi256-010 bold">^^^^^</tspan><tspan class="fg-ansi256-014 bold">_-</tspan>
|
<tspan x="10px" y="280px"><tspan> </tspan><tspan class="fg-ansi256-014 bold">|</tspan><tspan> </tspan><tspan class="fg-ansi256-014 bold"> ____</tspan><tspan class="fg-ansi256-010 bold">^^^^^</tspan><tspan class="fg-ansi256-014 bold">_-</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
<tspan x="10px" y="298px"><tspan class="fg-ansi256-014 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-014 bold">|</tspan><tspan> </tspan><tspan class="fg-ansi256-014 bold">|</tspan><tspan> dyn Future<Output = Result<Box<(dyn Any + 'static)>, String>> + Send + 'static</tspan>
|
<tspan x="10px" y="298px"><tspan class="fg-ansi256-014 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-014 bold">|</tspan><tspan> </tspan><tspan class="fg-ansi256-014 bold">|</tspan><tspan> dyn Future<Output = Result<Box<(dyn Any + 'static)>, String>> + Send + 'static</tspan>
|
||||||
</tspan>
|
</tspan>
|
||||||
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.6 KiB |
21
tests/ui/error-emitter/unicode-output.rs
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
//@ compile-flags: -Zunstable-options=yes --error-format=human-unicode --color=always
|
||||||
|
//@ edition:2018
|
||||||
|
//@ only-linux
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
72
tests/ui/error-emitter/unicode-output.svg
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
<svg width="785px" height="434px" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<style>
|
||||||
|
.fg { fill: #AAAAAA }
|
||||||
|
.bg { background: #000000 }
|
||||||
|
.fg-ansi256-009 { fill: #FF5555 }
|
||||||
|
.fg-ansi256-010 { fill: #55FF55 }
|
||||||
|
.fg-ansi256-012 { fill: #5555FF }
|
||||||
|
.fg-magenta { fill: #AA00AA }
|
||||||
|
.container {
|
||||||
|
padding: 0 10px;
|
||||||
|
line-height: 18px;
|
||||||
|
}
|
||||||
|
.bold { font-weight: bold; }
|
||||||
|
tspan {
|
||||||
|
font: 14px SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;
|
||||||
|
white-space: pre;
|
||||||
|
line-height: 18px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<rect width="100%" height="100%" y="0" rx="4.5" class="bg" />
|
||||||
|
|
||||||
|
<text xml:space="preserve" class="container fg">
|
||||||
|
<tspan x="10px" y="28px"><tspan class="fg-ansi256-009 bold">error[E0308]</tspan><tspan class="bold">: mismatched types</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="46px"><tspan> </tspan><tspan class="fg-ansi256-012 bold"> ╭▸ </tspan><tspan>$DIR/unicode-output.rs:20:11</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="64px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="82px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> query(wrapped_fn);</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="100px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">┬────</tspan><tspan> </tspan><tspan class="fg-ansi256-009 bold">━━━━━━━━━━</tspan><tspan> </tspan><tspan class="fg-ansi256-009 bold">one type is more general than the other</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="118px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="136px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">arguments to this function are incorrect</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="154px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="172px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">╰ </tspan><tspan class="bold">note</tspan><tspan>: expected fn pointer `</tspan><tspan class="fg-magenta bold">for<'a> </tspan><tspan>fn(Box<</tspan><tspan class="fg-magenta bold">(dyn Any + Send + 'a)</tspan><tspan>>) -> Pin<_>`</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="190px"><tspan> found fn item `fn(Box<</tspan><tspan class="fg-magenta bold">(dyn Any + Send + 'static)</tspan><tspan>>) -> Pin<_> {wrapped_fn}`</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="208px"><tspan class="fg-ansi256-010 bold">note</tspan><tspan>: function defined here</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="226px"><tspan> </tspan><tspan class="fg-ansi256-012 bold"> ╭▸ </tspan><tspan>$DIR/unicode-output.rs:9:4</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="244px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="262px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> fn query(_: fn(Box<(dyn Any + Send + '_)>) -> Pin<Box<(</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="280px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">┌────</tspan><tspan class="fg-ansi256-010 bold">━━━━━</tspan><tspan class="fg-ansi256-012 bold">─┘</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="298px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> dyn Future<Output = Result<Box<(dyn Any + 'static)>, String>> + Send + 'static</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="316px"><tspan class="fg-ansi256-012 bold">LL</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> </tspan><tspan class="fg-ansi256-012 bold">│</tspan><tspan> )>>) {}</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="334px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">╰╴</tspan><tspan class="fg-ansi256-012 bold">└───┘</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="352px">
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="370px"><tspan class="fg-ansi256-009 bold">error</tspan><tspan class="bold">: aborting due to 1 previous error</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="388px">
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="406px"><tspan class="bold">For more information about this error, try `rustc --explain E0308`.</tspan>
|
||||||
|
</tspan>
|
||||||
|
<tspan x="10px" y="424px">
|
||||||
|
</tspan>
|
||||||
|
</text>
|
||||||
|
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.6 KiB |
@ -15,7 +15,7 @@ error: character constant must be escaped: `\n`
|
|||||||
LL | '
|
LL | '
|
||||||
| ______^
|
| ______^
|
||||||
LL | | ';
|
LL | | ';
|
||||||
| |_
|
| |_^
|
||||||
|
|
|
|
||||||
help: escape the character
|
help: escape the character
|
||||||
|
|
|
|
||||||
|