Make working with codegen less annoying
We probably should look into removing `xtask codegen` altogether. The test workflow works perfectly for package.json config. There are two things preventing that: * Lint completions are generated on demand. * Docs are not committed to the repository.
This commit is contained in:
parent
071dde1c1d
commit
0f6f458cc1
@ -32,7 +32,7 @@ pub(crate) use self::{
|
||||
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
|
||||
pub(crate) enum Mode {
|
||||
Overwrite,
|
||||
Verify,
|
||||
Ensure,
|
||||
}
|
||||
|
||||
impl flags::Codegen {
|
||||
@ -59,12 +59,19 @@ fn update(path: &Path, contents: &str, mode: Mode) -> Result<()> {
|
||||
}
|
||||
_ => (),
|
||||
}
|
||||
if mode == Mode::Verify {
|
||||
anyhow::bail!("`{}` is not up-to-date", path.display());
|
||||
}
|
||||
let return_error = match mode {
|
||||
Mode::Overwrite => false,
|
||||
Mode::Ensure => true,
|
||||
};
|
||||
eprintln!("updating {}", path.display());
|
||||
write_file(path, contents)?;
|
||||
return Ok(());
|
||||
|
||||
return if return_error {
|
||||
let path = path.strip_prefix(&project_root()).unwrap_or(path);
|
||||
anyhow::bail!("`{}` was not up-to-date, updating", path.display());
|
||||
} else {
|
||||
Ok(())
|
||||
};
|
||||
|
||||
fn normalize(s: &str) -> String {
|
||||
s.replace("\r\n", "\n")
|
||||
|
@ -89,11 +89,16 @@ fn run_rustfmt(mode: Mode) -> Result<()> {
|
||||
let _dir = pushd(project_root())?;
|
||||
let _e = pushenv("RUSTUP_TOOLCHAIN", "stable");
|
||||
ensure_rustfmt()?;
|
||||
let check = match mode {
|
||||
Mode::Overwrite => &[][..],
|
||||
Mode::Verify => &["--", "--check"],
|
||||
match mode {
|
||||
Mode::Overwrite => cmd!("cargo fmt").run()?,
|
||||
Mode::Ensure => {
|
||||
let res = cmd!("cargo fmt -- --check").run();
|
||||
if !res.is_ok() {
|
||||
let _ = cmd!("cargo fmt").run();
|
||||
}
|
||||
res?;
|
||||
}
|
||||
};
|
||||
cmd!("cargo fmt {check...}").run()?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
@ -13,30 +13,22 @@ use crate::{
|
||||
|
||||
#[test]
|
||||
fn generated_grammar_is_fresh() {
|
||||
if let Err(error) = codegen::generate_syntax(Mode::Verify) {
|
||||
panic!("{}. Please update it by running `cargo xtask codegen`", error);
|
||||
}
|
||||
codegen::generate_syntax(Mode::Ensure).unwrap()
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn generated_tests_are_fresh() {
|
||||
if let Err(error) = codegen::generate_parser_tests(Mode::Verify) {
|
||||
panic!("{}. Please update tests by running `cargo xtask codegen`", error);
|
||||
}
|
||||
codegen::generate_parser_tests(Mode::Ensure).unwrap()
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn generated_assists_are_fresh() {
|
||||
if let Err(error) = codegen::generate_assists_tests(Mode::Verify) {
|
||||
panic!("{}. Please update assists by running `cargo xtask codegen`", error);
|
||||
}
|
||||
codegen::generate_assists_tests(Mode::Ensure).unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn check_code_formatting() {
|
||||
if let Err(error) = run_rustfmt(Mode::Verify) {
|
||||
panic!("{}. Please format the code by running `cargo format`", error);
|
||||
}
|
||||
run_rustfmt(Mode::Ensure).unwrap()
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
Loading…
x
Reference in New Issue
Block a user