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:
parent
b323c95241
commit
536c9457b3
|
@ -68,7 +68,7 @@ impl telemetry::EventListener for Terminal {
|
||||||
root.to_str().unwrap_or("").bright_blue()
|
root.to_str().unwrap_or("").bright_blue()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
telemetry::Event::GeneratingDocumentation {
|
telemetry::Event::BuildingDocumentation {
|
||||||
name,
|
name,
|
||||||
version,
|
version,
|
||||||
root,
|
root,
|
||||||
|
@ -94,6 +94,13 @@ impl telemetry::EventListener for Terminal {
|
||||||
output_path.to_str().unwrap_or("").bright_blue()
|
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 } => {
|
telemetry::Event::EvaluatingFunction { results } => {
|
||||||
println!("{}\n", "...Evaluating function".bold().purple());
|
println!("{}\n", "...Evaluating function".bold().purple());
|
||||||
|
|
||||||
|
|
|
@ -100,14 +100,19 @@ where
|
||||||
|
|
||||||
pub fn docs(&mut self, destination: Option<PathBuf>) -> Result<(), Error> {
|
pub fn docs(&mut self, destination: Option<PathBuf>) -> Result<(), Error> {
|
||||||
self.event_listener
|
self.event_listener
|
||||||
.handle_event(Event::GeneratingDocumentation {
|
.handle_event(Event::BuildingDocumentation {
|
||||||
root: self.root.clone(),
|
root: self.root.clone(),
|
||||||
name: self.config.name.clone(),
|
name: self.config.name.clone(),
|
||||||
version: self.config.version.clone(),
|
version: self.config.version.clone(),
|
||||||
});
|
});
|
||||||
|
self.read_source_files()?;
|
||||||
|
|
||||||
let destination = destination.unwrap_or(self.root.join("doc"));
|
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 =
|
let doc_files =
|
||||||
docs::generate_all(&self.root, &self.config, checked_modules.values().collect());
|
docs::generate_all(&self.root, &self.config, checked_modules.values().collect());
|
||||||
for file in doc_files {
|
for file in doc_files {
|
||||||
|
@ -139,15 +144,6 @@ where
|
||||||
self.compile(options)
|
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> {
|
pub fn compile(&mut self, options: Options) -> Result<(), Error> {
|
||||||
self.event_listener
|
self.event_listener
|
||||||
.handle_event(Event::StartingCompilation {
|
.handle_event(Event::StartingCompilation {
|
||||||
|
@ -156,8 +152,9 @@ where
|
||||||
version: self.config.version.clone(),
|
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)?;
|
let validators = self.validate_validators(&mut checked_modules)?;
|
||||||
|
|
||||||
match options.code_gen_mode {
|
match options.code_gen_mode {
|
||||||
|
@ -219,6 +216,8 @@ where
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parse_sources(&mut self) -> Result<ParsedModules, Error> {
|
fn parse_sources(&mut self) -> Result<ParsedModules, Error> {
|
||||||
|
self.event_listener.handle_event(Event::ParsingProjectFiles);
|
||||||
|
|
||||||
let mut errors = Vec::new();
|
let mut errors = Vec::new();
|
||||||
let mut parsed_modules = HashMap::with_capacity(self.sources.len());
|
let mut parsed_modules = HashMap::with_capacity(self.sources.len());
|
||||||
|
|
||||||
|
@ -276,11 +275,9 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn type_check(
|
fn type_check(&mut self, mut parsed_modules: ParsedModules) -> Result<CheckedModules, Error> {
|
||||||
&mut self,
|
self.event_listener.handle_event(Event::TypeChecking);
|
||||||
mut parsed_modules: ParsedModules,
|
let processing_sequence = parsed_modules.sequence()?;
|
||||||
processing_sequence: Vec<String>,
|
|
||||||
) -> Result<CheckedModules, Error> {
|
|
||||||
let mut modules = HashMap::with_capacity(parsed_modules.len() + 1);
|
let mut modules = HashMap::with_capacity(parsed_modules.len() + 1);
|
||||||
|
|
||||||
for name in processing_sequence {
|
for name in processing_sequence {
|
||||||
|
|
|
@ -11,13 +11,16 @@ pub enum Event {
|
||||||
version: String,
|
version: String,
|
||||||
root: PathBuf,
|
root: PathBuf,
|
||||||
},
|
},
|
||||||
GeneratingDocumentation {
|
BuildingDocumentation {
|
||||||
name: String,
|
name: String,
|
||||||
version: String,
|
version: String,
|
||||||
root: PathBuf,
|
root: PathBuf,
|
||||||
},
|
},
|
||||||
ParsingProjectFiles,
|
ParsingProjectFiles,
|
||||||
TypeChecking,
|
TypeChecking,
|
||||||
|
GeneratingDocFiles {
|
||||||
|
output_path: PathBuf,
|
||||||
|
},
|
||||||
GeneratingUPLC {
|
GeneratingUPLC {
|
||||||
output_path: PathBuf,
|
output_path: PathBuf,
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue