|
@@ -1,28 +1,42 @@
|
|
use super::event_template::*;
|
|
use super::event_template::*;
|
|
use crate::code_gen::flowy_toml::{parse_crate_config_from, CrateConfig};
|
|
use crate::code_gen::flowy_toml::{parse_crate_config_from, CrateConfig};
|
|
-use crate::code_gen::util::{is_crate_dir, is_hidden, read_file, save_content_to_file_with_diff_prompt};
|
|
|
|
|
|
+use crate::code_gen::util::{cache_dir, is_crate_dir, is_hidden, read_file, save_content_to_file_with_diff_prompt};
|
|
use flowy_ast::{event_ast::*, *};
|
|
use flowy_ast::{event_ast::*, *};
|
|
|
|
+use std::fs::File;
|
|
|
|
+use std::io::Write;
|
|
use syn::Item;
|
|
use syn::Item;
|
|
use walkdir::WalkDir;
|
|
use walkdir::WalkDir;
|
|
|
|
|
|
-pub struct DartEventCodeGen();
|
|
|
|
|
|
+pub fn gen(crate_name: &str) {
|
|
|
|
+ let event_crates = parse_dart_event_files(vec![".".to_owned()]);
|
|
|
|
+ let event_ast = event_crates.iter().map(parse_event_crate).flatten().collect::<Vec<_>>();
|
|
|
|
|
|
-impl DartEventCodeGen {
|
|
|
|
- pub fn gen(crate_name: &str, crate_path: &str) {
|
|
|
|
- let event_crates = parse_dart_event_files(vec![crate_path.to_owned()]);
|
|
|
|
- let event_ast = event_crates.iter().map(parse_event_crate).flatten().collect::<Vec<_>>();
|
|
|
|
|
|
+ let event_render_ctx = ast_to_event_render_ctx(event_ast.as_ref());
|
|
|
|
+ let mut render_result = String::new();
|
|
|
|
+ for (index, render_ctx) in event_render_ctx.into_iter().enumerate() {
|
|
|
|
+ let mut event_template = EventTemplate::new();
|
|
|
|
|
|
- let event_render_ctx = ast_to_event_render_ctx(event_ast.as_ref());
|
|
|
|
- let mut render_result = String::new();
|
|
|
|
- for (index, render_ctx) in event_render_ctx.into_iter().enumerate() {
|
|
|
|
- let mut event_template = EventTemplate::new();
|
|
|
|
-
|
|
|
|
- if let Some(content) = event_template.render(render_ctx, index) {
|
|
|
|
- render_result.push_str(content.as_ref())
|
|
|
|
- }
|
|
|
|
|
|
+ if let Some(content) = event_template.render(render_ctx, index) {
|
|
|
|
+ render_result.push_str(content.as_ref())
|
|
}
|
|
}
|
|
|
|
+ }
|
|
|
|
|
|
- save_content_to_file_with_diff_prompt(render_result.as_ref(), ".");
|
|
|
|
|
|
+ let cache_dir = format!("{}/{}", cache_dir(), crate_name);
|
|
|
|
+ let dart_event_file_path = format!("{}/dart_event.dart", cache_dir);
|
|
|
|
+ match std::fs::OpenOptions::new()
|
|
|
|
+ .create(true)
|
|
|
|
+ .write(true)
|
|
|
|
+ .append(false)
|
|
|
|
+ .truncate(true)
|
|
|
|
+ .open(&dart_event_file_path)
|
|
|
|
+ {
|
|
|
|
+ Ok(ref mut file) => {
|
|
|
|
+ file.write_all(render_result.as_bytes()).unwrap();
|
|
|
|
+ File::flush(file).unwrap();
|
|
|
|
+ }
|
|
|
|
+ Err(_err) => {
|
|
|
|
+ panic!("Failed to open file: {}", dart_event_file_path);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -45,8 +59,8 @@ impl DartEventCrate {
|
|
|
|
|
|
pub fn parse_dart_event_files(crate_paths: Vec<String>) -> Vec<DartEventCrate> {
|
|
pub fn parse_dart_event_files(crate_paths: Vec<String>) -> Vec<DartEventCrate> {
|
|
let mut dart_event_crates: Vec<DartEventCrate> = vec![];
|
|
let mut dart_event_crates: Vec<DartEventCrate> = vec![];
|
|
- crate_paths.iter().for_each(|root| {
|
|
|
|
- let crates = WalkDir::new(root)
|
|
|
|
|
|
+ crate_paths.iter().for_each(|path| {
|
|
|
|
+ let crates = WalkDir::new(path)
|
|
.into_iter()
|
|
.into_iter()
|
|
.filter_entry(|e| !is_hidden(e))
|
|
.filter_entry(|e| !is_hidden(e))
|
|
.filter_map(|e| e.ok())
|
|
.filter_map(|e| e.ok())
|