From a89694ed75765981fa18bec846c71bf1007fc83d Mon Sep 17 00:00:00 2001 From: KtorZ Date: Sat, 22 Feb 2025 17:52:21 +0100 Subject: [PATCH] Use less vertical space for type-constructor hint; Also, show it actually for UnknownTypeConstructor, and not UnknownVariable. There's currently an error that wrongly assign an 'UnknownVariable' in place where it should be an 'UnknownTypeConstructor'. Fix coming in the next commit. Signed-off-by: KtorZ --- crates/aiken-lang/src/tipo/error.rs | 32 ++++++++++++----------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/crates/aiken-lang/src/tipo/error.rs b/crates/aiken-lang/src/tipo/error.rs index e2a414d4..7b5cda49 100644 --- a/crates/aiken-lang/src/tipo/error.rs +++ b/crates/aiken-lang/src/tipo/error.rs @@ -898,7 +898,7 @@ Perhaps, try the following: #[diagnostic(code("unknown::type_constructor"))] #[diagnostic(help( "{}", - suggest_neighbor(name, constructors.iter(), "Did you forget to import it?") + suggest_neighbor(name, constructors.iter(), &suggest_import_constructor()) ))] UnknownTypeConstructor { #[label("unknown constructor")] @@ -1527,29 +1527,23 @@ fn suggest_import_constructor() -> String { Data-type constructors are not automatically imported, even if their type is imported. So, if a module 'aiken/pet' defines the following type: - ┍━ aiken/pet.ak ━━━━━━━━ - │ {keyword_pub} {keyword_type} {type_Pet} {{ - │ {variant_Cat} - │ {variant_Dog} - │ }} + ┍━ aiken/pet.ak ━ ==> ┍━ foo.ak ━━━━━━━━━━━━━━━━ + │ {keyword_pub} {keyword_type} {type_Pet} {{ │ {keyword_use} aiken/pet.{{{type_Pet}, {variant_Dog}}} + │ {variant_Cat} │ + │ {variant_Dog} │ {keyword_fn} foo(pet : {type_Pet}) {{ + │ }} │ {keyword_when} pet {keyword_is} {{ + │ pet.{variant_Cat} -> // ... + │ {variant_Dog} -> // ... + │ }} + │ }} You must import its constructors explicitly to use them, or prefix them with the module's name. - - ┍━ foo.ak ━━━━━━━━ - │ {keyword_use} aiken/pet.{{{type_Pet}, {variant_Dog}}} - │ - │ {keyword_fn} foo(pet : {type_Pet}) {{ - │ {keyword_when} pet {keyword_is} {{ - │ pet.{variant_Cat} -> // ... - │ {variant_Dog} -> // ... - │ }} - │ }} "# , keyword_fn = "fn".if_supports_color(Stdout, |s| s.yellow()) , keyword_is = "is".if_supports_color(Stdout, |s| s.yellow()) - , keyword_pub = "pub".if_supports_color(Stdout, |s| s.bright_blue()) - , keyword_type = "type".if_supports_color(Stdout, |s| s.bright_blue()) - , keyword_use = "use".if_supports_color(Stdout, |s| s.bright_blue()) + , keyword_pub = "pub".if_supports_color(Stdout, |s| s.bright_purple()) + , keyword_type = "type".if_supports_color(Stdout, |s| s.purple()) + , keyword_use = "use".if_supports_color(Stdout, |s| s.bright_purple()) , keyword_when = "when".if_supports_color(Stdout, |s| s.yellow()) , type_Pet = "Pet" .if_supports_color(Stdout, |s| s.bright_blue())