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 { path: String, message: String },
18    #[error("[E0034] duplicate definition of `{name}` in module `{module}`")]
19    DuplicateDef {
20        name: String,
21        module: String,
22        span: Span,
23    },
24    #[error("{message}")]
25    UnresolvedName {
26        name: String,
27        span: Span,
28        /// Full user-facing message including `[E0035]` and optional help.
29        message: String,
30        hint: Option<String>,
31    },
32    #[error("[E0036] `{name}` is private in module `{module}`")]
33    PrivateImport {
34        name: String,
35        module: String,
36        span: Span,
37    },
38    #[error("[E0037] symbol `{name}` not exported from module `{module}`")]
39    NotExported {
40        name: String,
41        module: String,
42        span: Span,
43    },
44    #[error("[E0038] ambiguous import: `{name}` defined in multiple modules")]
45    AmbiguousImport { name: String, span: Span },
46    #[error(
47        "[E0039] shapes are not yet supported (`{name}`); remove the `shape` definition or bound (tracked: #21)"
48    )]
49    ShapesUnsupported { name: String, span: Span },
50    #[error(
51        "[E0044] Rust crate `{name}` is not a dependency; add it under `[dependencies]` in crisp.toml with `rust = true` (spec §14.2, #41)"
52    )]
53    RustCrateNotFound { name: String, span: Span },
54    #[error(
55        "[E0045] dependency `{name}` must set `rust = true` to import via `use rust…` (spec §14.2, #41)"
56    )]
57    RustCrateNotMarked { name: String, span: Span },
58    #[error(
59        "[E0046] `use rust…` requires an import list, e.g. `use rust.{name} {{ item }}` (spec §14.2)"
60    )]
61    RustImportNeedsList { name: String, span: Span },
62    #[error("[E0047] invalid `use rust` path `{path}`; expected `use rust.<crate> {{ … }}`")]
63    RustUsePathInvalid { path: String, span: Span },
64    #[error(
65        "[E0049] generic parameter `{name}` shadows a type of the same name; rename the parameter or drop the `<{name}>` binder"
66    )]
67    GenericShadowsType { name: String, span: Span },
68    #[error("failed to read crisp.toml at {root}: {message}")]
69    Manifest { root: String, message: String },
70}