use ra_ap_syntax::{ast, AstNode};
use crate::tree::ast_ext;
use crate::InkEntity;
pub trait IsInkStruct: InkEntity {
fn struct_item(&self) -> Option<&ast::Struct>;
}
pub trait IsInkFn: InkEntity {
fn fn_item(&self) -> Option<&ast::Fn>;
}
pub trait IsInkTrait: InkEntity {
fn trait_item(&self) -> Option<&ast::Trait>;
}
pub trait HasInkImplParent: InkEntity {
fn parent_impl_item(&self) -> Option<ast::Impl>;
}
impl<T> HasInkImplParent for T
where
T: IsInkFn,
{
fn parent_impl_item(&self) -> Option<ast::Impl> {
match ast_ext::parent_ast_item(self.fn_item()?.syntax())? {
ast::Item::Impl(item) => Some(item),
_ => None,
}
}
}