diff options
| author | hkalbasi <hamidrezakalbasi@protonmail.com> | 2021-12-29 17:05:59 +0330 |
|---|---|---|
| committer | hkalbasi <hamidrezakalbasi@protonmail.com> | 2022-03-04 11:46:14 +0330 |
| commit | 4fa8749c44e1c91335002eb46d59b2a72e756bb3 (patch) | |
| tree | eddaef9ea4a9ad99ae99fe288ffad4b4d34d5c88 /crates/syntax/src/ast | |
| parent | 9d473a0b9f92c0739e4635fa8ef95a91ac2a481d (diff) | |
| download | rust-4fa8749c44e1c91335002eb46d59b2a72e756bb3.tar.gz rust-4fa8749c44e1c91335002eb46d59b2a72e756bb3.zip | |
Preserve order of generic args
Diffstat (limited to 'crates/syntax/src/ast')
| -rw-r--r-- | crates/syntax/src/ast/node_ext.rs | 28 |
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 97455abd809..229c71c76b1 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)), }) } } |
