Skip to content

Commit 7f3b84b

Browse files
committed
Peek for panic message in test output
1 parent 6de838c commit 7f3b84b

File tree

7 files changed

+34
-10
lines changed

7 files changed

+34
-10
lines changed

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ authors = ["rust-analyzer team"]
1212
[profile.dev]
1313
# Disabling debug info speeds up builds a bunch,
1414
# and we don't rely on it for debugging that much.
15-
debug = 1
15+
debug = 0
1616

1717
[profile.dev.package]
1818
# These speed up local tests.

crates/hir-ty/src/mir/eval.rs

+11
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,17 @@ impl MirEvalError {
428428
}
429429
Ok(())
430430
}
431+
432+
pub fn is_panic(&self) -> Option<&str> {
433+
let mut err = self;
434+
while let MirEvalError::InFunction(e, _) = err {
435+
err = e;
436+
}
437+
match err {
438+
MirEvalError::Panic(msg) => Some(msg),
439+
_ => None,
440+
}
441+
}
431442
}
432443

433444
impl std::fmt::Debug for MirEvalError {

crates/hir-ty/src/mir/eval/tests.rs

+11-2
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,13 @@ fn check_pass_and_stdio(ra_fixture: &str, expected_stdout: &str, expected_stderr
7373
}
7474
}
7575

