Refactor project source parsing

There was already a 'parse_sources' function, and 'parse' was actually more about typechecking than parsing.
This commit is contained in:
KtorZ 2022-12-16 22:33:26 +01:00
parent b323c95241
commit 536c9457b3
No known key found for this signature in database
GPG Key ID: 33173CB6F77F4277
3 changed files with 27 additions and 20 deletions

View File

@ -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());

View File

@ -100,14 +100,19 @@ where
pub fn docs(&mut self, destination: Option<PathBuf>) -> 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<CheckedModules, Error> {
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<ParsedModules, Error> {
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<String>,
) -> Result<CheckedModules, Error> {
fn type_check(&mut self, mut parsed_modules: ParsedModules) -> Result<CheckedModules, Error> {
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 {

View File

@ -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,
},