@@ -14,31 +14,32 @@ PackageName = ${ Ident ~ (":" ~ Ident)+ }
1414PackageVersion = { (ASCII_ALPHANUMERIC | "." | "-" | "+")+ }
1515
1616// Type statement
17- TypeStatement = !{ InterfaceDecl | WorldDecl | ResourceDecl | VariantDecl | RecordDecl | FlagsDecl | EnumDecl | TypeAlias }
18- ResourceDecl = ${ ResourceKeyword ~ DelimitingSpace+ ~ Ident ~ DelimitingSpace* ~ ResourceBody }
19- ResourceBody = !{ Semicolon | (OpenBrace ~ (ResourceMethod ~ Semicolon)+ ~ CloseBrace) }
20- VariantDecl = ${ VariantKeyword ~ DelimitingSpace+ ~ Ident ~ DelimitingSpace* ~ VariantBody }
21- VariantBody = !{ OpenBrace ~ VariantCase ~ ("," ~ VariantCase)* ~ ","? ~ CloseBrace }
22- VariantCase = { Ident ~ VariantType? }
23- VariantType = { OpenParen ~ Type ~ CloseParen }
24- RecordDecl = ${ RecordKeyword ~ DelimitingSpace+ ~ Ident ~ DelimitingSpace* ~ RecordBody }
25- RecordBody = !{ OpenBrace ~ NamedType ~ ("," ~ NamedType)* ~ ","? ~ CloseBrace }
26- FlagsDecl = ${ FlagsKeyword ~ DelimitingSpace+ ~ Ident ~ DelimitingSpace* ~ FlagsBody }
27- FlagsBody = !{ OpenBrace ~ Ident ~ ("," ~ Ident)* ~ ","? ~ CloseBrace }
28- EnumDecl = ${ EnumKeyword ~ DelimitingSpace+ ~ Ident ~ DelimitingSpace* ~ EnumBody }
29- EnumBody = !{ OpenBrace ~ Ident ~ ("," ~ Ident)* ~ ","? ~ CloseBrace }
30- TypeAlias = ${ TypeKeyword ~ DelimitingSpace+ ~ Ident ~ DelimitingSpace* ~ Equals ~ DelimitingSpace* ~ TypeAliasKind ~ DelimitingSpace* ~ Semicolon }
31- TypeAliasKind = !{ FuncType | Type }
32- ResourceMethod = { Constructor | Method }
33- Constructor = { ConstructorKeyword ~ ParamList }
34- Method = { Ident ~ Colon ~ StaticKeyword? ~ FuncTypeRef }
35- FuncTypeRef = { Ident | FuncType }
36- FuncType = { FuncKeyword ~ ParamList ~ ResultList? }
37- ParamList = { OpenParen ~ (NamedType ~ ("," ~ NamedType)* ~ ","?)? ~ CloseParen }
38- ResultList = { Arrow ~ (NamedResultList | Type) }
39- NamedResultList = { OpenParen ~ (NamedType ~ ("," ~ NamedType)* ~ ","?)? ~ CloseParen }
40- NamedType = { Ident ~ Colon ~ Type }
41- Type = {
17+ TypeStatement = !{ InterfaceDecl | WorldDecl | ValueTypeStatement }
18+ ValueTypeStatement = { ResourceDecl | VariantDecl | RecordDecl | FlagsDecl | EnumDecl | TypeAlias }
19+ ResourceDecl = ${ ResourceKeyword ~ DelimitingSpace+ ~ Ident ~ DelimitingSpace* ~ ResourceBody }
20+ ResourceBody = !{ Semicolon | (OpenBrace ~ (ResourceMethod ~ Semicolon)+ ~ CloseBrace) }
21+ VariantDecl = ${ VariantKeyword ~ DelimitingSpace+ ~ Ident ~ DelimitingSpace* ~ VariantBody }
22+ VariantBody = !{ OpenBrace ~ VariantCase ~ ("," ~ VariantCase)* ~ ","? ~ CloseBrace }
23+ VariantCase = { Ident ~ VariantType? }
24+ VariantType = { OpenParen ~ Type ~ CloseParen }
25+ RecordDecl = ${ RecordKeyword ~ DelimitingSpace+ ~ Ident ~ DelimitingSpace* ~ RecordBody }
26+ RecordBody = !{ OpenBrace ~ NamedType ~ ("," ~ NamedType)* ~ ","? ~ CloseBrace }
27+ FlagsDecl = ${ FlagsKeyword ~ DelimitingSpace+ ~ Ident ~ DelimitingSpace* ~ FlagsBody }
28+ FlagsBody = !{ OpenBrace ~ Ident ~ ("," ~ Ident)* ~ ","? ~ CloseBrace }
29+ EnumDecl = ${ EnumKeyword ~ DelimitingSpace+ ~ Ident ~ DelimitingSpace* ~ EnumBody }
30+ EnumBody = !{ OpenBrace ~ Ident ~ ("," ~ Ident)* ~ ","? ~ CloseBrace }
31+ TypeAlias = ${ TypeKeyword ~ DelimitingSpace+ ~ Ident ~ DelimitingSpace* ~ Equals ~ DelimitingSpace* ~ TypeAliasKind ~ DelimitingSpace* ~ Semicolon }
32+ TypeAliasKind = !{ FuncType | Type }
33+ ResourceMethod = { Constructor | Method }
34+ Constructor = { ConstructorKeyword ~ ParamList }
35+ Method = { Ident ~ Colon ~ StaticKeyword? ~ FuncTypeRef }
36+ FuncTypeRef = { Ident | FuncType }
37+ FuncType = { FuncKeyword ~ ParamList ~ ResultList? }
38+ ParamList = { OpenParen ~ (NamedType ~ ("," ~ NamedType)* ~ ","?)? ~ CloseParen }
39+ ResultList = { Arrow ~ (NamedResultList | Type) }
40+ NamedResultList = { OpenParen ~ (NamedType ~ ("," ~ NamedType)* ~ ","?)? ~ CloseParen }
41+ NamedType = { Ident ~ Colon ~ Type }
42+ Type = {
4243 U8Keyword
4344 | S8Keyword
4445 | U16Keyword
@@ -59,23 +60,23 @@ Type = {
5960 | Borrow
6061 | Ident
6162}
62- Tuple = { TupleKeyword ~ OpenAngle ~ Type ~ ("," ~ Type)* ~ CloseAngle }
63- List = { ListKeyword ~ OpenAngle ~ Type ~ CloseAngle }
64- Option = { OptionKeyword ~ OpenAngle ~ Type ~ CloseAngle }
65- Result = { ResultKeyword ~ SpecifiedResult? }
66- SpecifiedResult = { OpenAngle ~ OmitType ~ ("," ~ Type)? ~ CloseAngle }
67- OmitType = { Underscore | Type }
68- Borrow = { BorrowKeyword ~ OpenAngle ~ Ident ~ CloseAngle }
69- InterfaceDecl = ${ InterfaceKeyword ~ DelimitingSpace+ ~ Ident ~ DelimitingSpace* ~ InterfaceBody }
63+ Tuple = { TupleKeyword ~ OpenAngle ~ Type ~ ("," ~ Type)* ~ CloseAngle }
64+ List = { ListKeyword ~ OpenAngle ~ Type ~ CloseAngle }
65+ Option = { OptionKeyword ~ OpenAngle ~ Type ~ CloseAngle }
66+ Result = { ResultKeyword ~ SpecifiedResult? }
67+ SpecifiedResult = { OpenAngle ~ OmitType ~ ("," ~ Type)? ~ CloseAngle }
68+ OmitType = { Underscore | Type }
69+ Borrow = { BorrowKeyword ~ OpenAngle ~ Ident ~ CloseAngle }
70+ InterfaceDecl = ${ InterfaceKeyword ~ DelimitingSpace+ ~ Ident ~ DelimitingSpace* ~ InterfaceBody }
7071InterfaceBody = !{ OpenBrace ~ InterfaceItem* ~ CloseBrace }
7172InterfaceItem = ${ DocComment* ~ WHITESPACE* ~ InterfaceItemKind }
72- InterfaceItemKind = !{ UseStatement | TypeStatement | InterfaceExportStatement }
73+ InterfaceItemKind = !{ UseStatement | ValueTypeStatement | InterfaceExportStatement }
7374InterfaceExportStatement = { Ident ~ Colon ~ FuncTypeRef ~ Semicolon }
7475// TODO: support world include statements
75- WorldDecl = ${ WorldKeyword ~ DelimitingSpace+ ~ Ident ~ DelimitingSpace* ~ WorldBody }
76+ WorldDecl = ${ WorldKeyword ~ DelimitingSpace+ ~ Ident ~ DelimitingSpace* ~ WorldBody }
7677WorldBody = !{ OpenBrace ~ WorldItem* ~ CloseBrace }
7778WorldItem = ${ DocComment* ~ WHITESPACE* ~ WorldItemKind }
78- WorldItemKind = !{ UseStatement | TypeStatement | WorldImportStatement | WorldExportStatement }
79+ WorldItemKind = !{ UseStatement | ValueTypeStatement | WorldImportStatement | WorldExportStatement }
7980WorldImportStatement = ${ ImportKeyword ~ DelimitingSpace+ ~ WorldItemDecl ~ DelimitingSpace* ~ Semicolon }
8081WorldExportStatement = ${ ExportKeyword ~ DelimitingSpace+ ~ WorldItemDecl ~ DelimitingSpace* ~ Semicolon }
8182WorldItemDecl = !{ WorldNamedItem | InterfaceRef }
0 commit comments