mirror of
https://github.com/luau-lang/luau.git
synced 2024-12-12 13:00:38 +00:00
Fix grammar issues (#915)
- The type list for function declarations does not accept defaults, but the grammar incorrectly allowed this. - Allow the empty table type `{}` - Allow composite types and types surrounded by parentheses (e.g. `string??`, `(string)`, `(string | number) & boolean`) --------- Co-authored-by: vegorov-rbx <75688451+vegorov-rbx@users.noreply.github.com>
This commit is contained in:
parent
e8c0550586
commit
5891de6724
1 changed files with 19 additions and 11 deletions
|
@ -22,12 +22,12 @@ stat = varlist '=' explist |
|
|||
'function' funcname funcbody |
|
||||
'local' 'function' NAME funcbody |
|
||||
'local' bindinglist ['=' explist] |
|
||||
['export'] 'type' NAME ['<' GenericTypeParameterList '>'] '=' Type
|
||||
['export'] 'type' NAME ['<' GenericTypeListWithDefaults '>'] '=' Type
|
||||
|
||||
laststat = 'return' [explist] | 'break' | 'continue'
|
||||
|
||||
funcname = NAME {'.' NAME} [':' NAME]
|
||||
funcbody = ['<' GenericTypeParameterList '>'] '(' [parlist] ')' [':' ReturnType] block 'end'
|
||||
funcbody = ['<' GenericTypeList '>'] '(' [parlist] ')' [':' ReturnType] block 'end'
|
||||
parlist = bindinglist [',' '...'] | '...'
|
||||
|
||||
explist = {exp ','} exp
|
||||
|
@ -63,17 +63,25 @@ SimpleType =
|
|||
NAME ['.' NAME] [ '<' [TypeParams] '>' ] |
|
||||
'typeof' '(' exp ')' |
|
||||
TableType |
|
||||
FunctionType
|
||||
FunctionType |
|
||||
'(' Type ')'
|
||||
|
||||
SingletonType = STRING | 'true' | 'false'
|
||||
|
||||
Type =
|
||||
SimpleType ['?'] |
|
||||
Type ['|' Type] |
|
||||
Type ['&' Type]
|
||||
UnionSuffix = {'?'} {'|' SimpleType {'?'}}
|
||||
IntersectionSuffix = {'&' SimpleType}
|
||||
Type = SimpleType (UnionSuffix | IntersectionSuffix)
|
||||
|
||||
GenericTypePackParameter = NAME '...'
|
||||
GenericTypeList = NAME [',' GenericTypeList] | GenericTypePackParameter {',' GenericTypePackParameter}
|
||||
|
||||
GenericTypePackParameterWithDefault = NAME '...' '=' (TypePack | VariadicTypePack | GenericTypePack)
|
||||
GenericTypeListWithDefaults =
|
||||
GenericTypeList {',' GenericTypePackParameterWithDefault} |
|
||||
NAME {',' NAME} {',' NAME '=' Type} {',' GenericTypePackParameterWithDefault} |
|
||||
NAME '=' Type {',' GenericTypePackParameterWithDefault} |
|
||||
GenericTypePackParameterWithDefault {',' GenericTypePackParameterWithDefault}
|
||||
|
||||
GenericTypePackParameter = NAME '...' ['=' (TypePack | VariadicTypePack | GenericTypePack)]
|
||||
GenericTypeParameterList = NAME ['=' Type] [',' GenericTypeParameterList] | GenericTypePackParameter {',' GenericTypePackParameter}
|
||||
TypeList = Type [',' TypeList] | '...' Type
|
||||
TypeParams = (Type | TypePack | VariadicTypePack | GenericTypePack) [',' TypeParams]
|
||||
TypePack = '(' [TypeList] ')'
|
||||
|
@ -84,6 +92,6 @@ TableIndexer = '[' Type ']' ':' Type
|
|||
TableProp = NAME ':' Type
|
||||
TablePropOrIndexer = TableProp | TableIndexer
|
||||
PropList = TablePropOrIndexer {fieldsep TablePropOrIndexer} [fieldsep]
|
||||
TableType = '{' PropList '}'
|
||||
FunctionType = ['<' GenericTypeParameterList '>'] '(' [TypeList] ')' '->' ReturnType
|
||||
TableType = '{' [PropList] '}'
|
||||
FunctionType = ['<' GenericTypeList '>'] '(' [TypeList] ')' '->' ReturnType
|
||||
```
|
||||
|
|
Loading…
Reference in a new issue