swamp_script_error_report/
dep.rs1use crate::Report;
2use eira::Kind;
3use std::io::stderr;
4use std::path::Path;
5use swamp_script_dep_loader::{DepLoaderError, DependencyError, ParseRootError};
6use swamp_script_node::Span;
7use swamp_script_source_map::SourceMap;
8
9use crate::Builder;
10use crate::parse::build_parser_error;
11
12#[must_use]
13pub fn build_dependency_error(err: &DependencyError) -> Builder<usize> {
14 let span = &Span::default();
15 match err {
16 DependencyError::CircularDependency(_err) => {
17 Report::build(Kind::Error, 10, "circular dependency", span)
18 }
19 DependencyError::ParseRootError(parse_root) => match parse_root {
20 ParseRootError::ParserError(err) => build_parser_error(err),
21 },
22 DependencyError::ReadFileError(err) => {
23 Report::build(Kind::Error, 20, &format!("read file error {}", err), span)
24 }
25 }
26}
27
28pub fn build_dep_loader_error(err: &DepLoaderError) -> Builder<usize> {
29 match err {
30 DepLoaderError::DependencyError(dependency_err) => build_dependency_error(dependency_err),
31 }
32}
33
34pub fn show_dependency_error(err: &DependencyError, source_map: &SourceMap, current_dir: &Path) {
37 let builder = build_dependency_error(err);
38 let report = builder.build();
39 report.print(source_map, current_dir, stderr()).unwrap();
40}