diff --git a/crates/cli/src/project.rs b/crates/cli/src/project.rs index 438d9b4a..6cbe27fc 100644 --- a/crates/cli/src/project.rs +++ b/crates/cli/src/project.rs @@ -70,15 +70,26 @@ impl Project { } fn read_source_files(&mut self) -> Result<(), Error> { - let lib = self.root.join("lib"); - let scripts = self.root.join("scripts"); + let lib = self.root.join(format!("src/{}", self.config.name)); + let scripts = self.root.join("src/scripts"); + self.read_root_lib_file()?; self.aiken_files(&scripts, ModuleKind::Script)?; self.aiken_files(&lib, ModuleKind::Lib)?; Ok(()) } + fn read_root_lib_file(&mut self) -> Result<(), Error> { + let root_lib_path = self.root.join(format!("src/{}.ak", self.config.name)); + + if root_lib_path.exists() { + self.add_module(root_lib_path, &self.root.join("src"), ModuleKind::Lib)?; + } + + Ok(()) + } + fn parse_sources(&mut self) -> Result { let mut errors = Vec::new(); let mut parsed_modules = HashMap::with_capacity(self.sources.len()); @@ -235,7 +246,7 @@ impl Project { full_module_path: &Path, kind: ModuleKind, ) -> String { - // ../../lib/module.ak + // ../../{config.name}/module.ak // module.ak let mut module_path = full_module_path @@ -244,7 +255,7 @@ impl Project { .to_path_buf(); // module - let _ = module_path.set_extension(""); + module_path.set_extension(""); // Stringify let name = module_path @@ -256,7 +267,7 @@ impl Project { let name = name.replace('\\', "/"); // project_name/module - if kind.is_lib() { + if kind.is_lib() && name != self.config.name { format!("{}/{}", self.config.name, name) } else { name diff --git a/examples/sample/src/sample.ak b/examples/sample/src/sample.ak new file mode 100644 index 00000000..2e8de51c --- /dev/null +++ b/examples/sample/src/sample.ak @@ -0,0 +1,3 @@ +pub type ScriptContext { + thing: String +} \ No newline at end of file diff --git a/examples/sample/lib/syntax.ak b/examples/sample/src/sample/syntax.ak similarity index 100% rename from examples/sample/lib/syntax.ak rename to examples/sample/src/sample/syntax.ak diff --git a/examples/sample/scripts/swap.ak b/examples/sample/src/scripts/swap.ak similarity index 77% rename from examples/sample/scripts/swap.ak rename to examples/sample/src/scripts/swap.ak index 27aa3d81..8b395a43 100644 --- a/examples/sample/scripts/swap.ak +++ b/examples/sample/src/scripts/swap.ak @@ -1,3 +1,4 @@ +use sample use sample/syntax.{append} pub type Datum { @@ -9,7 +10,7 @@ pub type Redeemer { Sell } -pub fn validate(datum: Datum, rdmr: Redeemer, ctx: syntax.ScriptContext) -> Bool { +pub fn validate(datum: Datum, rdmr: Redeemer, ctx: sample.ScriptContext) -> Bool { let thing = if True { 3 } else {