393: Add a fuzzing subcommand r=matklad a=DJMcNab

Part of https://github.com/rust-analyzer/rust-analyzer/issues/61#issuecomment-450641045.

Co-authored-by: DJMcNab <36049421+djmcnab@users.noreply.github.com>
This commit is contained in:
bors[bot] 2018-12-31 13:16:09 +00:00
commit 700b334a28
3 changed files with 35 additions and 7 deletions

View file

@ -1,10 +1,16 @@
[alias]
# Automatically generates the ast and syntax kinds files
gen-syntax = "run --package tools --bin tools -- gen-syntax"
gen-tests = "run --package tools --bin tools -- gen-tests"
gen-syntax = "run --package tools --bin tools -- gen-syntax"
# Extracts the tests from
gen-tests = "run --package tools --bin tools -- gen-tests"
# Installs the visual studio code extension
install-code = "run --package tools --bin tools -- install-code"
format = "run --package tools --bin tools -- format"
format-hook = "run --package tools --bin tools -- format-hook"
# Formats the full repository or installs the git hook to do it automatically.
format = "run --package tools --bin tools -- format"
format-hook = "run --package tools --bin tools -- format-hook"
# Runs the fuzzing test suite (currently only parser)
fuzz-tests = "run --package tools --bin tools -- fuzz-tests"
render-test = "run --package ra_cli -- render-test"
parse = "run --package ra_cli -- parse"
render-test = "run --package ra_cli -- render-test"
# Parse a file. This should be piped the file contents
parse = "run --package ra_cli -- parse"

View file

@ -139,3 +139,20 @@ pub fn install_format_hook() -> Result<()> {
}
Ok(())
}
pub fn run_fuzzer() -> Result<()> {
match Command::new("cargo")
.args(&["fuzz", "--help"])
.stderr(Stdio::null())
.stdout(Stdio::null())
.status()
{
Ok(status) if status.success() => (),
_ => run("cargo install cargo-fuzz", ".")?,
};
run(
"rustup run nightly -- cargo fuzz run parser",
"./crates/ra_syntax",
)
}

View file

@ -7,7 +7,10 @@ use std::{
use clap::{App, Arg, SubCommand};
use failure::bail;
use tools::{collect_tests, generate, install_format_hook, run, run_rustfmt, Mode, Overwrite, Result, Test, Verify, project_root};
use tools::{
collect_tests, generate,install_format_hook, run, run_rustfmt,
Mode, Overwrite, Result, Test, Verify, project_root, run_fuzzer
};
const GRAMMAR_DIR: &str = "crates/ra_syntax/src/grammar";
const OK_INLINE_TESTS_DIR: &str = "crates/ra_syntax/tests/data/parser/inline/ok";
@ -27,6 +30,7 @@ fn main() -> Result<()> {
.subcommand(SubCommand::with_name("install-code"))
.subcommand(SubCommand::with_name("format"))
.subcommand(SubCommand::with_name("format-hook"))
.subcommand(SubCommand::with_name("fuzz-tests"))
.get_matches();
let mode = if matches.is_present("verify") {
Verify
@ -42,6 +46,7 @@ fn main() -> Result<()> {
"gen-syntax" => generate(Overwrite)?,
"format" => run_rustfmt(mode)?,
"format-hook" => install_format_hook()?,
"fuzz-tests" => run_fuzzer()?,
_ => unreachable!(),
}
Ok(())