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 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}