aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_syntax/src
diff options
context:
space:
mode:
authorbors[bot] <bors[bot]@users.noreply.github.com>2019-02-27 12:18:55 +0000
committerbors[bot] <bors[bot]@users.noreply.github.com>2019-02-27 12:18:55 +0000
commit2e2a6dd2fbeb4da16e602fa1902ab6bbd850b442 (patch)
treeb42e6faf8618c3625e41d5a2011b4ffd145f22de /crates/ra_syntax/src
parent1927eb088ac9aa3851f77bb929296873ccb4faed (diff)
parentd3ce69aee3297e683691ec0123f5a2584a8075a0 (diff)
Merge #900
900: Add new trait ast::TypeAscriptionOwner r=vipentti a=vipentti This trait should be implemented for nodes which have an ascribed type, e.g. thing : Type. Such as let, const, static, param, named struct fields. In addition, we update some places where previously we used node + node.type_ref() with `TypeAscriptionOwner` in the trait bounds. Co-authored-by: Ville Penttinen <[email protected]>
Diffstat (limited to 'crates/ra_syntax/src')
-rw-r--r--crates/ra_syntax/src/ast.rs6
-rw-r--r--crates/ra_syntax/src/ast/generated.rs36
-rw-r--r--crates/ra_syntax/src/grammar.ron44
3 files changed, 47 insertions, 39 deletions
diff --git a/crates/ra_syntax/src/ast.rs b/crates/ra_syntax/src/ast.rs
index 56fb7c20c..81c709bfb 100644
--- a/crates/ra_syntax/src/ast.rs
+++ b/crates/ra_syntax/src/ast.rs
@@ -31,6 +31,12 @@ pub trait AstToken: AstNode {
31 } 31 }
32} 32}
33 33
34pub trait TypeAscriptionOwner: AstNode {
35 fn ascribed_type(&self) -> Option<&TypeRef> {
36 child_opt(self)
37 }
38}
39
34pub trait NameOwner: AstNode { 40pub trait NameOwner: AstNode {
35 fn name(&self) -> Option<&Name> { 41 fn name(&self) -> Option<&Name> {
36 child_opt(self) 42 child_opt(self)
diff --git a/crates/ra_syntax/src/ast/generated.rs b/crates/ra_syntax/src/ast/generated.rs
index 4e2705d09..7572225b8 100644
--- a/crates/ra_syntax/src/ast/generated.rs
+++ b/crates/ra_syntax/src/ast/generated.rs
@@ -628,11 +628,8 @@ impl ast::NameOwner for ConstDef {}
628impl ast::TypeParamsOwner for ConstDef {} 628impl ast::TypeParamsOwner for ConstDef {}
629impl ast::AttrsOwner for ConstDef {} 629impl ast::AttrsOwner for ConstDef {}
630impl ast::DocCommentsOwner for ConstDef {} 630impl ast::DocCommentsOwner for ConstDef {}
631impl ConstDef { 631impl ast::TypeAscriptionOwner for ConstDef {}
632 pub fn type_ref(&self) -> Option<&TypeRef> { 632impl ConstDef {}
633 super::child_opt(self)
634 }
635}
636 633
637// ContinueExpr 634// ContinueExpr
638#[derive(Debug, PartialEq, Eq, Hash)] 635#[derive(Debug, PartialEq, Eq, Hash)]
@@ -1767,15 +1764,12 @@ impl ToOwned for LetStmt {
1767} 1764}
1768 1765
1769 1766
1767impl ast::TypeAscriptionOwner for LetStmt {}
1770impl LetStmt { 1768impl LetStmt {
1771 pub fn pat(&self) -> Option<&Pat> { 1769 pub fn pat(&self) -> Option<&Pat> {
1772 super::child_opt(self) 1770 super::child_opt(self)
1773 } 1771 }
1774 1772
1775 pub fn type_ref(&self) -> Option<&TypeRef> {
1776 super::child_opt(self)
1777 }
1778
1779 pub fn initializer(&self) -> Option<&Expr> { 1773 pub fn initializer(&self) -> Option<&Expr> {
1780 super::child_opt(self) 1774 super::child_opt(self)
1781 } 1775 }
@@ -2592,11 +2586,8 @@ impl ast::VisibilityOwner for NamedFieldDef {}
2592impl ast::NameOwner for NamedFieldDef {} 2586impl ast::NameOwner for NamedFieldDef {}
2593impl ast::AttrsOwner for NamedFieldDef {} 2587impl ast::AttrsOwner for NamedFieldDef {}
2594impl ast::DocCommentsOwner for NamedFieldDef {} 2588impl ast::DocCommentsOwner for NamedFieldDef {}
2595impl NamedFieldDef { 2589impl ast::TypeAscriptionOwner for NamedFieldDef {}
2596 pub fn type_ref(&self) -> Option<&TypeRef> { 2590impl NamedFieldDef {}
2597 super::child_opt(self)
2598 }
2599}
2600 2591
2601// NamedFieldDefList 2592// NamedFieldDefList
2602#[derive(Debug, PartialEq, Eq, Hash)] 2593#[derive(Debug, PartialEq, Eq, Hash)]
@@ -2774,14 +2765,11 @@ impl ToOwned for Param {
2774} 2765}
2775 2766
2776 2767
2768impl ast::TypeAscriptionOwner for Param {}
2777impl Param { 2769impl Param {
2778 pub fn pat(&self) -> Option<&Pat> { 2770 pub fn pat(&self) -> Option<&Pat> {
2779 super::child_opt(self) 2771 super::child_opt(self)
2780 } 2772 }
2781
2782 pub fn type_ref(&self) -> Option<&TypeRef> {
2783 super::child_opt(self)
2784 }
2785} 2773}
2786 2774
2787// ParamList 2775// ParamList
@@ -3685,11 +3673,8 @@ impl ToOwned for SelfParam {
3685} 3673}
3686 3674
3687 3675
3676impl ast::TypeAscriptionOwner for SelfParam {}
3688impl SelfParam { 3677impl SelfParam {
3689 pub fn type_ref(&self) -> Option<&TypeRef> {
3690 super::child_opt(self)
3691 }
3692
3693 pub fn self_kw(&self) -> Option<&SelfKw> { 3678 pub fn self_kw(&self) -> Option<&SelfKw> {
3694 super::child_opt(self) 3679 super::child_opt(self)
3695 } 3680 }
@@ -3820,11 +3805,8 @@ impl ast::NameOwner for StaticDef {}
3820impl ast::TypeParamsOwner for StaticDef {} 3805impl ast::TypeParamsOwner for StaticDef {}
3821impl ast::AttrsOwner for StaticDef {} 3806impl ast::AttrsOwner for StaticDef {}
3822impl ast::DocCommentsOwner for StaticDef {} 3807impl ast::DocCommentsOwner for StaticDef {}
3823impl StaticDef { 3808impl ast::TypeAscriptionOwner for StaticDef {}
3824 pub fn type_ref(&self) -> Option<&TypeRef> { 3809impl StaticDef {}
3825 super::child_opt(self)
3826 }
3827}
3828 3810
3829// Stmt 3811// Stmt
3830#[derive(Debug, PartialEq, Eq, Hash)] 3812#[derive(Debug, PartialEq, Eq, Hash)]
diff --git a/crates/ra_syntax/src/grammar.ron b/crates/ra_syntax/src/grammar.ron
index c7acbbd6c..b7a2d1c01 100644
--- a/crates/ra_syntax/src/grammar.ron
+++ b/crates/ra_syntax/src/grammar.ron
@@ -271,7 +271,15 @@ Grammar(
271 ] 271 ]
272 ), 272 ),
273 "NamedFieldDefList": (collections: [["fields", "NamedFieldDef"]]), 273 "NamedFieldDefList": (collections: [["fields", "NamedFieldDef"]]),
274 "NamedFieldDef": ( traits: ["VisibilityOwner", "NameOwner", "AttrsOwner", "DocCommentsOwner"], options: ["TypeRef"] ), 274 "NamedFieldDef": (
275 traits: [
276 "VisibilityOwner",
277 "NameOwner",
278 "AttrsOwner",
279 "DocCommentsOwner",
280 "TypeAscriptionOwner"
281 ]
282 ),
275 "PosFieldDefList": (collections: [["fields", "PosFieldDef"]]), 283 "PosFieldDefList": (collections: [["fields", "PosFieldDef"]]),
276 "PosFieldDef": ( traits: ["VisibilityOwner", "AttrsOwner"], options: ["TypeRef"]), 284 "PosFieldDef": ( traits: ["VisibilityOwner", "AttrsOwner"], options: ["TypeRef"]),
277 "EnumDef": ( traits: [ 285 "EnumDef": ( traits: [
@@ -298,9 +306,9 @@ Grammar(
298 "NameOwner", 306 "NameOwner",
299 "TypeParamsOwner", 307 "TypeParamsOwner",
300 "AttrsOwner", 308 "AttrsOwner",
301 "DocCommentsOwner" 309 "DocCommentsOwner",
310 "TypeAscriptionOwner",
302 ], 311 ],
303 options: ["TypeRef"]
304 ), 312 ),
305 "StaticDef": ( 313 "StaticDef": (
306 traits: [ 314 traits: [
@@ -308,9 +316,9 @@ Grammar(
308 "NameOwner", 316 "NameOwner",
309 "TypeParamsOwner", 317 "TypeParamsOwner",
310 "AttrsOwner", 318 "AttrsOwner",
311 "DocCommentsOwner" 319 "DocCommentsOwner",
320 "TypeAscriptionOwner",
312 ], 321 ],
313 options: ["TypeRef"]
314 ), 322 ),
315 "TypeAliasDef": ( 323 "TypeAliasDef": (
316 traits: [ 324 traits: [
@@ -569,11 +577,15 @@ Grammar(
569 "ExprStmt": ( 577 "ExprStmt": (
570 options: [ ["expr", "Expr"] ] 578 options: [ ["expr", "Expr"] ]
571 ), 579 ),
572 "LetStmt": ( options: [ 580 "LetStmt": (
573 ["pat", "Pat"], 581 options: [
574 ["type_ref", "TypeRef"], 582 ["pat", "Pat"],
575 ["initializer", "Expr"], 583 ["initializer", "Expr"],
576 ]), 584 ],
585 traits: [
586 "TypeAscriptionOwner",
587 ]
588 ),
577 "Condition": ( 589 "Condition": (
578 options: [ "Pat", "Expr" ] 590 options: [ "Pat", "Expr" ]
579 ), 591 ),
@@ -595,10 +607,18 @@ Grammar(
595 ["params", "Param"] 607 ["params", "Param"]
596 ] 608 ]
597 ), 609 ),
598 "SelfParam": (options: ["TypeRef", "SelfKw"]), 610 "SelfParam": (
611 options: ["SelfKw"],
612 traits: [
613 "TypeAscriptionOwner",
614 ]
615 ),
599 "SelfKw": (), 616 "SelfKw": (),
600 "Param": ( 617 "Param": (
601 options: [ "Pat", "TypeRef" ], 618 options: [ "Pat" ],
619 traits: [
620 "TypeAscriptionOwner",
621 ]
602 ), 622 ),
603 "UseItem": ( 623 "UseItem": (
604 traits: ["AttrsOwner"], 624 traits: ["AttrsOwner"],