Skip to content

Commit

Permalink
Auto merge of #88493 - chenyukang:fix-duplicated-diagnostic, r=estebank
Browse files Browse the repository at this point in the history
Fix #88256 remove duplicated diagnostics

Fix #88256
  • Loading branch information
bors committed Sep 6, 2021
2 parents 7849e3e + ca27f03 commit 8f3aa5e
Show file tree
Hide file tree
Showing 11 changed files with 59 additions and 65 deletions.
49 changes: 48 additions & 1 deletion compiler/rustc_errors/src/diagnostic.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,10 @@ use rustc_lint_defs::Applicability;
use rustc_serialize::json::Json;
use rustc_span::{MultiSpan, Span, DUMMY_SP};
use std::fmt;
use std::hash::{Hash, Hasher};

#[must_use]
#[derive(Clone, Debug, PartialEq, Hash, Encodable, Decodable)]
#[derive(Clone, Debug, Encodable, Decodable)]
pub struct Diagnostic {
pub level: Level,
pub message: Vec<(String, Style)>,
Expand All @@ -24,6 +25,10 @@ pub struct Diagnostic {
/// as a sort key to sort a buffer of diagnostics. By default, it is the primary span of
/// `span` if there is one. Otherwise, it is `DUMMY_SP`.
pub sort_span: Span,

/// If diagnostic is from Lint, custom hash function ignores notes
/// otherwise hash is based on the all the fields
pub is_lint: bool,
}

#[derive(Clone, Debug, PartialEq, Eq, Hash, Encodable, Decodable)]
Expand Down Expand Up @@ -91,6 +96,7 @@ impl Diagnostic {
children: vec![],
suggestions: vec![],
sort_span: DUMMY_SP,
is_lint: false,
}
}

Expand Down Expand Up @@ -558,6 +564,11 @@ impl Diagnostic {
self
}

pub fn set_is_lint(&mut self) -> &mut Self {
self.is_lint = true;
self
}

pub fn code(&mut self, s: DiagnosticId) -> &mut Self {
self.code = Some(s);
self
Expand Down Expand Up @@ -617,6 +628,42 @@ impl Diagnostic {
let sub = SubDiagnostic { level, message, span, render_span };
self.children.push(sub);
}

/// Fields used for Hash, and PartialEq trait
fn keys(
&self,
) -> (
&Level,
&Vec<(String, Style)>,
&Option<DiagnosticId>,
&MultiSpan,
&Vec<CodeSuggestion>,
Option<&Vec<SubDiagnostic>>,
) {
(
&self.level,
&self.message,
&self.code,
&self.span,
&self.suggestions,
(if self.is_lint { None } else { Some(&self.children) }),
)
}
}

impl Hash for Diagnostic {
fn hash<H>(&self, state: &mut H)
where
H: Hasher,
{
self.keys().hash(state);
}
}

impl PartialEq for Diagnostic {
fn eq(&self, other: &Self) -> bool {
self.keys() == other.keys()
}
}

impl SubDiagnostic {
Expand Down
1 change: 1 addition & 0 deletions compiler/rustc_errors/src/diagnostic_builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -242,6 +242,7 @@ impl<'a> DiagnosticBuilder<'a> {
sp: S,
msg: &str,
) -> &mut Self);
forward!(pub fn set_is_lint(&mut self,) -> &mut Self);

