Merge pull request #2276 from rtfeldman/i/2265

Parse "as" aliases into tag/args rather than arbitrary annotations
This commit is contained in:
Folkert de Vries 2021-12-27 20:56:48 +01:00 committed by GitHub
commit bb935948aa
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 506 additions and 284 deletions

View file

@ -1,6 +1,6 @@
use crate::ast::{
AssignedField, Collection, CommentOrNewline, Def, Expr, ExtractSpaces, Pattern, Spaceable,
TypeAnnotation,
AliasHeader, AssignedField, Collection, CommentOrNewline, Def, Expr, ExtractSpaces, Pattern,
Spaceable, TypeAnnotation,
};
use crate::blankspace::{space0_after_e, space0_around_ee, space0_before_e, space0_e};
use crate::ident::{lowercase_ident, parse_ident, Ident};
@ -756,8 +756,10 @@ fn append_alias_definition<'a>(
loc_ann: Loc<TypeAnnotation<'a>>,
) {
let def = Def::Alias {
name,
vars: pattern_arguments,
header: AliasHeader {
name,
vars: pattern_arguments,
},
ann: loc_ann,
};
let mut loc_def = Loc::at(region, def);
@ -1108,8 +1110,10 @@ fn parse_expr_operator<'a>(
let alias_region = Region::span_across(&expr.region, &ann_type.region);
let alias = Def::Alias {
name: Loc::at(expr.region, name),
vars: type_arguments.into_bump_slice(),
header: AliasHeader {
name: Loc::at(expr.region, name),
vars: type_arguments.into_bump_slice(),
},
ann: ann_type,
};