aboutsummaryrefslogtreecommitdiff
path: root/xtask/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'xtask/src/lib.rs')
-rw-r--r--xtask/src/lib.rs52
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
5pub mod not_bash;
6pub mod codegen; 5pub mod codegen;
7mod ast_src; 6mod ast_src;
8 7
@@ -19,11 +18,9 @@ use std::{
19}; 18};
20 19
21use walkdir::{DirEntry, WalkDir}; 20use walkdir::{DirEntry, WalkDir};
21use xshell::{cmd, pushd, pushenv};
22 22
23use crate::{ 23use crate::codegen::Mode;
24 codegen::Mode,
25 not_bash::{pushd, pushenv},
26};
27 24
28pub use anyhow::{bail, Context as _, Result}; 25pub 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
55pub fn run_rustfmt(mode: Mode) -> Result<()> { 52pub 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
66fn ensure_rustfmt() -> Result<()> { 64fn 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
77pub fn run_clippy() -> Result<()> { 75pub 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
95pub fn run_fuzzer() -> Result<()> { 94pub 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
111fn date_iso() -> Result<String> {
112 let res = cmd!("date --iso --utc").read()?;
113 Ok(res)
114}
115
112fn is_release_tag(tag: &str) -> bool { 116fn 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}