Skip to content

Commit 8d1da84

Browse files
committed
one-time diagnostics are only one-time for humans, not JSON-eating tools
Jonathan D. Turner pointed out that we don't want to dedup in JSON mode. Since the compile-test runner uses JSON output, we regrettably need to revert the edits to existing tests; one imagines that testing for one-time diagnosticity for humans will have to be added as a UI test. This remains in the matter of #24690.
1 parent 95805ee commit 8d1da84

File tree

3 files changed

+30
-6
lines changed

3 files changed

+30
-6
lines changed

src/librustc/session/mod.rs

+15-5
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,8 @@ impl Session {
294294
}
295295

296296
/// Analogous to calling `.span_note` on the given DiagnosticBuilder, but
297-
/// deduplicates on span and message for this `Session`.
297+
/// deduplicates on span and message for this `Session` if we're not
298+
/// outputting in JSON mode.
298299
//
299300
// FIXME: if the need arises for one-time diagnostics other than
300301
// `span_note`, we almost certainly want to generalize this
@@ -303,10 +304,19 @@ impl Session {
303304
pub fn diag_span_note_once<'a, 'b>(&'a self,
304305
diag_builder: &'b mut DiagnosticBuilder<'a>,
305306
span: Span, message: &str) {
306-
let span_message = (span, message.to_owned());
307-
let fresh = self.one_time_diagnostics.borrow_mut().insert(span_message);
308-
if fresh {
309-
diag_builder.span_note(span, &message);
307+
match self.opts.error_format {
308+
// when outputting JSON for tool consumption, the tool might want
309+
// the duplicates
310+
config::ErrorOutputType::Json => {
311+
diag_builder.span_note(span, &message);
312+
},
313+
_ => {
314+
let span_message = (span, message.to_owned());
315+
let fresh = self.one_time_diagnostics.borrow_mut().insert(span_message);
316+
if fresh {
317+
diag_builder.span_note(span, &message);
318+
}
319+
}
310320
}
311321
}
312322

src/test/compile-fail/lint-group-style.rs

+2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ mod test {
2020

2121
#[forbid(bad_style)]
2222
//~^ NOTE lint level defined here
23+
//~^^ NOTE lint level defined here
2324
mod bad {
2425
fn CamelCase() {} //~ ERROR function `CamelCase` should have a snake case name
2526

@@ -29,6 +30,7 @@ mod test {
2930
mod warn {
3031
#![warn(bad_style)]
3132
//~^ NOTE lint level defined here
33+
//~| NOTE lint level defined here
3234

3335
fn CamelCase() {} //~ WARN function `CamelCase` should have a snake case name
3436

src/test/compile-fail/lint-unconditional-recursion.rs

+13-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,19 @@
1010

1111
#![deny(unconditional_recursion)]
1212
//~^ NOTE lint level defined here
13-
13+
//~| NOTE lint level defined here
14+
//~| NOTE lint level defined here
15+
//~| NOTE lint level defined here
16+
//~| NOTE lint level defined here
17+
//~| NOTE lint level defined here
18+
//~| NOTE lint level defined here
19+
//~| NOTE lint level defined here
20+
//~| NOTE lint level defined here
21+
//~| NOTE lint level defined here
22+
//~| NOTE lint level defined here
23+
//~| NOTE lint level defined here
24+
//~| NOTE lint level defined here
25+
//~| NOTE lint level defined here
1426
#![allow(dead_code)]
1527
fn foo() { //~ ERROR function cannot return without recurring
1628
foo(); //~ NOTE recursive call site

0 commit comments

Comments
 (0)