diff --git a/crates/mist-api/src/modules.mist b/crates/mist-api/src/modules.mist index ca7c9f0..b0531c5 100644 --- a/crates/mist-api/src/modules.mist +++ b/crates/mist-api/src/modules.mist @@ -63,8 +63,12 @@ pub class Module { } } + pub fn is_package(*self, parent_dir *PathBuf) bool { + self.path.file_name().map(fn(v) -> v.to_str()).unwrap_or_default() == Some("package.mist") + } + pub fn output_dir(*self, parent_dir *PathBuf) PathBuf { - if (self.path.is_dir() || Some("package.mist") == self.path.file_name().unwrap().to_str()) { + if (self.path.is_dir() || self.is_package(parent_dir)) { parent_dir.join(&self.name) } else { parent_dir.clone() @@ -72,7 +76,7 @@ pub class Module { } pub fn output_path(*self, parent_dir *PathBuf) PathBuf { - if (self.path.is_dir() || Some("package.mist") == self.path.file_name().unwrap().to_str()) { + if (self.path.is_dir() || self.is_package(parent_dir)) { parent_dir.join(&self.name).join("mod.rs") } else { parent_dir.join(&self.name).with_extension("rs") diff --git a/crates/mist-api/src/transpiler.mist b/crates/mist-api/src/transpiler.mist index 7209e1a..82f497b 100644 --- a/crates/mist-api/src/transpiler.mist +++ b/crates/mist-api/src/transpiler.mist @@ -184,18 +184,20 @@ fn transpile_file(path *PathBuf, mut output_file PathBuf, mod_decl *str) String } }; - if (let [Some[[vis, name]], ast] = parsed) { - let output = gc.generate(ast); + let output = gc.generate(parsed.1); - if (let Some[ext] = output_file.extension().map(fn(e) -> e.to_owned())) { - let mut new_name = std::ffi::OsString::from(&name.0); + if (let [Some[[vis, name]], _] = parsed) { + if (output_file.file_name().map(fn(v) -> v.to_str()).unwrap_or_default() != Some("mod.rs")) { + if (let Some[ext] = output_file.extension().map(fn(e) -> e.to_owned())) { + let mut new_name = std::ffi::OsString::from(&name.0); - new_name.push("."); - new_name.push(ext); + new_name.push("."); + new_name.push(ext); - output_file.set_file_name(new_name); - } else { - output_file.set_file_name(&name.0); + output_file.set_file_name(new_name); + } else { + output_file.set_file_name(&name.0); + } } let res = fs::write(&output_file, format!("{mod_decl}{output}")); @@ -212,8 +214,6 @@ fn transpile_file(path *PathBuf, mut output_file PathBuf, mod_decl *str) String format!("{}mod {};\n", vis.get_rust(), name.get_rust()) } else { - let output = gc.generate(parsed.1); - let res = fs::write(&output_file, format!("{mod_decl}{output}")); if (res.is_err()) {