chore: improve `Union/Mapping` error messages

This commit is contained in:
Shunsuke Shibayama 2023-05-10 23:34:06 +09:00
parent 8be2f4c7d4
commit 05835e7b0a
1 changed files with 18 additions and 0 deletions

View File

@ -521,6 +521,15 @@ impl ASTConverter {
match &name[..] { match &name[..] {
"Union" => { "Union" => {
let ExpressionType::Tuple { mut elements } = args.node else { let ExpressionType::Tuple { mut elements } = args.node else {
let err = CompileError::syntax_error(
self.cfg.input.clone(),
line!() as usize,
pyloc_to_ergloc(args.location, length(&args.node)),
self.cur_namespace(),
"`Union` takes at least 2 types".into(),
None,
);
self.errs.push(err);
return Self::gen_dummy_type_spec(args.location); return Self::gen_dummy_type_spec(args.location);
}; };
let lhs = self.convert_type_spec(elements.remove(0)); let lhs = self.convert_type_spec(elements.remove(0));
@ -606,6 +615,15 @@ impl ASTConverter {
} }
"Mapping" | "MutableMapping" => { "Mapping" | "MutableMapping" => {
let ExpressionType::Tuple { mut elements } = args.node else { let ExpressionType::Tuple { mut elements } = args.node else {
let err = CompileError::syntax_error(
self.cfg.input.clone(),
line!() as usize,
pyloc_to_ergloc(args.location, length(&args.node)),
self.cur_namespace(),
format!("`{name}` takes 2 types"),
None,
);
self.errs.push(err);
return Self::gen_dummy_type_spec(args.location); return Self::gen_dummy_type_spec(args.location);
}; };
let key_t = self.convert_expr(elements.remove(0)); let key_t = self.convert_expr(elements.remove(0));