aboutsummaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
Diffstat (limited to 'crates')
-rw-r--r--crates/ra_tools/Cargo.toml1
-rw-r--r--crates/ra_tools/src/lib.rs28
2 files changed, 25 insertions, 4 deletions
diff --git a/crates/ra_tools/Cargo.toml b/crates/ra_tools/Cargo.toml
index a40a452aa..4c9aa1cc3 100644
--- a/crates/ra_tools/Cargo.toml
+++ b/crates/ra_tools/Cargo.toml
@@ -6,7 +6,6 @@ authors = ["rust-analyzer developers"]
6publish = false 6publish = false
7 7
8[dependencies] 8[dependencies]
9teraron = "0.1.0"
10walkdir = "2.1.3" 9walkdir = "2.1.3"
11itertools = "0.8.0" 10itertools = "0.8.0"
12clap = "2.32.0" 11clap = "2.32.0"
diff --git a/crates/ra_tools/src/lib.rs b/crates/ra_tools/src/lib.rs
index de8c472d1..c02dee953 100644
--- a/crates/ra_tools/src/lib.rs
+++ b/crates/ra_tools/src/lib.rs
@@ -11,8 +11,6 @@ use std::{
11 11
12use itertools::Itertools; 12use itertools::Itertools;
13 13
14pub use teraron::{Mode, Overwrite, Verify};
15
16pub use self::codegen::generate; 14pub use self::codegen::generate;
17 15
18pub type Result<T> = std::result::Result<T, Box<dyn Error>>; 16pub type Result<T> = std::result::Result<T, Box<dyn Error>>;
@@ -26,6 +24,13 @@ pub const SYNTAX_KINDS: &str = "crates/ra_parser/src/syntax_kind/generated.rs.te
26pub const AST: &str = "crates/ra_syntax/src/ast/generated.rs"; 24pub const AST: &str = "crates/ra_syntax/src/ast/generated.rs";
27const TOOLCHAIN: &str = "stable"; 25const TOOLCHAIN: &str = "stable";
28 26
27#[derive(Debug, PartialEq, Eq, Clone, Copy)]
28pub enum Mode {
29 Overwrite,
30 Verify,
31}
32pub use Mode::*;
33
29#[derive(Debug)] 34#[derive(Debug)]
30pub struct Test { 35pub struct Test {
31 pub name: String, 36 pub name: String,
@@ -222,7 +227,7 @@ pub fn gen_tests(mode: Mode) -> Result<()> {
222 tests_dir.join(file_name) 227 tests_dir.join(file_name)
223 } 228 }
224 }; 229 };
225 teraron::update(&path, &test.text, mode)?; 230 update(&path, &test.text, mode)?;
226 } 231 }
227 Ok(()) 232 Ok(())
228 } 233 }
@@ -306,3 +311,20 @@ fn existing_tests(dir: &Path, ok: bool) -> Result<HashMap<String, (PathBuf, Test
306 } 311 }
307 Ok(res) 312 Ok(res)
308} 313}
314
315/// A helper to update file on disk if it has changed.
316/// With verify = false,
317pub fn update(path: &Path, contents: &str, mode: Mode) -> Result<()> {
318 match fs::read_to_string(path) {
319 Ok(ref old_contents) if old_contents == contents => {
320 return Ok(());
321 }
322 _ => (),
323 }
324 if mode == Verify {
325 Err(format!("`{}` is not up-to-date", path.display()))?;
326 }
327 eprintln!("updating {}", path.display());
328 fs::write(path, contents)?;
329 Ok(())
330}