lintcheck: filter out messages that come from cargo-metadata errors or contain absolute paths to rustc source files

The latter is especially annoying because the paths would change every time we bumped the pinned nightly version.
This commit is contained in:
Matthias Krüger 2021-02-15 23:13:41 +01:00
parent 8f1cceb6ff
commit 028692b46a

View File

@ -225,13 +225,36 @@ fn run_clippy_lints(&self, cargo_clippy_path: &PathBuf) -> Vec<ClippyWarning> {
let warnings: Vec<ClippyWarning> = output_lines let warnings: Vec<ClippyWarning> = output_lines
.into_iter() .into_iter()
// get all clippy warnings and ICEs // get all clippy warnings and ICEs
.filter(|line| line.contains("clippy::") || line.contains("internal compiler error: ")) .filter(|line| filter_clippy_warnings(&line))
.map(|json_msg| parse_json_message(json_msg, &self)) .map(|json_msg| parse_json_message(json_msg, &self))
.collect(); .collect();
warnings warnings
} }
} }
/// takes a single json-formatted clippy warnings and returns true (we are interested in that line)
/// or false (we aren't)
fn filter_clippy_warnings(line: &str) -> bool {
// we want to collect ICEs because clippy might have crashed.
// these are summarized later
if line.contains("internal compiler error: ") {
return true;
}
// in general, we want all clippy warnings
// however due to some kind of bug, sometimes there are absolute paths
// to libcore files inside the message
// or we end up with cargo-metadata output (https://github.com/rust-lang/rust-clippy/issues/6508)
// filter out these message to avoid unnecessary noise in the logs
if line.contains("clippy::")
&& !(line.contains("could not read cargo metadata")
|| (line.contains(".rustup") && line.contains("toolchains")))
{
return true;
}
false
}
/// Builds clippy inside the repo to make sure we have a clippy executable we can use. /// Builds clippy inside the repo to make sure we have a clippy executable we can use.
fn build_clippy() { fn build_clippy() {
Command::new("cargo") Command::new("cargo")