aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_syntax/src/grammar.ron
diff options
context:
space:
mode:
authorbors[bot] <bors[bot]@users.noreply.github.com>2019-03-31 10:11:48 +0100
committerbors[bot] <bors[bot]@users.noreply.github.com>2019-03-31 10:11:48 +0100
commitc5ca49678f129045e59438df279829902034ec71 (patch)
tree3fd54185e0c064fbd6f718ac345064ce9c559efb /crates/ra_syntax/src/grammar.ron
parent23dd53eb35ff50508d0c0fc5878a55754b12d381 (diff)
parent55dcdb7d094f473c73f87ecf997b24f8e35f2a5e (diff)
Merge #1077
1077: Improve parsing of type bounds r=matklad a=vipentti This adds new TYPE_BOUND_LIST and TYPE_BOUND syntax kinds. These are now used when parsing type bounds. In addition parsing paths inside a bound now does not recursively parse paths, rather they are treated as separate bounds, separated by +. Basically now the generic params `struct S<T: 'a + ?Sized + (Copy)>;` in will be parsed as ``` TYPE_PARAM_LIST@[8; 33) L_ANGLE@[8; 9) TYPE_PARAM@[9; 32) NAME@[9; 10) IDENT@[9; 10) "T" COLON@[10; 11) WHITESPACE@[11; 12) TYPE_BOUND_LIST@[12; 32) TYPE_BOUND@[12; 14) LIFETIME@[12; 14) "'a" WHITESPACE@[14; 15) PLUS@[15; 16) WHITESPACE@[16; 17) TYPE_BOUND@[17; 23) QUESTION@[17; 18) PATH_TYPE@[18; 23) PATH@[18; 23) PATH_SEGMENT@[18; 23) NAME_REF@[18; 23) IDENT@[18; 23) "Sized" WHITESPACE@[23; 24) PLUS@[24; 25) WHITESPACE@[25; 26) TYPE_BOUND@[26; 32) L_PAREN@[26; 27) PATH_TYPE@[27; 31) PATH@[27; 31) PATH_SEGMENT@[27; 31) NAME_REF@[27; 31) IDENT@[27; 31) "Copy" R_PAREN@[31; 32) R_ANGLE@[32; 33) ``` Previously it was parsed, with the paths nested: ``` TYPE_PARAM_LIST@[8; 33) L_ANGLE@[8; 9) TYPE_PARAM@[9; 32) NAME@[9; 10) IDENT@[9; 10) "T" COLON@[10; 11) WHITESPACE@[11; 12) LIFETIME@[12; 14) "'a" WHITESPACE@[14; 15) PLUS@[15; 16) WHITESPACE@[16; 17) QUESTION@[17; 18) PATH_TYPE@[18; 32) PATH@[18; 23) PATH_SEGMENT@[18; 23) NAME_REF@[18; 23) IDENT@[18; 23) "Sized" WHITESPACE@[23; 24) PLUS@[24; 25) WHITESPACE@[25; 26) L_PAREN@[26; 27) PATH_TYPE@[27; 31) PATH@[27; 31) PATH_SEGMENT@[27; 31) NAME_REF@[27; 31) IDENT@[27; 31) "Copy" R_PAREN@[31; 32) R_ANGLE@[32; 33) ``` Looking for feedback. Co-authored-by: Ville Penttinen <[email protected]>
Diffstat (limited to 'crates/ra_syntax/src/grammar.ron')
-rw-r--r--crates/ra_syntax/src/grammar.ron28
1 files changed, 23 insertions, 5 deletions
diff --git a/crates/ra_syntax/src/grammar.ron b/crates/ra_syntax/src/grammar.ron
index ad6d74162..18730a894 100644
--- a/crates/ra_syntax/src/grammar.ron
+++ b/crates/ra_syntax/src/grammar.ron
@@ -243,6 +243,8 @@ Grammar(
243 "PARAM", 243 "PARAM",
244 "SELF_PARAM", 244 "SELF_PARAM",
245 "ARG_LIST", 245 "ARG_LIST",
246 "TYPE_BOUND",
247 "TYPE_BOUND_LIST",
246 ], 248 ],
247 ast: { 249 ast: {
248 "SourceFile": ( 250 "SourceFile": (
@@ -293,7 +295,7 @@ Grammar(
293 "EnumVariantList": ( collections: [["variants", "EnumVariant"]] ), 295 "EnumVariantList": ( collections: [["variants", "EnumVariant"]] ),
294 "EnumVariant": ( traits: ["NameOwner", "DocCommentsOwner", "AttrsOwner"], options: ["Expr"] ), 296 "EnumVariant": ( traits: ["NameOwner", "DocCommentsOwner", "AttrsOwner"], options: ["Expr"] ),
295 "TraitDef": ( 297 "TraitDef": (
296 traits: ["VisibilityOwner", "NameOwner", "AttrsOwner", "DocCommentsOwner", "TypeParamsOwner"], 298 traits: ["VisibilityOwner", "NameOwner", "AttrsOwner", "DocCommentsOwner", "TypeParamsOwner", "TypeBoundsOwner"],
297 options: ["ItemList"] 299 options: ["ItemList"]
298 ), 300 ),
299 "Module": ( 301 "Module": (
@@ -330,7 +332,8 @@ Grammar(
330 "NameOwner", 332 "NameOwner",
331 "TypeParamsOwner", 333 "TypeParamsOwner",
332 "AttrsOwner", 334 "AttrsOwner",
333 "DocCommentsOwner" 335 "DocCommentsOwner",
336 "TypeBoundsOwner",
334 ], 337 ],
335 options: ["TypeRef"] 338 options: ["TypeRef"]
336 ), 339 ),
@@ -347,8 +350,12 @@ Grammar(
347 "PlaceholderType": (), 350 "PlaceholderType": (),
348 "FnPointerType": (options: ["ParamList", "RetType"]), 351 "FnPointerType": (options: ["ParamList", "RetType"]),
349 "ForType": (options: ["TypeRef"]), 352 "ForType": (options: ["TypeRef"]),
350 "ImplTraitType": (), 353 "ImplTraitType": (
351 "DynTraitType": (), 354 traits: ["TypeBoundsOwner"],
355 ),
356 "DynTraitType": (
357 traits: ["TypeBoundsOwner"],
358 ),
352 359
353 "TypeRef": ( enum: [ 360 "TypeRef": ( enum: [
354 "ParenType", 361 "ParenType",
@@ -571,12 +578,23 @@ Grammar(
571 ["lifetime_params", "LifetimeParam" ], 578 ["lifetime_params", "LifetimeParam" ],
572 ] 579 ]
573 ), 580 ),
574 "TypeParam": ( traits: ["NameOwner", "AttrsOwner"] ), 581 "TypeParam": ( traits: ["NameOwner", "AttrsOwner", "TypeBoundsOwner"] ),
575 "LifetimeParam": ( 582 "LifetimeParam": (
576 options: [ "Lifetime"], 583 options: [ "Lifetime"],
577 traits: ["AttrsOwner"], 584 traits: ["AttrsOwner"],
578 ), 585 ),
579 "Lifetime": ( traits: ["AstToken"] ), 586 "Lifetime": ( traits: ["AstToken"] ),
587 "TypeBound": (
588 options: [
589 "TypeRef",
590 "Lifetime",
591 ]
592 ),
593 "TypeBoundList": (
594 collections: [
595 ["bounds", "TypeBound"],
596 ]
597 ),
580 "WhereClause": (), 598 "WhereClause": (),
581 "ExprStmt": ( 599 "ExprStmt": (
582 options: [ ["expr", "Expr"] ] 600 options: [ ["expr", "Expr"] ]