use ra_ap_syntax::SyntaxNode;
use super::utils;
use crate::{InkArg, InkArgKind, InkAttribute};
pub struct InkTree<'a> {
syntax: &'a SyntaxNode,
}
impl<'a> InkTree<'a> {
pub fn new(node: &'a SyntaxNode) -> Self {
Self { syntax: node }
}
pub fn ink_attrs(&self) -> impl Iterator<Item = InkAttribute> {
utils::ink_attrs(self.syntax)
}
pub fn ink_attrs_descendants(&self) -> impl Iterator<Item = InkAttribute> {
utils::ink_attrs_descendants(self.syntax)
}
pub fn ink_attrs_closest_descendants(&self) -> impl Iterator<Item = InkAttribute> {
utils::ink_attrs_closest_descendants(self.syntax)
}
pub fn ink_attrs_in_scope(&self) -> impl Iterator<Item = InkAttribute> {
utils::ink_attrs_in_scope(self.syntax)
}
pub fn ink_attrs_ancestors(&self) -> impl Iterator<Item = InkAttribute> + '_ {
utils::ink_attrs_ancestors(self.syntax)
}
pub fn ink_attrs_closest_ancestors(&self) -> impl Iterator<Item = InkAttribute> {
utils::ink_attrs_closest_ancestors(self.syntax)
}
pub fn ink_args(&self) -> impl Iterator<Item = InkArg> {
utils::ink_args(self.syntax)
}
pub fn ink_args_by_kind(&self, kind: InkArgKind) -> impl Iterator<Item = InkArg> {
utils::ink_args_by_kind(self.syntax, kind)
}
pub fn ink_arg_by_kind(&self, kind: InkArgKind) -> Option<InkArg> {
utils::ink_arg_by_kind(self.syntax, kind)
}
}