@@ -12,21 +12,18 @@ mod ast_src;
1212
1313use std:: {
1414 env,
15- io:: Write ,
1615 path:: { Path , PathBuf } ,
17- process:: { Command , Stdio } ,
1816} ;
17+
1918use walkdir:: { DirEntry , WalkDir } ;
2019
2120use crate :: {
2221 codegen:: Mode ,
23- not_bash:: { date_iso, fs2, pushd, rm_rf, run} ,
22+ not_bash:: { date_iso, fs2, pushd, pushenv , rm_rf, run} ,
2423} ;
2524
2625pub use anyhow:: { bail, Context as _, Result } ;
2726
28- const RUSTFMT_TOOLCHAIN : & str = "stable" ;
29-
3027pub fn project_root ( ) -> PathBuf {
3128 Path :: new (
3229 & env:: var ( "CARGO_MANIFEST_DIR" ) . unwrap_or_else ( |_| env ! ( "CARGO_MANIFEST_DIR" ) . to_owned ( ) ) ,
@@ -54,77 +51,44 @@ pub fn rust_files(path: &Path) -> impl Iterator<Item = PathBuf> {
5451
5552pub fn run_rustfmt ( mode : Mode ) -> Result < ( ) > {
5653 let _dir = pushd ( project_root ( ) ) ;
54+ let _e = pushenv ( "RUSTUP_TOOLCHAIN" , "stable" ) ;
5755 ensure_rustfmt ( ) ?;
58-
59- if Command :: new ( "cargo" )
60- . env ( "RUSTUP_TOOLCHAIN" , RUSTFMT_TOOLCHAIN )
61- . args ( & [ "fmt" , "--" ] )
62- . args ( if mode == Mode :: Verify { & [ "--check" ] [ ..] } else { & [ ] } )
63- . stderr ( Stdio :: inherit ( ) )
64- . status ( ) ?
65- . success ( )
66- {
67- Ok ( ( ) )
68- } else {
69- bail ! ( "Rustfmt failed" ) ;
70- }
56+ match mode {
57+ Mode :: Overwrite => run ! ( "cargo fmt" ) ,
58+ Mode :: Verify => run ! ( "cargo fmt -- --check" ) ,
59+ } ?;
60+ Ok ( ( ) )
7161}
7262
7363fn reformat ( text : impl std:: fmt:: Display ) -> Result < String > {
64+ let _e = pushenv ( "RUSTUP_TOOLCHAIN" , "stable" ) ;
7465 ensure_rustfmt ( ) ?;
75- let mut rustfmt = Command :: new ( "rustfmt" )
76- . env ( "RUSTUP_TOOLCHAIN" , RUSTFMT_TOOLCHAIN )
77- . args ( & [ "--config-path" ] )
78- . arg ( project_root ( ) . join ( "rustfmt.toml" ) )
79- . args ( & [ "--config" , "fn_single_line=true" ] )
80- . stdin ( Stdio :: piped ( ) )
81- . stdout ( Stdio :: piped ( ) )
82- . spawn ( ) ?;
83- write ! ( rustfmt. stdin. take( ) . unwrap( ) , "{}" , text) ?;
84- let output = rustfmt. wait_with_output ( ) ?;
85- let stdout = String :: from_utf8 ( output. stdout ) ?;
66+ let stdout = run ! (
67+ "rustfmt --config-path {} --config fn_single_line=true" , project_root( ) . join( "rustfmt.toml" ) . display( ) ;
68+ <text. to_string( ) . as_bytes( )
69+ ) ?;
8670 let preamble = "Generated file, do not edit by hand, see `xtask/src/codegen`" ;
87- Ok ( format ! ( "//! {}\n \n {}" , preamble, stdout) )
71+ Ok ( format ! ( "//! {}\n \n {}\n " , preamble, stdout) )
8872}
8973
9074fn ensure_rustfmt ( ) -> Result < ( ) > {
91- match Command :: new ( "rustfmt" )
92- . args ( & [ "--version" ] )
93- . env ( "RUSTUP_TOOLCHAIN" , RUSTFMT_TOOLCHAIN )
94- . stdout ( Stdio :: piped ( ) )
95- . stderr ( Stdio :: null ( ) )
96- . spawn ( )
97- . and_then ( |child| child. wait_with_output ( ) )
98- {
99- Ok ( output)
100- if output. status . success ( )
101- && std:: str:: from_utf8 ( & output. stdout ) ?. contains ( RUSTFMT_TOOLCHAIN ) =>
102- {
103- Ok ( ( ) )
104- }
105- _ => {
106- bail ! (
107- "Failed to run rustfmt from toolchain '{0}'. \
108- Please run `rustup component add rustfmt --toolchain {0}` to install it.",
109- RUSTFMT_TOOLCHAIN ,
110- ) ;
111- }
75+ let out = run ! ( "rustfmt --version" ) ?;
76+ if !out. contains ( "stable" ) {
77+ bail ! (
78+ "Failed to run rustfmt from toolchain 'stable'. \
79+ Please run `rustup component add rustfmt --toolchain stable` to install it.",
80+ )
11281 }
82+ Ok ( ( ) )
11383}
11484
11585pub fn run_clippy ( ) -> Result < ( ) > {
116- match Command :: new ( "cargo" )
117- . args ( & [ "clippy" , "--version" ] )
118- . stderr ( Stdio :: null ( ) )
119- . stdout ( Stdio :: null ( ) )
120- . status ( )
121- {
122- Ok ( status) if status. success ( ) => ( ) ,
123- _ => bail ! (
86+ if run ! ( "cargo clippy --version" ) . is_err ( ) {
87+ bail ! (
12488 "Failed run cargo clippy. \
12589 Please run `rustup component add clippy` to install it.",
126- ) ,
127- } ;
90+ )
91+ }
12892
12993 let allowed_lints = [
13094 "clippy::collapsible_if" ,
@@ -138,33 +102,18 @@ pub fn run_clippy() -> Result<()> {
138102
139103pub fn run_fuzzer ( ) -> Result < ( ) > {
140104 let _d = pushd ( "./crates/ra_syntax" ) ;
105+ let _e = pushenv ( "RUSTUP_TOOLCHAIN" , "nightly" ) ;
141106 if run ! ( "cargo fuzz --help" ) . is_err ( ) {
142107 run ! ( "cargo install cargo-fuzz" ) ?;
143108 } ;
144109
145110 // Expecting nightly rustc
146- match Command :: new ( "rustc" )
147- . args ( & [ "--version" ] )
148- . env ( "RUSTUP_TOOLCHAIN" , "nightly" )
149- . stdout ( Stdio :: piped ( ) )
150- . stderr ( Stdio :: null ( ) )
151- . spawn ( )
152- . and_then ( |child| child. wait_with_output ( ) )
153- {
154- Ok ( output)
155- if output. status . success ( )
156- && std:: str:: from_utf8 ( & output. stdout ) ?. contains ( "nightly" ) => { }
157- _ => bail ! ( "fuzz tests require nightly rustc" ) ,
111+ let out = run ! ( "rustc --version" ) ?;
112+ if !out. contains ( "nightly" ) {
113+ bail ! ( "fuzz tests require nightly rustc" )
158114 }
159115
160- let status = Command :: new ( "cargo" )
161- . env ( "RUSTUP_TOOLCHAIN" , "nightly" )
162- . args ( & [ "fuzz" , "run" , "parser" ] )
163- . stderr ( Stdio :: inherit ( ) )
164- . status ( ) ?;
165- if !status. success ( ) {
166- bail ! ( "{}" , status) ;
167- }
116+ run ! ( "cargo fuzz run parser" ) ?;
168117 Ok ( ( ) )
169118}
170119
0 commit comments