Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/syntax/src/ast/node_ext.rs')
-rw-r--r--crates/syntax/src/ast/node_ext.rs28
1 files changed, 19 insertions, 9 deletions
diff --git a/crates/syntax/src/ast/node_ext.rs b/crates/syntax/src/ast/node_ext.rs
index 97455abd80..229c71c76b 100644
--- a/crates/syntax/src/ast/node_ext.rs
+++ b/crates/syntax/src/ast/node_ext.rs
@@ -638,6 +638,21 @@ impl ast::TypeBound {
}
}
+#[derive(Debug, Clone)]
+pub enum TypeOrConstParam {
+ Type(ast::TypeParam),
+ Const(ast::ConstParam),
+}
+
+impl TypeOrConstParam {
+ pub fn name(&self) -> Option<ast::Name> {
+ match self {
+ TypeOrConstParam::Type(x) => x.name(),
+ TypeOrConstParam::Const(x) => x.name(),
+ }
+ }
+}
+
pub enum VisibilityKind {
In(ast::Path),
PubCrate,
@@ -746,16 +761,11 @@ impl ast::GenericParamList {
ast::GenericParam::TypeParam(_) | ast::GenericParam::ConstParam(_) => None,
})
}
- pub fn type_params(&self) -> impl Iterator<Item = ast::TypeParam> {
- self.generic_params().filter_map(|param| match param {
- ast::GenericParam::TypeParam(it) => Some(it),
- ast::GenericParam::LifetimeParam(_) | ast::GenericParam::ConstParam(_) => None,
- })
- }
- pub fn const_params(&self) -> impl Iterator<Item = ast::ConstParam> {
+ pub fn type_or_const_params(&self) -> impl Iterator<Item = ast::TypeOrConstParam> {
self.generic_params().filter_map(|param| match param {
- ast::GenericParam::ConstParam(it) => Some(it),
- ast::GenericParam::TypeParam(_) | ast::GenericParam::LifetimeParam(_) => None,
+ ast::GenericParam::TypeParam(it) => Some(ast::TypeOrConstParam::Type(it)),
+ ast::GenericParam::LifetimeParam(_) => None,
+ ast::GenericParam::ConstParam(it) => Some(ast::TypeOrConstParam::Const(it)),
})
}
}