/// See [`Diagnostic::multipart_suggestion()`].
pub fn multipart_suggestion(
Expand Down
1 change: 1 addition & 0 deletions compiler/rustc_middle/src/lint.rs
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,7 @@ impl<'a> LintDiagnosticBuilder<'a> {
/// Return the inner DiagnosticBuilder, first setting the primary message to `msg`.
pub fn build(mut self, msg: &str) -> DiagnosticBuilder<'a> {
self.0.set_primary_message(msg);
self.0.set_is_lint();
self.0
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@ fn forbid_first(num: i32) -> i32 {
#![deny(unused)]
//~^ ERROR: deny(unused) incompatible with previous forbid
//~| WARNING being phased out
//~| ERROR: deny(unused) incompatible with previous forbid
//~| WARNING being phased out
#![warn(unused)]
#![allow(unused)]

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,5 @@ LL | #![forbid(forbidden_lint_groups)]
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
= note: for more information, see issue #81670 <https://github.com/rust-lang/rust/issues/81670>

error: deny(unused) incompatible with previous forbid
--> $DIR/issue-70819-dont-override-forbid-in-same-scope.rs:21:13
|
LL | #![forbid(unused)]
| ------ `forbid` level set here
LL | #![deny(unused)]
| ^^^^^^ overruled by previous forbid
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
= note: for more information, see issue #81670 <https://github.com/rust-lang/rust/issues/81670>

error: aborting due to 2 previous errors
error: aborting due to previous error

3 changes: 1 addition & 2 deletions src/test/ui/lint/outer-forbid.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,9 @@
#![forbid(unused, non_snake_case)]
#![forbid(forbidden_lint_groups)]

#[allow(unused_variables)] //~ ERROR incompatible with previous
#[allow(unused_variables)]
//~^ ERROR incompatible with previous
//~| WARNING this was previously accepted by the compiler
//~| WARNING this was previously accepted by the compiler
fn foo() {}

#[allow(unused)] //~ ERROR incompatible with previous
Expand Down
18 changes: 3 additions & 15 deletions src/test/ui/lint/outer-forbid.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ LL | #![forbid(forbidden_lint_groups)]
= note: for more information, see issue #81670 <https://github.com/rust-lang/rust/issues/81670>

error: allow(unused) incompatible with previous forbid
--> $DIR/outer-forbid.rs:26:9
--> $DIR/outer-forbid.rs:25:9
|
LL | #![forbid(unused, non_snake_case)]
| ------ `forbid` level set here
Expand All @@ -28,26 +28,14 @@ LL | #[allow(unused)]
= note: for more information, see issue #81670 <https://github.com/rust-lang/rust/issues/81670>

error[E0453]: allow(nonstandard_style) incompatible with previous forbid
--> $DIR/outer-forbid.rs:30:9
--> $DIR/outer-forbid.rs:29:9
|
LL | #![forbid(unused, non_snake_case)]
| -------------- `forbid` level set here
...
LL | #[allow(nonstandard_style)]
| ^^^^^^^^^^^^^^^^^ overruled by previous forbid

error: allow(unused_variables) incompatible with previous forbid
--> $DIR/outer-forbid.rs:20:9
|
LL | #![forbid(unused, non_snake_case)]
| ------ `forbid` level set here
...
LL | #[allow(unused_variables)]
| ^^^^^^^^^^^^^^^^ overruled by previous forbid
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
= note: for more information, see issue #81670 <https://github.com/rust-lang/rust/issues/81670>

error: aborting due to 4 previous errors
error: aborting due to 3 previous errors

For more information about this error, try `rustc --explain E0453`.
20 changes: 1 addition & 19 deletions src/tools/clippy/tests/ui/match_same_arms.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -106,24 +106,6 @@ LL | 1 => 2,
| ^
= help: ...or consider changing the match arm bodies

error: this `match` has identical arm bodies
--> $DIR/match_same_arms.rs:33:14
|
LL | 3 => 2, //~ ERROR 3rd matched arms have same body
| ^
|
note: same as this
--> $DIR/match_same_arms.rs:32:14
|
LL | 2 => 2, //~ ERROR 2nd matched arms have same body
| ^
help: consider refactoring into `2 | 3`
--> $DIR/match_same_arms.rs:32:9
|
LL | 2 => 2, //~ ERROR 2nd matched arms have same body
| ^
= help: ...or consider changing the match arm bodies

error: this `match` has identical arm bodies
--> $DIR/match_same_arms.rs:50:55
|
Expand All @@ -142,5 +124,5 @@ LL | CommandInfo::BuiltIn { name, .. } => name.to_string(),
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
= help: ...or consider changing the match arm bodies

error: aborting due to 8 previous errors
error: aborting due to 7 previous errors

8 changes: 1 addition & 7 deletions src/tools/clippy/tests/ui/modulo_one.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,6 @@ LL | const ONE: u32 = 1 * 1;
|
= note: `-D clippy::identity-op` implied by `-D warnings`

error: the operation is ineffective. Consider reducing it to `1`
--> $DIR/modulo_one.rs:13:22
|
LL | const ONE: u32 = 1 * 1;
| ^^^^^

error: any number modulo 1 will be 0
--> $DIR/modulo_one.rs:17:5
|
Expand All @@ -70,5 +64,5 @@ error: any number modulo -1 will panic/overflow or result in 0
LL | INT_MIN % NEG_ONE; // also caught by rustc
| ^^^^^^^^^^^^^^^^^

error: aborting due to 11 previous errors
error: aborting due to 10 previous errors

Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,6 @@ LL | self.x == other.y && self.y == other.y && self.z == other.z
|
= note: `-D clippy::suspicious-operation-groupings` implied by `-D warnings`

error: this sequence of operators looks suspiciously like a bug
--> $DIR/suspicious_operation_groupings.rs:14:9
|
LL | self.x == other.y && self.y == other.y && self.z == other.z
| ^^^^^^^^^^^^^^^^^ help: did you mean: `self.x == other.x`

error: this sequence of operators looks suspiciously like a bug
--> $DIR/suspicious_operation_groupings.rs:27:20
|
Expand Down Expand Up @@ -162,5 +156,5 @@ error: this sequence of operators looks suspiciously like a bug
LL | -(if -s1.a < -s2.a && -s1.a < -s2.b { s1.c } else { s2.a })
| ^^^^^^^^^^^^^ help: did you mean: `-s1.b < -s2.b`

error: aborting due to 27 previous errors
error: aborting due to 26 previous errors

1 change: 1 addition & 0 deletions src/tools/rustfmt/src/syntux/session.rs
Original file line number Diff line number Diff line change
Expand Up @@ -311,6 +311,7 @@ mod tests {
suggestions: vec![],
span: span.unwrap_or_else(MultiSpan::new),
sort_span: DUMMY_SP,
is_lint: false,
}
}

Expand Down

0 comments on commit 8f3aa5e

Please sign in to comment.