diff options
author | Aleksey Kladov <[email protected]> | 2018-10-16 18:28:43 +0100 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2018-10-16 18:31:30 +0100 |
commit | 514aa3cf853c3c4beef8f827c12328d626f977de (patch) | |
tree | 2a10336c3825ad821960c5169b78df17f7bd5f5c /crates/tools/src/main.rs | |
parent | 1216878f7be20dd0e652fb8cdc395009fdcfae07 (diff) |
extract teraron
Diffstat (limited to 'crates/tools/src/main.rs')
-rw-r--r-- | crates/tools/src/main.rs | 45 |
1 files changed, 23 insertions, 22 deletions
diff --git a/crates/tools/src/main.rs b/crates/tools/src/main.rs index b662d78df..1bbc43123 100644 --- a/crates/tools/src/main.rs +++ b/crates/tools/src/main.rs | |||
@@ -3,6 +3,7 @@ extern crate clap; | |||
3 | extern crate failure; | 3 | extern crate failure; |
4 | extern crate tools; | 4 | extern crate tools; |
5 | extern crate walkdir; | 5 | extern crate walkdir; |
6 | extern crate teraron; | ||
6 | 7 | ||
7 | use clap::{App, Arg, SubCommand}; | 8 | use clap::{App, Arg, SubCommand}; |
8 | use std::{ | 9 | use std::{ |
@@ -12,9 +13,9 @@ use std::{ | |||
12 | process::Command, | 13 | process::Command, |
13 | }; | 14 | }; |
14 | use tools::{ | 15 | use tools::{ |
15 | collect_tests, project_root, render_template, update, Result, Test, AST, AST_TEMPLATE, | 16 | collect_tests, project_root, Result, Test, AST, SYNTAX_KINDS, GRAMMAR, |
16 | SYNTAX_KINDS, SYNTAX_KINDS_TEMPLATE, | ||
17 | }; | 17 | }; |
18 | use teraron::{Mode, Verify, Overwrite}; | ||
18 | 19 | ||
19 | const GRAMMAR_DIR: &str = "./crates/ra_syntax/src/grammar"; | 20 | const GRAMMAR_DIR: &str = "./crates/ra_syntax/src/grammar"; |
20 | const INLINE_TESTS_DIR: &str = "./crates/ra_syntax/tests/data/parser/inline"; | 21 | const INLINE_TESTS_DIR: &str = "./crates/ra_syntax/tests/data/parser/inline"; |
@@ -32,35 +33,35 @@ fn main() -> Result<()> { | |||
32 | .subcommand(SubCommand::with_name("gen-tests")) | 33 | .subcommand(SubCommand::with_name("gen-tests")) |
33 | .subcommand(SubCommand::with_name("install-code")) | 34 | .subcommand(SubCommand::with_name("install-code")) |
34 | .get_matches(); | 35 | .get_matches(); |
36 | let mode = if matches.is_present("verify") { | ||
37 | Verify | ||
38 | } else { | ||
39 | Overwrite | ||
40 | }; | ||
35 | match matches.subcommand() { | 41 | match matches.subcommand() { |
36 | ("install-code", _) => install_code_extension()?, | 42 | ("install-code", _) => install_code_extension()?, |
37 | (name, Some(matches)) => run_gen_command(name, matches.is_present("verify"))?, | 43 | ("gen-tests", _) => gen_tests(mode)?, |
38 | _ => unreachable!(), | 44 | ("gen-kinds", _) => { |
39 | } | 45 | let grammar = project_root().join(GRAMMAR); |
40 | Ok(()) | 46 | let syntax_kinds = project_root().join(SYNTAX_KINDS); |
41 | } | 47 | let ast = project_root().join(AST); |
42 | 48 | teraron::generate( | |
43 | fn run_gen_command(name: &str, verify: bool) -> Result<()> { | 49 | &syntax_kinds, |
44 | match name { | 50 | &grammar, |
45 | "gen-kinds" => { | 51 | mode, |
46 | update( | ||
47 | &project_root().join(SYNTAX_KINDS), | ||
48 | &render_template(&project_root().join(SYNTAX_KINDS_TEMPLATE))?, | ||
49 | verify, | ||
50 | )?; | 52 | )?; |
51 | update( | 53 | teraron::generate( |
52 | &project_root().join(AST), | 54 | &ast, |
53 | &render_template(&project_root().join(AST_TEMPLATE))?, | 55 | &grammar, |
54 | verify, | 56 | mode, |
55 | )?; | 57 | )?; |
56 | } | 58 | } |
57 | "gen-tests" => gen_tests(verify)?, | ||
58 | _ => unreachable!(), | 59 | _ => unreachable!(), |
59 | } | 60 | } |
60 | Ok(()) | 61 | Ok(()) |
61 | } | 62 | } |
62 | 63 | ||
63 | fn gen_tests(verify: bool) -> Result<()> { | 64 | fn gen_tests(mode: Mode) -> Result<()> { |
64 | let tests = tests_from_dir(Path::new(GRAMMAR_DIR))?; | 65 | let tests = tests_from_dir(Path::new(GRAMMAR_DIR))?; |
65 | 66 | ||
66 | let inline_tests_dir = Path::new(INLINE_TESTS_DIR); | 67 | let inline_tests_dir = Path::new(INLINE_TESTS_DIR); |
@@ -83,7 +84,7 @@ fn gen_tests(verify: bool) -> Result<()> { | |||
83 | inline_tests_dir.join(file_name) | 84 | inline_tests_dir.join(file_name) |
84 | } | 85 | } |
85 | }; | 86 | }; |
86 | update(&path, &test.text, verify)?; | 87 | teraron::update(&path, &test.text, mode)?; |
87 | } | 88 | } |
88 | Ok(()) | 89 | Ok(()) |
89 | } | 90 | } |