76+
fn check_panic(ra_fixture: &str, expected_panic: &str) {
77+
let (db, file_ids) = TestDB::with_many_files(ra_fixture);
78+
let file_id = *file_ids.last().unwrap();
79+
let e = eval_main(&db, file_id).unwrap_err();
80+
assert_eq!(e.is_panic().unwrap_or_else(|| panic!("unexpected error: {:?}", e)), expected_panic);
81+
}
82+
7683
#[test]
7784
fn function_with_extern_c_abi() {
7885
check_pass(
@@ -96,13 +103,14 @@ fn panic_fmt() {
96103
// -> core::panicking::const_panic_fmt
97104
// -> #[rustc_const_panic_str] core::panicking::panic_display (hooked by CTFE for builtin panic)
98105
// -> Err(ConstEvalError::Panic)
99-
check_pass(
106+
check_panic(
100107
r#"
101108
//- minicore: fmt, panic
102109
fn main() {
103110
panic!("hello, world!");
104111
}
105112
"#,
113+
"hello, world!",
106114
);
107115
}
108116

@@ -112,14 +120,15 @@ fn panic_display() {
112120
// -> panic_2021 (builtin macro redirection)
113121
// -> #[rustc_const_panic_str] core::panicking::panic_display (hooked by CTFE for builtin panic)
114122
// -> Err(ConstEvalError::Panic)
115-
check_pass(
123+
check_panic(
116124
r#"
117125
//- minicore: fmt, panic
118126
119127
fn main() {
120128
panic!("{}", "hello, world!");
121129
}
122130
"#,
131+
"hello, world!",
123132
);
124133
}
125134

crates/ide-diagnostics/src/tests.rs

+1
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,7 @@ fn minicore_smoke_test() {
293293
// This should be ignored since we conditionally remove code which creates single item use with braces
294294
config.disabled.insert("unused_braces".to_owned());
295295
config.disabled.insert("unused_variables".to_owned());
296+
config.disabled.insert("remove-unnecessary-else".to_owned());
296297
check_diagnostics_with_config(config, &source);
297298
}
298299

crates/ide/src/hover/tests.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -7864,8 +7864,8 @@ impl Iterator for S {
78647864
file_id: FileId(
78657865
1,
78667866
),
7867-
full_range: 6290..6498,
7868-
focus_range: 6355..6361,
7867+
full_range: 6729..6937,
7868+
focus_range: 6794..6800,
78697869
name: "Future",
78707870
kind: Trait,
78717871
container_name: "future",
@@ -7878,8 +7878,8 @@ impl Iterator for S {
78787878
file_id: FileId(
78797879
1,
78807880
),
7881-
full_range: 7128..7594,
7882-
focus_range: 7172..7180,
7881+
full_range: 7567..8033,
7882+
focus_range: 7611..7619,
78837883
name: "Iterator",
78847884
kind: Trait,
78857885
container_name: "iterator",

crates/ide/src/syntax_highlighting/test_data/highlight_strings.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -158,9 +158,9 @@
158158
<span class="macro">println</span><span class="macro_bang">!</span><span class="parenthesis macro">(</span><span class="string_literal macro">"</span><span class="format_specifier">{</span><span class="variable">ничоси</span><span class="format_specifier">}</span><span class="string_literal macro">"</span><span class="comma macro">,</span> <span class="variable declaration macro">ничоси</span> <span class="operator macro">=</span> <span class="numeric_literal macro">92</span><span class="parenthesis macro">)</span><span class="semicolon">;</span>
159159

160160
<span class="macro">println</span><span class="macro_bang">!</span><span class="parenthesis macro">(</span><span class="string_literal macro">"</span><span class="format_specifier">{</span><span class="format_specifier">:</span><span class="variable">x</span><span class="format_specifier">?</span><span class="format_specifier">}</span><span class="string_literal macro"> </span><span class="format_specifier">{</span><span class="format_specifier">}</span><span class="string_literal macro"> "</span><span class="comma macro">,</span> <span class="unresolved_reference macro">thingy</span><span class="comma macro">,</span> <span class="unresolved_reference macro">n2</span><span class="parenthesis macro">)</span><span class="semicolon">;</span>
161-
<span class="macro default_library library">panic</span><span class="macro_bang">!</span><span class="parenthesis macro">(</span><span class="string_literal macro">"</span><span class="format_specifier">{</span><span class="format_specifier">}</span><span class="string_literal macro">"</span><span class="comma macro">,</span> <span class="numeric_literal macro">0</span><span class="parenthesis macro">)</span><span class="semicolon">;</span>
161+
<span class="macro default_library library">panic</span><span class="macro_bang">!</span><span class="parenthesis macro">(</span><span class="string_literal macro">"{}"</span><span class="comma macro">,</span> <span class="numeric_literal macro">0</span><span class="parenthesis macro">)</span><span class="semicolon">;</span>
162162
<span class="macro default_library library">panic</span><span class="macro_bang">!</span><span class="parenthesis macro">(</span><span class="string_literal macro">"more </span><span class="format_specifier">{</span><span class="format_specifier">}</span><span class="string_literal macro">"</span><span class="comma macro">,</span> <span class="numeric_literal macro">1</span><span class="parenthesis macro">)</span><span class="semicolon">;</span>
163-
<span class="macro default_library library">assert</span><span class="macro_bang">!</span><span class="parenthesis macro">(</span><span class="bool_literal macro">true</span><span class="comma macro">,</span> <span class="string_literal macro">"</span><span class="format_specifier">{</span><span class="format_specifier">}</span><span class="string_literal macro">"</span><span class="comma macro">,</span> <span class="numeric_literal macro">1</span><span class="parenthesis macro">)</span><span class="semicolon">;</span>
163+
<span class="macro default_library library">assert</span><span class="macro_bang">!</span><span class="parenthesis macro">(</span><span class="bool_literal macro">true</span><span class="comma macro">,</span> <span class="string_literal macro">"{}"</span><span class="comma macro">,</span> <span class="numeric_literal macro">1</span><span class="parenthesis macro">)</span><span class="semicolon">;</span>
164164
<span class="macro default_library library">assert</span><span class="macro_bang">!</span><span class="parenthesis macro">(</span><span class="bool_literal macro">true</span><span class="comma macro">,</span> <span class="string_literal macro">"</span><span class="format_specifier">{</span><span class="format_specifier">}</span><span class="string_literal macro"> asdasd"</span><span class="comma macro">,</span> <span class="numeric_literal macro">1</span><span class="parenthesis macro">)</span><span class="semicolon">;</span>
165165
<span class="macro">toho</span><span class="macro_bang">!</span><span class="parenthesis macro">(</span><span class="string_literal macro">"{}fmt"</span><span class="comma macro">,</span> <span class="numeric_literal macro">0</span><span class="parenthesis macro">)</span><span class="semicolon">;</span>
166166
<span class="keyword">let</span> <span class="variable declaration">i</span><span class="colon">:</span> <span class="builtin_type">u64</span> <span class="operator">=</span> <span class="numeric_literal">3</span><span class="semicolon">;</span>

crates/test-utils/src/minicore.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
//! env: option
2929
//! eq: sized
3030
//! error: fmt
31-
//! fmt: option, result, transmute, coerce_unsized
31+
//! fmt: option, result, transmute, coerce_unsized, copy, clone, derive
3232
//! fn:
3333
//! from: sized
3434
//! future: pin
@@ -919,6 +919,7 @@ pub mod fmt {
919919
type Opaque;
920920
}
921921

922+
#[derive(Copy, Clone)]
922923
#[lang = "format_argument"]
923924
pub struct Argument<'a> {
924925
value: &'a Opaque,
@@ -986,6 +987,7 @@ pub mod fmt {
986987
}
987988
}
988989

990+
#[derive(Copy, Clone)]
989991
#[lang = "format_arguments"]
990992
pub struct Arguments<'a> {
991993
pieces: &'a [&'static str],
@@ -1421,6 +1423,7 @@ mod panicking {
14211423
}
14221424
// endregion:panic
14231425

1426+
#[macro_use]
14241427
mod macros {
14251428
// region:panic
14261429
#[macro_export]

0 commit comments

Comments
 (0)