aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_syntax
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_syntax')
-rw-r--r--crates/ra_syntax/src/ast/generated.rs7
-rw-r--r--crates/ra_syntax/src/ast/traits.rs6
-rw-r--r--crates/ra_syntax/src/grammar.ron5
-rw-r--r--crates/ra_syntax/src/ptr.rs10
4 files changed, 18 insertions, 10 deletions
diff --git a/crates/ra_syntax/src/ast/generated.rs b/crates/ra_syntax/src/ast/generated.rs
index 2b381dcdb..de506d7cd 100644
--- a/crates/ra_syntax/src/ast/generated.rs
+++ b/crates/ra_syntax/src/ast/generated.rs
@@ -3625,8 +3625,11 @@ impl AstNode for TypeParam {
3625impl ast::NameOwner for TypeParam {} 3625impl ast::NameOwner for TypeParam {}
3626impl ast::AttrsOwner for TypeParam {} 3626impl ast::AttrsOwner for TypeParam {}
3627impl ast::TypeBoundsOwner for TypeParam {} 3627impl ast::TypeBoundsOwner for TypeParam {}
3628impl ast::DefaultTypeParamOwner for TypeParam {} 3628impl TypeParam {
3629impl TypeParam {} 3629 pub fn default_type(&self) -> Option<TypeRef> {
3630 AstChildren::new(&self.syntax).next()
3631 }
3632}
3630#[derive(Debug, Clone, PartialEq, Eq, Hash)] 3633#[derive(Debug, Clone, PartialEq, Eq, Hash)]
3631pub struct TypeParamList { 3634pub struct TypeParamList {
3632 pub(crate) syntax: SyntaxNode, 3635 pub(crate) syntax: SyntaxNode,
diff --git a/crates/ra_syntax/src/ast/traits.rs b/crates/ra_syntax/src/ast/traits.rs
index c2b005886..f99984fe0 100644
--- a/crates/ra_syntax/src/ast/traits.rs
+++ b/crates/ra_syntax/src/ast/traits.rs
@@ -163,9 +163,3 @@ impl Iterator for CommentIter {
163 self.iter.by_ref().find_map(|el| el.into_token().and_then(ast::Comment::cast)) 163 self.iter.by_ref().find_map(|el| el.into_token().and_then(ast::Comment::cast))
164 } 164 }
165} 165}
166
167pub trait DefaultTypeParamOwner: AstNode {
168 fn default_type(&self) -> Option<ast::PathType> {
169 child_opt(self)
170 }
171}
diff --git a/crates/ra_syntax/src/grammar.ron b/crates/ra_syntax/src/grammar.ron
index 70d85a8e6..88d1dc109 100644
--- a/crates/ra_syntax/src/grammar.ron
+++ b/crates/ra_syntax/src/grammar.ron
@@ -587,7 +587,10 @@ Grammar(
587 ("lifetime_params", "LifetimeParam" ), 587 ("lifetime_params", "LifetimeParam" ),
588 ] 588 ]
589 ), 589 ),
590 "TypeParam": ( traits: ["NameOwner", "AttrsOwner", "TypeBoundsOwner", "DefaultTypeParamOwner"] ), 590 "TypeParam": (
591 options: [("default_type", "TypeRef")],
592 traits: ["NameOwner", "AttrsOwner", "TypeBoundsOwner"],
593 ),
591 "LifetimeParam": ( 594 "LifetimeParam": (
592 traits: ["AttrsOwner"], 595 traits: ["AttrsOwner"],
593 ), 596 ),
diff --git a/crates/ra_syntax/src/ptr.rs b/crates/ra_syntax/src/ptr.rs
index 31167cada..e049fce61 100644
--- a/crates/ra_syntax/src/ptr.rs
+++ b/crates/ra_syntax/src/ptr.rs
@@ -43,7 +43,7 @@ impl SyntaxNodePtr {
43} 43}
44 44
45/// Like `SyntaxNodePtr`, but remembers the type of node 45/// Like `SyntaxNodePtr`, but remembers the type of node
46#[derive(Debug, PartialEq, Eq, Hash)] 46#[derive(Debug, Hash)]
47pub struct AstPtr<N: AstNode> { 47pub struct AstPtr<N: AstNode> {
48 raw: SyntaxNodePtr, 48 raw: SyntaxNodePtr,
49 _ty: PhantomData<fn() -> N>, 49 _ty: PhantomData<fn() -> N>,
@@ -56,6 +56,14 @@ impl<N: AstNode> Clone for AstPtr<N> {
56 } 56 }
57} 57}
58 58
59impl<N: AstNode> Eq for AstPtr<N> {}
60
61impl<N: AstNode> PartialEq for AstPtr<N> {
62 fn eq(&self, other: &AstPtr<N>) -> bool {
63 self.raw == other.raw
64 }
65}
66
59impl<N: AstNode> AstPtr<N> { 67impl<N: AstNode> AstPtr<N> {
60 pub fn new(node: &N) -> AstPtr<N> { 68 pub fn new(node: &N) -> AstPtr<N> {
61 AstPtr { raw: SyntaxNodePtr::new(node.syntax()), _ty: PhantomData } 69 AstPtr { raw: SyntaxNodePtr::new(node.syntax()), _ty: PhantomData }