Move properties module out of generate

This commit is contained in:
Max Brunsfeld 2019-02-01 19:57:00 -08:00
parent 91da7206b7
commit e143710f4a
4 changed files with 34 additions and 36 deletions

View file

@ -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<usize>,
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(())
}

View file

@ -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;

View file

@ -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(
&current_dir,
grammar_path,
minimize,
state_ids_to_log,
properties_only,
)?;
if !properties_only {
generate::generate_parser_in_directory(
&current_dir,
grammar_path,
minimize,
state_ids_to_log,
)?;
}
properties::generate_property_sheets(&current_dir)?;
} else if let Some(matches) = matches.subcommand_matches("test") {
let debug = matches.is_present("debug");
let debug_graph = matches.is_present("debug-graph");