diff options
| author | Zack M. Davis <code@zackmdavis.net> | 2016-10-26 21:03:18 -0700 |
|---|---|---|
| committer | Zack M. Davis <code@zackmdavis.net> | 2016-10-26 22:42:20 -0700 |
| commit | 8d1da8452cc725443c43c44e0f4ec64a73944cdf (patch) | |
| tree | 347f6476a0142dc0b8a87fca88b1b1a44cf0636e | |
| parent | 95805ee6275b4fe12cdb8845e699e7a6aa6b26eb (diff) | |
| download | rust-8d1da8452cc725443c43c44e0f4ec64a73944cdf.tar.gz rust-8d1da8452cc725443c43c44e0f4ec64a73944cdf.zip | |
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.
| -rw-r--r-- | src/librustc/session/mod.rs | 20 | ||||
| -rw-r--r-- | src/test/compile-fail/lint-group-style.rs | 2 | ||||
| -rw-r--r-- | src/test/compile-fail/lint-unconditional-recursion.rs | 14 |
3 files changed, 30 insertions, 6 deletions
diff --git a/src/librustc/session/mod.rs b/src/librustc/session/mod.rs index f4029fde471..154fe9af79a 100644 --- a/src/librustc/session/mod.rs +++ b/src/librustc/session/mod.rs @@ -294,7 +294,8 @@ impl Session { } /// Analogous to calling `.span_note` on the given DiagnosticBuilder, but - /// deduplicates on span and message for this `Session`. + /// deduplicates on span and message for this `Session` if we're not + /// outputting in JSON mode. // // FIXME: if the need arises for one-time diagnostics other than // `span_note`, we almost certainly want to generalize this @@ -303,10 +304,19 @@ impl Session { pub fn diag_span_note_once<'a, 'b>(&'a self, diag_builder: &'b mut DiagnosticBuilder<'a>, span: Span, message: &str) { - let span_message = (span, message.to_owned()); - let fresh = self.one_time_diagnostics.borrow_mut().insert(span_message); - if fresh { - diag_builder.span_note(span, &message); + match self.opts.error_format { + // when outputting JSON for tool consumption, the tool might want + // the duplicates + config::ErrorOutputType::Json => { + diag_builder.span_note(span, &message); + }, + _ => { + let span_message = (span, message.to_owned()); + let fresh = self.one_time_diagnostics.borrow_mut().insert(span_message); + if fresh { + diag_builder.span_note(span, &message); + } + } } } diff --git a/src/test/compile-fail/lint-group-style.rs b/src/test/compile-fail/lint-group-style.rs index a88e0c63ac3..393e46ab539 100644 --- a/src/test/compile-fail/lint-group-style.rs +++ b/src/test/compile-fail/lint-group-style.rs @@ -20,6 +20,7 @@ mod test { #[forbid(bad_style)] //~^ NOTE lint level defined here + //~^^ NOTE lint level defined here mod bad { fn CamelCase() {} //~ ERROR function `CamelCase` should have a snake case name @@ -29,6 +30,7 @@ mod test { mod warn { #![warn(bad_style)] //~^ NOTE lint level defined here + //~| NOTE lint level defined here fn CamelCase() {} //~ WARN function `CamelCase` should have a snake case name diff --git a/src/test/compile-fail/lint-unconditional-recursion.rs b/src/test/compile-fail/lint-unconditional-recursion.rs index bee5a2c45be..94e189aa47f 100644 --- a/src/test/compile-fail/lint-unconditional-recursion.rs +++ b/src/test/compile-fail/lint-unconditional-recursion.rs @@ -10,7 +10,19 @@ #![deny(unconditional_recursion)] //~^ NOTE lint level defined here - +//~| NOTE lint level defined here +//~| NOTE lint level defined here +//~| NOTE lint level defined here +//~| NOTE lint level defined here +//~| NOTE lint level defined here +//~| NOTE lint level defined here +//~| NOTE lint level defined here +//~| NOTE lint level defined here +//~| NOTE lint level defined here +//~| NOTE lint level defined here +//~| NOTE lint level defined here +//~| NOTE lint level defined here +//~| NOTE lint level defined here #![allow(dead_code)] fn foo() { //~ ERROR function cannot return without recurring foo(); //~ NOTE recursive call site |
