Skip to main content

crisp_resolve/
error.rs

1use crisp_ast::Span;
2use thiserror::Error;
3
4#[derive(Debug, Error)]
5pub enum ResolveError {
6    #[error("module not found: {path}")]
7    ModuleNotFound { path: String },
8    #[error("crate has no src/ directory at {root}")]
9    NoSrcDir { root: String },
10    #[error("failed to read {path}: {source}")]
11    Io {
12        path: String,
13        #[source]
14        source: std::io::Error,
15    },
16    #[error("parse error in {path}: {message}")]
17    Parse {
18        path: String,
19        message: String,
20        pos: u32,
21    },
22    #[error("[E0034] duplicate definition of `{name}` in module `{module}`")]
23    DuplicateDef {
24        name: String,
25        module: String,
26        span: Span,
27    },
28    #[error("{message}")]
29    UnresolvedName {
30        name: String,
31        span: Span,
32        /// Full user-facing message including `[E0035]` and optional help.
33        message: String,
34        hint: Option<String>,
35    },
36    #[error("[E0036] `{name}` is private in module `{module}`")]
37    PrivateImport {
38        name: String,
39        module: String,
40        span: Span,
41    },
42    #[error("[E0037] symbol `{name}` not exported from module `{module}`")]
43    NotExported {
44        name: String,
45        module: String,
46        span: Span,
47    },
48    #[error("[E0038] ambiguous import: `{name}` defined in multiple modules")]
49    AmbiguousImport { name: String, span: Span },
50    #[error(
51        "[E0039] shapes are not yet supported (`{name}`); remove the `shape` definition or bound (tracked: #21)"
52    )]
53    ShapesUnsupported { name: String, span: Span },
54    #[error(
55        "[E0044] Rust crate `{name}` is not a dependency; add it under `[dependencies]` in crisp.toml with `rust = true` (spec §14.2, #41)"
56    )]
57    RustCrateNotFound { name: String, span: Span },
58    #[error(
59        "[E0045] dependency `{name}` must set `rust = true` to import via `use rust…` (spec §14.2, #41)"
60    )]
61    RustCrateNotMarked { name: String, span: Span },
62    #[error(
63        "[E0046] `use rust…` requires an import list, e.g. `use rust.{name} {{ item }}` (spec §14.2)"
64    )]
65    RustImportNeedsList { name: String, span: Span },
66    #[error("[E0047] invalid `use rust` path `{path}`; expected `use rust.<crate> {{ … }}`")]
67    RustUsePathInvalid { path: String, span: Span },
68    #[error(
69        "[E0049] generic parameter `{name}` shadows a type of the same name; rename the parameter or drop the `<{name}>` binder"
70    )]
71    GenericShadowsType { name: String, span: Span },
72    #[error("failed to read crisp.toml at {root}: {message}")]
73    Manifest { root: String, message: String },
74}