use crate::spans::Point;
use crate::identifinder::{IdentiFinder, NameAndType};
pub(crate) mod tree_sitter_helpers;
pub(crate) fn get_symbol_at_point<'a>(
identifinder: &'a IdentiFinder,
point: &Point,
) -> Option<&'a NameAndType> {
let symbols = identifinder.symbols();
for (k, v) in symbols {
for r in v.refs().iter() {
if *point >= r.start() && *point <= r.end() {
return Some(k);
}
}
}
None
}
pub(crate) mod into_error {
pub(crate) trait IntoError<T> {
type Error;
fn into_err(self) -> Result<T, Self::Error>;
}
}
pub(crate) mod parsing {
use tree_sitter::Parser;
pub fn setup_parser() -> Parser {
let mut parser = Parser::new();
parser
.set_language(&tree_sitter_lammps::LANGUAGE.into())
.unwrap();
parser
}
}
#[cfg(test)]
pub(crate) mod testing {
use tree_sitter::Parser;
pub fn setup_parser() -> Parser {
super::parsing::setup_parser()
}
pub(crate) fn parse(source_bytes: impl AsRef<[u8]>) -> tree_sitter::Tree {
let source_bytes = source_bytes.as_ref();
let mut parser = setup_parser();
parser.parse(source_bytes, None).unwrap()
}
}