use crate::scope_model::Scope;
pub(crate) mod abc;
mod scope;
mod usage;
#[cfg(test)]
mod tests;
use tree_sitter::Tree;
pub use usage::{never_used_offenses, used_once_offenses};
pub struct JavaFile<'t> {
pub src: &'t [u8],
pub tree: Tree,
scopes: Vec<Scope>,
}
impl JavaFile<'_> {
pub(super) fn line_col(&self, byte: usize) -> (usize, usize) {
let point = self
.tree
.root_node()
.descendant_for_byte_range(byte, byte)
.map(|n| n.start_position())
.unwrap_or_default();
(point.row + 1, point.column)
}
}
pub fn build(src: &[u8], tree: Tree) -> JavaFile<'_> {
let scopes = scope::collect(tree.root_node(), src);
JavaFile { src, tree, scopes }
}