Tag with no args in error msgs (#471)

This commit is contained in:
Sébastien Besnier 2020-09-05 08:42:40 +02:00
parent 9170f126ac
commit f319fdad79
4 changed files with 45 additions and 6 deletions

View file

@ -758,7 +758,10 @@ pub fn constrain_expr(
Box::new(Type::Variable(*ext_var)), Box::new(Type::Variable(*ext_var)),
), ),
expected.clone(), expected.clone(),
Category::TagApply(name.clone()), Category::TagApply {
tag_name: name.clone(),
args_count: arguments.len(),
},
region, region,
); );
let ast_con = Eq( let ast_con = Eq(

View file

@ -620,13 +620,19 @@ pub fn constrain_expr(
let union_con = Eq( let union_con = Eq(
union_type, union_type,
expected.clone(), expected.clone(),
Category::TagApply(name.clone()), Category::TagApply {
tag_name: name.clone(),
args_count: arguments.len(),
},
region, region,
); );
let ast_con = Eq( let ast_con = Eq(
Type::Variable(*variant_var), Type::Variable(*variant_var),
expected, expected,
Category::TagApply(name.clone()), Category::TagApply {
tag_name: name.clone(),
args_count: arguments.len(),
},
region, region,
); );

View file

@ -882,12 +882,39 @@ fn add_category<'b>(
Lambda => alloc.concat(vec![this_is, alloc.text(" an anonymous function of type:")]), Lambda => alloc.concat(vec![this_is, alloc.text(" an anonymous function of type:")]),
TagApply(TagName::Global(name)) => alloc.concat(vec![ TagApply {
tag_name: TagName::Global(name),
args_count: 0,
} => alloc.concat(vec![
alloc.text("This "),
alloc.global_tag_name(name.to_owned()),
if name.as_str() == "True" || name.as_str() == "False" {
alloc.text(" boolean has the type:")
} else {
alloc.text(" global tag has the type:")
},
]),
TagApply {
tag_name: TagName::Private(name),
args_count: 0,
} => alloc.concat(vec![
alloc.text("This "),
alloc.private_tag_name(*name),
alloc.text(" private tag has the type:"),
]),
TagApply {
tag_name: TagName::Global(name),
args_count: _,
} => alloc.concat(vec![
alloc.text("This "), alloc.text("This "),
alloc.global_tag_name(name.to_owned()), alloc.global_tag_name(name.to_owned()),
alloc.text(" global tag application has the type:"), alloc.text(" global tag application has the type:"),
]), ]),
TagApply(TagName::Private(name)) => alloc.concat(vec![ TagApply {
tag_name: TagName::Private(name),
args_count: _,
} => alloc.concat(vec![
alloc.text("This "), alloc.text("This "),
alloc.private_tag_name(*name), alloc.private_tag_name(*name),
alloc.text(" private tag application has the type:"), alloc.text(" private tag application has the type:"),

View file

@ -927,7 +927,10 @@ pub enum Category {
Lookup(Symbol), Lookup(Symbol),
CallResult(Option<Symbol>), CallResult(Option<Symbol>),
LowLevelOpResult(LowLevel), LowLevelOpResult(LowLevel),
TagApply(TagName), TagApply {
tag_name: TagName,
args_count: usize,
},
Lambda, Lambda,
Uniqueness, Uniqueness,
StrInterpolation, StrInterpolation,