diff --git a/cli/src/generate/mod.rs b/cli/src/generate/mod.rs index 397fd677..127e956e 100644 --- a/cli/src/generate/mod.rs +++ b/cli/src/generate/mod.rs @@ -16,7 +16,6 @@ mod nfa; mod npm_files; mod parse_grammar; mod prepare_grammar; -mod properties; mod render; mod rules; mod tables; @@ -33,33 +32,29 @@ pub fn generate_parser_in_directory( grammar_path: Option<&str>, minimize: bool, state_ids_to_log: Vec, - properties_only: bool, ) -> Result<()> { - if !properties_only { - let grammar_path = grammar_path.map_or(repo_path.join("grammar.js"), |s| s.into()); - let grammar_json = load_grammar_file(&grammar_path)?; - let (language_name, c_code) = - generate_parser_for_grammar_with_opts(&grammar_json, minimize, state_ids_to_log)?; - let repo_src_path = repo_path.join("src"); - let repo_header_path = repo_src_path.join("tree_sitter"); - fs::create_dir_all(&repo_src_path)?; - fs::create_dir_all(&repo_header_path)?; - fs::write(&repo_src_path.join("parser.c"), c_code) - .map_err(|e| format!("Failed to write parser.c: {}", e))?; - ensure_file(&repo_src_path.join("binding.cc"), || { - npm_files::binding_cc(&language_name) - })?; - ensure_file(&repo_path.join("binding.gyp"), || { - npm_files::binding_gyp(&language_name) - })?; - ensure_file(&repo_path.join("index.js"), || { - npm_files::index_js(&language_name) - })?; - ensure_file(&repo_header_path.join("parser.h"), || { - include_str!("../../../lib/include/tree_sitter/parser.h") - })?; - } - properties::generate_property_sheets(repo_path)?; + let grammar_path = grammar_path.map_or(repo_path.join("grammar.js"), |s| s.into()); + let grammar_json = load_grammar_file(&grammar_path)?; + let (language_name, c_code) = + generate_parser_for_grammar_with_opts(&grammar_json, minimize, state_ids_to_log)?; + let repo_src_path = repo_path.join("src"); + let repo_header_path = repo_src_path.join("tree_sitter"); + fs::create_dir_all(&repo_src_path)?; + fs::create_dir_all(&repo_header_path)?; + fs::write(&repo_src_path.join("parser.c"), c_code) + .map_err(|e| format!("Failed to write parser.c: {}", e))?; + ensure_file(&repo_src_path.join("binding.cc"), || { + npm_files::binding_cc(&language_name) + })?; + ensure_file(&repo_path.join("binding.gyp"), || { + npm_files::binding_gyp(&language_name) + })?; + ensure_file(&repo_path.join("index.js"), || { + npm_files::index_js(&language_name) + })?; + ensure_file(&repo_header_path.join("parser.h"), || { + include_str!("../../../lib/include/tree_sitter/parser.h") + })?; Ok(()) } diff --git a/cli/src/lib.rs b/cli/src/lib.rs index 9038b5b8..3a15b457 100644 --- a/cli/src/lib.rs +++ b/cli/src/lib.rs @@ -3,6 +3,7 @@ pub mod generate; pub mod loader; pub mod logger; pub mod parse; +pub mod properties; pub mod test; pub mod util; diff --git a/cli/src/main.rs b/cli/src/main.rs index 3c0b057e..4d4dc1c6 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -3,9 +3,9 @@ use std::env; use std::fs; use std::path::Path; use std::process::exit; -use tree_sitter_cli::loader::Loader; -use tree_sitter_cli::{error, generate, logger, parse, test}; use std::usize; +use tree_sitter_cli::loader::Loader; +use tree_sitter_cli::{error, generate, logger, parse, properties, test}; fn main() { if let Err(e) = run() { @@ -87,13 +87,15 @@ fn run() -> error::Result<()> { ids.filter_map(|id| usize::from_str_radix(id, 10).ok()) .collect() }); - generate::generate_parser_in_directory( - ¤t_dir, - grammar_path, - minimize, - state_ids_to_log, - properties_only, - )?; + if !properties_only { + generate::generate_parser_in_directory( + ¤t_dir, + grammar_path, + minimize, + state_ids_to_log, + )?; + } + properties::generate_property_sheets(¤t_dir)?; } else if let Some(matches) = matches.subcommand_matches("test") { let debug = matches.is_present("debug"); let debug_graph = matches.is_present("debug-graph"); diff --git a/cli/src/generate/properties.rs b/cli/src/properties.rs similarity index 100% rename from cli/src/generate/properties.rs rename to cli/src/properties.rs