child condition for packages

This commit is contained in:
2026-06-13 20:04:16 +02:00
parent b2ff76d691
commit 01e3c30e2b
+19 -10
View File
@@ -84,7 +84,7 @@ pub fn transpile() PathBuf {
} }
impl modules::Module { impl modules::Module {
fn transpile(*self, parent_dir *PathBuf, config *mut MistConfig) String { fn transpile(*self, parent_dir *PathBuf, config *mut MistConfig) [bool, String] {
if !self.path.is_dir() && self.path.extension().and_then(fn(v) -> v.to_str()) != Some("mist") { if !self.path.is_dir() && self.path.extension().and_then(fn(v) -> v.to_str()) != Some("mist") {
let file_name = self.path.file_name() let file_name = self.path.file_name()
.and_then(fn(s) -> s.to_str()) .and_then(fn(s) -> s.to_str())
@@ -92,7 +92,7 @@ impl modules::Module {
fs::copy(&self.path, parent_dir.join(&file_name)).expect("Failed to copy SideFile"); fs::copy(&self.path, parent_dir.join(&file_name)).expect("Failed to copy SideFile");
return String::new(); return (true, String::new());
} }
let dir = self.output_dir(parent_dir); let dir = self.output_dir(parent_dir);
@@ -101,9 +101,16 @@ impl modules::Module {
let mut output = String::new(); let mut output = String::new();
let mut child_changed = false;
for child in &self.children { for child in &self.children {
if !config.should_ignore(&child.path) { if !config.should_ignore(&child.path) {
output.push_str(&child.transpile(&dir, config)); let out = child.transpile(&dir, config);
if out.0 {
child_changed = true;
}
output.push_str(&out.1);
} }
} }
@@ -113,15 +120,15 @@ impl modules::Module {
output.push_str(&config.main_mods) output.push_str(&config.main_mods)
} }
self.write_transpile(output, parent_dir) self.write_transpile(output, parent_dir, child_changed)
} }
fn write_transpile(*self, output String, parent_dir *PathBuf) String { fn write_transpile(*self, output String, parent_dir *PathBuf, child_changed bool) [bool, String] {
if self.path.is_dir() { if self.path.is_dir() {
let output_file = self.output_path(parent_dir, &None); let output_file = self.output_path(parent_dir, &None);
if output.len() == 0 { if output.len() == 0 {
return String::new(); return (true, String::new());
} }
let res = fs::write(&output_file, output); let res = fs::write(&output_file, output);
@@ -136,7 +143,7 @@ impl modules::Module {
process::exit(1); process::exit(1);
} }
format!("pub mod {};\n", self.name) (false, format!("pub mod {};\n", self.name))
} else { } else {
let source = match fs::read_to_string(&self.path) { let source = match fs::read_to_string(&self.path) {
Ok[s] => s; Ok[s] => s;
@@ -151,15 +158,17 @@ impl modules::Module {
let output_file = self.output_path(parent_dir, &curr_mod_decl); let output_file = self.output_path(parent_dir, &curr_mod_decl);
if is_source_newer(&self.path, &output_file).expect("Failed to cache") { let should_change = is_source_newer(&self.path, &output_file).expect("Failed to cache");
if should_change || child_changed {
transpile_file(&self.path, &source, output_file, &output, &curr_mod_decl); transpile_file(&self.path, &source, output_file, &output, &curr_mod_decl);
} }
if let Some[[vis, name]] = &curr_mod_decl { (should_change, if let Some[[vis, name]] = &curr_mod_decl {
format!("{}mod {};\n", vis.get_rust(), name.get_rust()) format!("{}mod {};\n", vis.get_rust(), name.get_rust())
} else { } else {
String::new() String::new()
} })
} }
} }
} }