diff options
Diffstat (limited to 'crates/tools/src')
-rw-r--r-- | crates/tools/src/lib.rs | 16 | ||||
-rw-r--r-- | crates/tools/src/main.rs | 11 |
2 files changed, 16 insertions, 11 deletions
diff --git a/crates/tools/src/lib.rs b/crates/tools/src/lib.rs index ba7d10caa..548b157dd 100644 --- a/crates/tools/src/lib.rs +++ b/crates/tools/src/lib.rs | |||
@@ -8,13 +8,19 @@ extern crate heck; | |||
8 | use std::{ | 8 | use std::{ |
9 | collections::HashMap, | 9 | collections::HashMap, |
10 | fs, | 10 | fs, |
11 | path::Path, | 11 | path::{Path, PathBuf}, |
12 | }; | 12 | }; |
13 | use itertools::Itertools; | 13 | use itertools::Itertools; |
14 | use heck::{CamelCase, ShoutySnakeCase, SnakeCase}; | 14 | use heck::{CamelCase, ShoutySnakeCase, SnakeCase}; |
15 | 15 | ||
16 | pub type Result<T> = ::std::result::Result<T, failure::Error>; | 16 | pub type Result<T> = ::std::result::Result<T, failure::Error>; |
17 | 17 | ||
18 | const GRAMMAR: &str = "ra_syntax/src/grammar.ron"; | ||
19 | pub const SYNTAX_KINDS: &str = "ra_syntax/src/syntax_kinds/generated.rs"; | ||
20 | pub const SYNTAX_KINDS_TEMPLATE: &str = "ra_syntax/src/syntax_kinds/generated.rs.tera"; | ||
21 | pub const AST: &str = "ra_syntax/src/ast/generated.rs"; | ||
22 | pub const AST_TEMPLATE: &str = "ra_syntax/src/ast/generated.rs.tera"; | ||
23 | |||
18 | #[derive(Debug)] | 24 | #[derive(Debug)] |
19 | pub struct Test { | 25 | pub struct Test { |
20 | pub name: String, | 26 | pub name: String, |
@@ -71,9 +77,9 @@ pub fn update(path: &Path, contents: &str, verify: bool) -> Result<()> { | |||
71 | Ok(()) | 77 | Ok(()) |
72 | } | 78 | } |
73 | 79 | ||
74 | pub fn render_template(template: &str) -> Result<String> { | 80 | pub fn render_template(template: PathBuf) -> Result<String> { |
75 | let grammar: ron::value::Value = { | 81 | let grammar: ron::value::Value = { |
76 | let text = fs::read_to_string(format!("{}{}", Path::new(&std::env::var("CARGO_MANIFEST_DIR").unwrap()).parent().unwrap().to_str().unwrap(), "/ra_syntax/src/grammar.ron"))?; | 82 | let text = fs::read_to_string(project_root().join(GRAMMAR))?; |
77 | ron::de::from_str(&text)? | 83 | ron::de::from_str(&text)? |
78 | }; | 84 | }; |
79 | let template = fs::read_to_string(template)?; | 85 | let template = fs::read_to_string(template)?; |
@@ -108,3 +114,7 @@ pub fn render_template(template: &str) -> Result<String> { | |||
108 | Ok(tera::Value::Array(elements)) | 114 | Ok(tera::Value::Array(elements)) |
109 | } | 115 | } |
110 | } | 116 | } |
117 | |||
118 | pub fn project_root() -> PathBuf { | ||
119 | Path::new(&std::env::var("CARGO_MANIFEST_DIR").unwrap()).parent().unwrap().to_path_buf() | ||
120 | } | ||
diff --git a/crates/tools/src/main.rs b/crates/tools/src/main.rs index aa6d964e6..549892bc6 100644 --- a/crates/tools/src/main.rs +++ b/crates/tools/src/main.rs | |||
@@ -11,15 +11,10 @@ use std::{ | |||
11 | path::{Path, PathBuf}, | 11 | path::{Path, PathBuf}, |
12 | process::Command, | 12 | process::Command, |
13 | }; | 13 | }; |
14 | use tools::{Test, collect_tests, render_template, update, Result}; | 14 | use tools::{AST, AST_TEMPLATE, Result, SYNTAX_KINDS, SYNTAX_KINDS_TEMPLATE, Test, collect_tests, render_template, update, project_root}; |
15 | 15 | ||
16 | const GRAMMAR_DIR: &str = "./crates/ra_syntax/src/grammar"; | 16 | const GRAMMAR_DIR: &str = "./crates/ra_syntax/src/grammar"; |
17 | const INLINE_TESTS_DIR: &str = "./crates/ra_syntax/tests/data/parser/inline"; | 17 | const INLINE_TESTS_DIR: &str = "./crates/ra_syntax/tests/data/parser/inline"; |
18 | const GRAMMAR: &str = "./crates/ra_syntax/src/grammar.ron"; | ||
19 | const SYNTAX_KINDS: &str = "./crates/ra_syntax/src/syntax_kinds/generated.rs"; | ||
20 | const SYNTAX_KINDS_TEMPLATE: &str = "./crates/ra_syntax/src/syntax_kinds/generated.rs.tera"; | ||
21 | const AST: &str = "./crates/ra_syntax/src/ast/generated.rs"; | ||
22 | const AST_TEMPLATE: &str = "./crates/ra_syntax/src/ast/generated.rs.tera"; | ||
23 | 18 | ||
24 | fn main() -> Result<()> { | 19 | fn main() -> Result<()> { |
25 | let matches = App::new("tasks") | 20 | let matches = App::new("tasks") |
@@ -45,8 +40,8 @@ fn main() -> Result<()> { | |||
45 | fn run_gen_command(name: &str, verify: bool) -> Result<()> { | 40 | fn run_gen_command(name: &str, verify: bool) -> Result<()> { |
46 | match name { | 41 | match name { |
47 | "gen-kinds" => { | 42 | "gen-kinds" => { |
48 | update(Path::new(SYNTAX_KINDS), &render_template(SYNTAX_KINDS_TEMPLATE)?, verify)?; | 43 | update(&project_root().join(SYNTAX_KINDS), &render_template(project_root().join(SYNTAX_KINDS_TEMPLATE))?, verify)?; |
49 | update(Path::new(AST), &render_template(AST_TEMPLATE)?, verify)?; | 44 | update(&project_root().join(AST), &render_template(project_root().join(AST_TEMPLATE))?, verify)?; |
50 | }, | 45 | }, |
51 | "gen-tests" => { | 46 | "gen-tests" => { |
52 | gen_tests(verify)? | 47 | gen_tests(verify)? |