Implement cargo lint to run clippy

This commit is contained in:
Alan Du 2019-06-03 09:43:06 -04:00
parent d1b9fa446a
commit a181fd318b
3 changed files with 34 additions and 1 deletions

View file

@ -12,6 +12,9 @@ install-code = "run --package tools --bin tools -- install-code"
# Formats the full repository or installs the git hook to do it automatically. # Formats the full repository or installs the git hook to do it automatically.
format = "run --package tools --bin tools -- format" format = "run --package tools --bin tools -- format"
format-hook = "run --package tools --bin tools -- format-hook" format-hook = "run --package tools --bin tools -- format-hook"
# Run clippy
lint = "run --package tools --bin tools -- lint"
# Runs the fuzzing test suite (currently only parser) # Runs the fuzzing test suite (currently only parser)
fuzz-tests = "run --package tools --bin tools -- fuzz-tests" fuzz-tests = "run --package tools --bin tools -- fuzz-tests"

View file

@ -133,6 +133,34 @@ pub fn install_format_hook() -> Result<()> {
Ok(()) Ok(())
} }
pub fn run_clippy() -> Result<()> {
match Command::new("rustup")
.args(&["run", TOOLCHAIN, "--", "cargo", "clippy", "--version"])
.stderr(Stdio::null())
.stdout(Stdio::null())
.status()
{
Ok(status) if status.success() => (),
_ => install_clippy()?,
};
let allowed_lints = ["clippy::collapsible_if", "clippy::nonminimal_bool"];
run(
&format!(
"rustup run {} -- cargo clippy --all-features --all-targets -- -A {}",
TOOLCHAIN,
allowed_lints.join(" -A ")
),
".",
)?;
Ok(())
}
pub fn install_clippy() -> Result<()> {
run(&format!("rustup install {}", TOOLCHAIN), ".")?;
run(&format!("rustup component add clippy --toolchain {}", TOOLCHAIN), ".")
}
pub fn run_fuzzer() -> Result<()> { pub fn run_fuzzer() -> Result<()> {
match Command::new("cargo") match Command::new("cargo")
.args(&["fuzz", "--help"]) .args(&["fuzz", "--help"])

View file

@ -3,7 +3,7 @@ use core::str;
use failure::bail; use failure::bail;
use tools::{ use tools::{
generate, gen_tests, install_format_hook, run, run_with_output, run_rustfmt, generate, gen_tests, install_format_hook, run, run_with_output, run_rustfmt,
Overwrite, Result, run_fuzzer, Overwrite, Result, run_fuzzer, run_clippy,
}; };
use std::{path::{PathBuf}, env}; use std::{path::{PathBuf}, env};
@ -16,6 +16,7 @@ fn main() -> Result<()> {
.subcommand(SubCommand::with_name("format")) .subcommand(SubCommand::with_name("format"))
.subcommand(SubCommand::with_name("format-hook")) .subcommand(SubCommand::with_name("format-hook"))
.subcommand(SubCommand::with_name("fuzz-tests")) .subcommand(SubCommand::with_name("fuzz-tests"))
.subcommand(SubCommand::with_name("lint"))
.get_matches(); .get_matches();
match matches.subcommand_name().expect("Subcommand must be specified") { match matches.subcommand_name().expect("Subcommand must be specified") {
"install-code" => { "install-code" => {
@ -28,6 +29,7 @@ fn main() -> Result<()> {
"gen-syntax" => generate(Overwrite)?, "gen-syntax" => generate(Overwrite)?,
"format" => run_rustfmt(Overwrite)?, "format" => run_rustfmt(Overwrite)?,
"format-hook" => install_format_hook()?, "format-hook" => install_format_hook()?,
"lint" => run_clippy()?,
"fuzz-tests" => run_fuzzer()?, "fuzz-tests" => run_fuzzer()?,
_ => unreachable!(), _ => unreachable!(),
} }