diff options
Diffstat (limited to 'xtask/src/lib.rs')
-rw-r--r-- | xtask/src/lib.rs | 52 |
1 files changed, 28 insertions, 24 deletions
diff --git a/xtask/src/lib.rs b/xtask/src/lib.rs index e790d995f..babec2dbd 100644 --- a/xtask/src/lib.rs +++ b/xtask/src/lib.rs | |||
@@ -2,7 +2,6 @@ | |||
2 | //! | 2 | //! |
3 | //! See https://github.com/matklad/cargo-xtask/ | 3 | //! See https://github.com/matklad/cargo-xtask/ |
4 | 4 | ||
5 | pub mod not_bash; | ||
6 | pub mod codegen; | 5 | pub mod codegen; |
7 | mod ast_src; | 6 | mod ast_src; |
8 | 7 | ||
@@ -19,11 +18,9 @@ use std::{ | |||
19 | }; | 18 | }; |
20 | 19 | ||
21 | use walkdir::{DirEntry, WalkDir}; | 20 | use walkdir::{DirEntry, WalkDir}; |
21 | use xshell::{cmd, pushd, pushenv}; | ||
22 | 22 | ||
23 | use crate::{ | 23 | use crate::codegen::Mode; |
24 | codegen::Mode, | ||
25 | not_bash::{pushd, pushenv}, | ||
26 | }; | ||
27 | 24 | ||
28 | pub use anyhow::{bail, Context as _, Result}; | 25 | pub use anyhow::{bail, Context as _, Result}; |
29 | 26 | ||
@@ -53,18 +50,19 @@ pub fn rust_files(path: &Path) -> impl Iterator<Item = PathBuf> { | |||
53 | } | 50 | } |
54 | 51 | ||
55 | pub fn run_rustfmt(mode: Mode) -> Result<()> { | 52 | pub fn run_rustfmt(mode: Mode) -> Result<()> { |
56 | let _dir = pushd(project_root()); | 53 | let _dir = pushd(project_root())?; |
57 | let _e = pushenv("RUSTUP_TOOLCHAIN", "stable"); | 54 | let _e = pushenv("RUSTUP_TOOLCHAIN", "stable"); |
58 | ensure_rustfmt()?; | 55 | ensure_rustfmt()?; |
59 | match mode { | 56 | let check = match mode { |
60 | Mode::Overwrite => run!("cargo fmt"), | 57 | Mode::Overwrite => &[][..], |
61 | Mode::Verify => run!("cargo fmt -- --check"), | 58 | Mode::Verify => &["--", "--check"], |
62 | }?; | 59 | }; |
60 | cmd!("cargo fmt {check...}").run()?; | ||
63 | Ok(()) | 61 | Ok(()) |
64 | } | 62 | } |
65 | 63 | ||
66 | fn ensure_rustfmt() -> Result<()> { | 64 | fn ensure_rustfmt() -> Result<()> { |
67 | let out = run!("rustfmt --version")?; | 65 | let out = cmd!("rustfmt --version").read()?; |
68 | if !out.contains("stable") { | 66 | if !out.contains("stable") { |
69 | bail!( | 67 | bail!( |
70 | "Failed to run rustfmt from toolchain 'stable'. \ | 68 | "Failed to run rustfmt from toolchain 'stable'. \ |
@@ -75,40 +73,46 @@ fn ensure_rustfmt() -> Result<()> { | |||
75 | } | 73 | } |
76 | 74 | ||
77 | pub fn run_clippy() -> Result<()> { | 75 | pub fn run_clippy() -> Result<()> { |
78 | if run!("cargo clippy --version").is_err() { | 76 | if cmd!("cargo clippy --version").read().is_err() { |
79 | bail!( | 77 | bail!( |
80 | "Failed run cargo clippy. \ | 78 | "Failed run cargo clippy. \ |
81 | Please run `rustup component add clippy` to install it.", | 79 | Please run `rustup component add clippy` to install it.", |
82 | ) | 80 | ) |
83 | } | 81 | } |
84 | 82 | ||
85 | let allowed_lints = [ | 83 | let allowed_lints = " |
86 | "clippy::collapsible_if", | 84 | -A clippy::collapsible_if |
87 | "clippy::needless_pass_by_value", | 85 | -A clippy::needless_pass_by_value |
88 | "clippy::nonminimal_bool", | 86 | -A clippy::nonminimal_bool |
89 | "clippy::redundant_pattern_matching", | 87 | -A clippy::redundant_pattern_matching |
90 | ]; | 88 | " |
91 | run!("cargo clippy --all-features --all-targets -- -A {}", allowed_lints.join(" -A "))?; | 89 | .split_ascii_whitespace(); |
90 | cmd!("cargo clippy --all-features --all-targets -- {allowed_lints...}").run()?; | ||
92 | Ok(()) | 91 | Ok(()) |
93 | } | 92 | } |
94 | 93 | ||
95 | pub fn run_fuzzer() -> Result<()> { | 94 | pub fn run_fuzzer() -> Result<()> { |
96 | let _d = pushd("./crates/syntax"); | 95 | let _d = pushd("./crates/syntax")?; |
97 | let _e = pushenv("RUSTUP_TOOLCHAIN", "nightly"); | 96 | let _e = pushenv("RUSTUP_TOOLCHAIN", "nightly"); |
98 | if run!("cargo fuzz --help").is_err() { | 97 | if cmd!("cargo fuzz --help").read().is_err() { |
99 | run!("cargo install cargo-fuzz")?; | 98 | cmd!("cargo install cargo-fuzz").run()?; |
100 | }; | 99 | }; |
101 | 100 | ||
102 | // Expecting nightly rustc | 101 | // Expecting nightly rustc |
103 | let out = run!("rustc --version")?; | 102 | let out = cmd!("rustc --version").read()?; |
104 | if !out.contains("nightly") { | 103 | if !out.contains("nightly") { |
105 | bail!("fuzz tests require nightly rustc") | 104 | bail!("fuzz tests require nightly rustc") |
106 | } | 105 | } |
107 | 106 | ||
108 | run!("cargo fuzz run parser")?; | 107 | cmd!("cargo fuzz run parser").run()?; |
109 | Ok(()) | 108 | Ok(()) |
110 | } | 109 | } |
111 | 110 | ||
111 | fn date_iso() -> Result<String> { | ||
112 | let res = cmd!("date --iso --utc").read()?; | ||
113 | Ok(res) | ||
114 | } | ||
115 | |||
112 | fn is_release_tag(tag: &str) -> bool { | 116 | fn is_release_tag(tag: &str) -> bool { |
113 | tag.len() == "2020-02-24".len() && tag.starts_with(|c: char| c.is_ascii_digit()) | 117 | tag.len() == "2020-02-24".len() && tag.starts_with(|c: char| c.is_ascii_digit()) |
114 | } | 118 | } |