swamp_script_error_report/
dep.rs

1use 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
34/// # Panics
35///
36pub 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}