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