From a18aad7daf3387040da915325cd473b7e084479e Mon Sep 17 00:00:00 2001 From: rvcas Date: Sat, 10 Dec 2022 17:55:31 -0500 Subject: [PATCH] refactor(project): use new Options instead of a spiderweb of bools --- crates/project/src/lib.rs | 52 +++++++++++++++++++++-------------- crates/project/src/options.rs | 9 ++++++ 2 files changed, 41 insertions(+), 20 deletions(-) create mode 100644 crates/project/src/options.rs diff --git a/crates/project/src/lib.rs b/crates/project/src/lib.rs index 59ce0be1..a561d7ad 100644 --- a/crates/project/src/lib.rs +++ b/crates/project/src/lib.rs @@ -8,6 +8,7 @@ pub mod config; pub mod error; pub mod format; pub mod module; +pub mod options; pub mod script; pub mod telemetry; @@ -19,6 +20,7 @@ use aiken_lang::{ IdGenerator, }; use miette::NamedSource; +use options::{CodeGenMode, Options}; use pallas::{ codec::minicbor, ledger::{addresses::Address, primitives::babbage}, @@ -92,19 +94,26 @@ where } pub fn build(&mut self, uplc: bool) -> Result<(), Error> { - self.compile(true, uplc, false) + let options = Options { + code_gen_mode: CodeGenMode::Build(uplc), + }; + + self.compile(options) } pub fn check(&mut self, skip_tests: bool) -> Result<(), Error> { - self.compile(false, false, !skip_tests) + let options = Options { + code_gen_mode: if skip_tests { + CodeGenMode::NoOp + } else { + CodeGenMode::Test + }, + }; + + self.compile(options) } - pub fn compile( - &mut self, - uplc_gen: bool, - uplc_dump: bool, - run_tests: bool, - ) -> Result<(), Error> { + pub fn compile(&mut self, options: Options) -> Result<(), Error> { self.event_listener .handle_event(Event::StartingCompilation { root: self.root.clone(), @@ -126,19 +135,22 @@ where let validators = self.validate_validators(&mut checked_modules)?; - // TODO: In principle, uplc_gen and run_tests can't be true together. We probably want to - // model the options differently to make it obvious at the type-level. - if uplc_gen { - self.event_listener.handle_event(Event::GeneratingUPLC { - output_path: self.output_path(), - }); - let programs = self.code_gen(validators, &checked_modules)?; - self.write_build_outputs(programs, uplc_dump)?; - } + match options.code_gen_mode { + CodeGenMode::Build(uplc_dump) => { + self.event_listener.handle_event(Event::GeneratingUPLC { + output_path: self.output_path(), + }); - if run_tests { - let tests = self.test_gen(&checked_modules)?; - self.run_tests(tests); + let programs = self.code_gen(validators, &checked_modules)?; + + self.write_build_outputs(programs, uplc_dump)?; + } + CodeGenMode::Test => { + let tests = self.test_gen(&checked_modules)?; + + self.run_tests(tests); + } + CodeGenMode::NoOp => (), } Ok(()) diff --git a/crates/project/src/options.rs b/crates/project/src/options.rs new file mode 100644 index 00000000..bd0335e1 --- /dev/null +++ b/crates/project/src/options.rs @@ -0,0 +1,9 @@ +pub struct Options { + pub code_gen_mode: CodeGenMode, +} + +pub enum CodeGenMode { + Test, + Build(bool), + NoOp, +}