diff --git a/crates/aiken-lang/src/tipo/environment.rs b/crates/aiken-lang/src/tipo/environment.rs index b95a5a0b..954ebfdc 100644 --- a/crates/aiken-lang/src/tipo/environment.rs +++ b/crates/aiken-lang/src/tipo/environment.rs @@ -309,11 +309,14 @@ impl<'a> Environment<'a> { location: Span, ) -> Result<&ValueConstructor, Error> { match module { - None => self.scope.get(name).ok_or_else(|| Error::UnknownVariable { - location, - name: name.to_string(), - variables: self.local_value_names(), - }), + None => self + .scope + .get(name) + .ok_or_else(|| Error::UnknownTypeConstructor { + location, + name: name.to_string(), + constructors: self.local_constructor_names(), + }), Some(m) => { let (_, module) = @@ -577,6 +580,14 @@ impl<'a> Environment<'a> { .collect() } + pub fn local_constructor_names(&self) -> Vec { + self.scope + .keys() + .filter(|&t| t.chars().next().unwrap_or_default().is_uppercase()) + .map(|t| t.to_string()) + .collect() + } + fn make_type_vars( &mut self, args: &[String], diff --git a/crates/aiken-lang/src/tipo/error.rs b/crates/aiken-lang/src/tipo/error.rs index 93706a8c..2ce8b768 100644 --- a/crates/aiken-lang/src/tipo/error.rs +++ b/crates/aiken-lang/src/tipo/error.rs @@ -799,7 +799,7 @@ Perhaps, try the following: suggest_neighbor(name, constructors.iter(), "Did you forget to import it?") ))] UnknownTypeConstructor { - #[label] + #[label("unknown constructor")] location: Span, name: String, constructors: Vec,