Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/syntax/rust.ungram')
-rw-r--r--crates/syntax/rust.ungram50
1 files changed, 47 insertions, 3 deletions
diff --git a/crates/syntax/rust.ungram b/crates/syntax/rust.ungram
index 3113fc7430..768cf2013d 100644
--- a/crates/syntax/rust.ungram
+++ b/crates/syntax/rust.ungram
@@ -126,9 +126,41 @@ MacroStmts =
Attr =
'#' '!'? '[' Meta ']'
+CfgAttrMeta =
+ 'cfg_attr' '(' CfgPredicate ',' (Meta (',' Meta)* ','?) ')'
+
+CfgMeta =
+ 'cfg' '(' CfgPredicate ','? ')'
+
+CfgPredicate =
+ CfgAtom
+| CfgComposite
+
+CfgAtom =
+ ('#ident' | 'true' | 'false') ('=' '@string')?
+
+CfgComposite =
+ keyword:'#ident' '(' (CfgPredicate (',' CfgPredicate)* ','?) ')'
+
Meta =
- 'unsafe' '(' Path ('=' Expr | TokenTree)? ')'
-| Path ('=' Expr | TokenTree)?
+ CfgAttrMeta
+| CfgMeta
+| UnsafeMeta
+| PathMeta
+| KeyValueMeta
+| TokenTreeMeta
+
+UnsafeMeta =
+ 'unsafe' '(' Meta ')'
+
+PathMeta =
+ Path
+
+KeyValueMeta =
+ Path '=' Expr
+
+TokenTreeMeta =
+ Path TokenTree
//*************************//
// Items //
@@ -245,6 +277,7 @@ RecordFieldList =
RecordField =
Attr* Visibility? 'unsafe'?
+ MutRestriction?
Name ':' Type ('=' default_val:ConstArg)?
TupleFieldList =
@@ -252,12 +285,16 @@ TupleFieldList =
TupleField =
Attr* Visibility?
+ MutRestriction?
Type
FieldList =
RecordFieldList
| TupleFieldList
+MutRestriction =
+ 'mut' VisibilityInner
+
Enum =
Attr* Visibility?
'enum' Name GenericParamList? WhereClause?
@@ -291,6 +328,7 @@ VariantDef =
Const =
Attr* Visibility?
'default'?
+ 'type'?
'const' (Name | '_') GenericParamList? ':' Type
('=' body:Expr)?
WhereClause? ';'
@@ -304,10 +342,14 @@ Static =
Trait =
Attr* Visibility?
'unsafe'? 'auto'?
+ ImplRestriction?
'trait' Name GenericParamList?
(((':' TypeBoundList?)? WhereClause? AssocItemList) |
('=' TypeBoundList? WhereClause? ';'))
+ImplRestriction =
+ 'impl' VisibilityInner
+
AssocItemList =
'{' Attr* AssocItem* '}'
@@ -336,8 +378,10 @@ ExternItem =
| TypeAlias
Visibility =
- 'pub' ('(' 'in'? Path ')')?
+ 'pub' VisibilityInner?
+VisibilityInner =
+ '(' 'in'? Path ')'
//****************************//
// Statements and Expressions //