diff options
author | bors[bot] <bors[bot]@users.noreply.github.com> | 2019-02-27 12:18:55 +0000 |
---|---|---|
committer | bors[bot] <bors[bot]@users.noreply.github.com> | 2019-02-27 12:18:55 +0000 |
commit | 2e2a6dd2fbeb4da16e602fa1902ab6bbd850b442 (patch) | |
tree | b42e6faf8618c3625e41d5a2011b4ffd145f22de /crates/ra_syntax/src | |
parent | 1927eb088ac9aa3851f77bb929296873ccb4faed (diff) | |
parent | d3ce69aee3297e683691ec0123f5a2584a8075a0 (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.rs | 6 | ||||
-rw-r--r-- | crates/ra_syntax/src/ast/generated.rs | 36 | ||||
-rw-r--r-- | crates/ra_syntax/src/grammar.ron | 44 |
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 | ||
34 | pub trait TypeAscriptionOwner: AstNode { | ||
35 | fn ascribed_type(&self) -> Option<&TypeRef> { | ||
36 | child_opt(self) | ||
37 | } | ||
38 | } | ||
39 | |||
34 | pub trait NameOwner: AstNode { | 40 | pub 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 {} | |||
628 | impl ast::TypeParamsOwner for ConstDef {} | 628 | impl ast::TypeParamsOwner for ConstDef {} |
629 | impl ast::AttrsOwner for ConstDef {} | 629 | impl ast::AttrsOwner for ConstDef {} |
630 | impl ast::DocCommentsOwner for ConstDef {} | 630 | impl ast::DocCommentsOwner for ConstDef {} |
631 | impl ConstDef { | 631 | impl ast::TypeAscriptionOwner for ConstDef {} |
632 | pub fn type_ref(&self) -> Option<&TypeRef> { | 632 | impl 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 | ||
1767 | impl ast::TypeAscriptionOwner for LetStmt {} | ||
1770 | impl LetStmt { | 1768 | impl 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 {} | |||
2592 | impl ast::NameOwner for NamedFieldDef {} | 2586 | impl ast::NameOwner for NamedFieldDef {} |
2593 | impl ast::AttrsOwner for NamedFieldDef {} | 2587 | impl ast::AttrsOwner for NamedFieldDef {} |
2594 | impl ast::DocCommentsOwner for NamedFieldDef {} | 2588 | impl ast::DocCommentsOwner for NamedFieldDef {} |
2595 | impl NamedFieldDef { | 2589 | impl ast::TypeAscriptionOwner for NamedFieldDef {} |
2596 | pub fn type_ref(&self) -> Option<&TypeRef> { | 2590 | impl 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 | ||
2768 | impl ast::TypeAscriptionOwner for Param {} | ||
2777 | impl Param { | 2769 | impl 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 | ||
3676 | impl ast::TypeAscriptionOwner for SelfParam {} | ||
3688 | impl SelfParam { | 3677 | impl 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 {} | |||
3820 | impl ast::TypeParamsOwner for StaticDef {} | 3805 | impl ast::TypeParamsOwner for StaticDef {} |
3821 | impl ast::AttrsOwner for StaticDef {} | 3806 | impl ast::AttrsOwner for StaticDef {} |
3822 | impl ast::DocCommentsOwner for StaticDef {} | 3807 | impl ast::DocCommentsOwner for StaticDef {} |
3823 | impl StaticDef { | 3808 | impl ast::TypeAscriptionOwner for StaticDef {} |
3824 | pub fn type_ref(&self) -> Option<&TypeRef> { | 3809 | impl 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"], |