mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-27 04:19:13 +00:00
Parse trait alias as a distinct AST type
This commit is contained in:
parent
9b441b9c67
commit
2e7d2c2d04
11 changed files with 103 additions and 10 deletions
|
@ -680,6 +680,51 @@ impl TypeOrConstParam {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub enum TraitOrAlias {
|
||||
Trait(ast::Trait),
|
||||
TraitAlias(ast::TraitAlias),
|
||||
}
|
||||
|
||||
impl TraitOrAlias {
|
||||
pub fn name(&self) -> Option<ast::Name> {
|
||||
match self {
|
||||
TraitOrAlias::Trait(x) => x.name(),
|
||||
TraitOrAlias::TraitAlias(x) => x.name(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl AstNode for TraitOrAlias {
|
||||
fn can_cast(kind: SyntaxKind) -> bool
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
matches!(kind, SyntaxKind::TRAIT | SyntaxKind::TRAIT_ALIAS)
|
||||
}
|
||||
|
||||
fn cast(syntax: SyntaxNode) -> Option<Self>
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
let res = match syntax.kind() {
|
||||
SyntaxKind::TRAIT => TraitOrAlias::Trait(ast::Trait { syntax }),
|
||||
SyntaxKind::TRAIT_ALIAS => TraitOrAlias::TraitAlias(ast::TraitAlias { syntax }),
|
||||
_ => return None,
|
||||
};
|
||||
Some(res)
|
||||
}
|
||||
|
||||
fn syntax(&self) -> &SyntaxNode {
|
||||
match self {
|
||||
TraitOrAlias::Trait(it) => it.syntax(),
|
||||
TraitOrAlias::TraitAlias(it) => it.syntax(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl HasAttrs for TraitOrAlias {}
|
||||
|
||||
pub enum VisibilityKind {
|
||||
In(ast::Path),
|
||||
PubCrate,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue