Skip to main content

geam_core/frontend/
error.rs

1use camino::Utf8PathBuf;
2use ecow::EcoString;
3use gleam_compiler_core::parse::error::ParseError;
4use gleam_compiler_core::type_::Error as TypeError;
5use thiserror::Error;
6
7#[derive(Debug, Error)]
8pub enum FrontendError {
9    #[error("failed to parse Gleam module {path}")]
10    Parse {
11        path: Utf8PathBuf,
12        error: Box<ParseError>,
13    },
14
15    #[error("failed to analyse Gleam module")]
16    Analyse { errors: Vec<TypeError> },
17
18    #[error("package {package} was supplied more than once")]
19    DuplicatePackage { package: EcoString },
20
21    #[error(
22        "module {module} was supplied by both package {first_package} and package {second_package}"
23    )]
24    DuplicateModule {
25        module: EcoString,
26        first_package: EcoString,
27        first_path: Utf8PathBuf,
28        second_package: EcoString,
29        second_path: Utf8PathBuf,
30    },
31
32    #[error(
33        "module {module} was supplied as source by package {source_package} and as a host module by package {host_package}"
34    )]
35    SourceHostModuleCollision {
36        module: EcoString,
37        source_package: EcoString,
38        source_path: Utf8PathBuf,
39        host_package: EcoString,
40    },
41
42    #[error("root package {package} was not supplied")]
43    MissingRootPackage { package: EcoString },
44
45    #[error("root module {module} was not supplied by package {package}")]
46    MissingRootModule {
47        package: EcoString,
48        module: EcoString,
49    },
50
51    #[error("module import cycle: {modules:?}")]
52    ImportCycle { modules: Vec<EcoString> },
53}