use ra_ap_syntax::{AstNode, SyntaxNode, TextSize};
use crate::attrs::InkAttribute;
use crate::tree::{InkTree, ItemAtOffset};
pub trait InkEntity {
type AST: AstNode;
fn can_cast(node: &SyntaxNode) -> bool;
fn cast(node: SyntaxNode) -> Option<Self>
where
Self: Sized;
fn syntax(&self) -> &SyntaxNode;
fn ast(&self) -> Option<&Self::AST>;
fn ink_attr(&self) -> Option<&InkAttribute>;
fn tree(&self) -> InkTree<'_> {
InkTree::new(self.syntax())
}
fn item_at_offset(&self, offset: TextSize) -> ItemAtOffset {
ItemAtOffset::new(self.syntax(), offset)
}
}