From 857c1650efdb51650458f9ec1119adaa49b34371 Mon Sep 17 00:00:00 2001 From: Muhammad Mominul Huque Date: Thu, 1 Nov 2018 01:50:43 +0600 Subject: Various changes Pin to a specific toolchain version Format checking functionality Add a test to check the code formatting. Remove macro_use attribute --- crates/tools/src/lib.rs | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'crates/tools/src/lib.rs') diff --git a/crates/tools/src/lib.rs b/crates/tools/src/lib.rs index 91c35b9e1..29c46c7c4 100644 --- a/crates/tools/src/lib.rs +++ b/crates/tools/src/lib.rs @@ -4,9 +4,11 @@ extern crate teraron; use std::{ path::{Path, PathBuf}, + process::Command, }; use itertools::Itertools; +use failure::bail; pub use teraron::{Mode, Verify, Overwrite}; @@ -15,6 +17,7 @@ pub type Result = ::std::result::Result; pub const GRAMMAR: &str = "crates/ra_syntax/src/grammar.ron"; pub const SYNTAX_KINDS: &str = "crates/ra_syntax/src/syntax_kinds/generated.rs.tera"; pub const AST: &str = "crates/ra_syntax/src/ast/generated.rs.tera"; +const TOOLCHAIN: &str = "beta-2018-10-30"; #[derive(Debug)] pub struct Test { @@ -80,3 +83,29 @@ pub fn project_root() -> PathBuf { .unwrap() .to_path_buf() } + +pub fn run(cmdline: &str, dir: &str) -> Result<()> { + eprintln!("\nwill run: {}", cmdline); + let project_dir = project_root().join(dir); + let mut args = cmdline.split_whitespace(); + let exec = args.next().unwrap(); + let status = Command::new(exec) + .args(args) + .current_dir(project_dir) + .status()?; + if !status.success() { + bail!("`{}` exited with {}", cmdline, status); + } + Ok(()) +} + +pub fn run_rustfmt(mode: Mode) -> Result<()> { + run(&format!("rustup install {}", TOOLCHAIN), ".")?; + run(&format!("rustup component add rustfmt-preview --toolchain {}", TOOLCHAIN), ".")?; + if mode == Verify { + run(&format!("rustup run {} -- cargo fmt -- --check", TOOLCHAIN), ".")?; + } else { + run(&format!("rustup run {} -- cargo fmt", TOOLCHAIN), ".")?; + } + Ok(()) +} -- cgit v1.2.3