From 536c9457b3d7ac83531837aa919dbb74022c2aff Mon Sep 17 00:00:00 2001 From: KtorZ Date: Fri, 16 Dec 2022 22:33:26 +0100 Subject: [PATCH] Refactor project source parsing There was already a 'parse_sources' function, and 'parse' was actually more about typechecking than parsing. --- crates/cli/src/lib.rs | 9 ++++++++- crates/project/src/lib.rs | 33 +++++++++++++++------------------ crates/project/src/telemetry.rs | 5 ++++- 3 files changed, 27 insertions(+), 20 deletions(-) diff --git a/crates/cli/src/lib.rs b/crates/cli/src/lib.rs index 20bf671c..28cb9f01 100644 --- a/crates/cli/src/lib.rs +++ b/crates/cli/src/lib.rs @@ -68,7 +68,7 @@ impl telemetry::EventListener for Terminal { root.to_str().unwrap_or("").bright_blue() ); } - telemetry::Event::GeneratingDocumentation { + telemetry::Event::BuildingDocumentation { name, version, root, @@ -94,6 +94,13 @@ impl telemetry::EventListener for Terminal { output_path.to_str().unwrap_or("").bright_blue() ); } + telemetry::Event::GeneratingDocFiles { output_path } => { + println!( + "{} in {}", + "...Generating documentation files".bold().purple(), + output_path.to_str().unwrap_or("").bright_blue() + ); + } telemetry::Event::EvaluatingFunction { results } => { println!("{}\n", "...Evaluating function".bold().purple()); diff --git a/crates/project/src/lib.rs b/crates/project/src/lib.rs index 09d3fe5e..038191ce 100644 --- a/crates/project/src/lib.rs +++ b/crates/project/src/lib.rs @@ -100,14 +100,19 @@ where pub fn docs(&mut self, destination: Option) -> Result<(), Error> { self.event_listener - .handle_event(Event::GeneratingDocumentation { + .handle_event(Event::BuildingDocumentation { root: self.root.clone(), name: self.config.name.clone(), version: self.config.version.clone(), }); + self.read_source_files()?; let destination = destination.unwrap_or(self.root.join("doc")); - let checked_modules = self.parse()?; + let parsed_modules = self.parse_sources()?; + let checked_modules = self.type_check(parsed_modules)?; + self.event_listener.handle_event(Event::GeneratingDocFiles { + output_path: destination.clone(), + }); let doc_files = docs::generate_all(&self.root, &self.config, checked_modules.values().collect()); for file in doc_files { @@ -139,15 +144,6 @@ where self.compile(options) } - pub fn parse(&mut self) -> Result { - self.event_listener.handle_event(Event::ParsingProjectFiles); - self.read_source_files()?; - let parsed_modules = self.parse_sources()?; - let processing_sequence = parsed_modules.sequence()?; - self.event_listener.handle_event(Event::TypeChecking); - self.type_check(parsed_modules, processing_sequence) - } - pub fn compile(&mut self, options: Options) -> Result<(), Error> { self.event_listener .handle_event(Event::StartingCompilation { @@ -156,8 +152,9 @@ where version: self.config.version.clone(), }); - let mut checked_modules = self.parse()?; - + self.read_source_files()?; + let parsed_modules = self.parse_sources()?; + let mut checked_modules = self.type_check(parsed_modules)?; let validators = self.validate_validators(&mut checked_modules)?; match options.code_gen_mode { @@ -219,6 +216,8 @@ where } fn parse_sources(&mut self) -> Result { + self.event_listener.handle_event(Event::ParsingProjectFiles); + let mut errors = Vec::new(); let mut parsed_modules = HashMap::with_capacity(self.sources.len()); @@ -276,11 +275,9 @@ where } } - fn type_check( - &mut self, - mut parsed_modules: ParsedModules, - processing_sequence: Vec, - ) -> Result { + fn type_check(&mut self, mut parsed_modules: ParsedModules) -> Result { + self.event_listener.handle_event(Event::TypeChecking); + let processing_sequence = parsed_modules.sequence()?; let mut modules = HashMap::with_capacity(parsed_modules.len() + 1); for name in processing_sequence { diff --git a/crates/project/src/telemetry.rs b/crates/project/src/telemetry.rs index a4f7c65d..a09bbf63 100644 --- a/crates/project/src/telemetry.rs +++ b/crates/project/src/telemetry.rs @@ -11,13 +11,16 @@ pub enum Event { version: String, root: PathBuf, }, - GeneratingDocumentation { + BuildingDocumentation { name: String, version: String, root: PathBuf, }, ParsingProjectFiles, TypeChecking, + GeneratingDocFiles { + output_path: PathBuf, + }, GeneratingUPLC { output_path: PathBuf, },