pub(crate) mod abc;
mod decl;
mod scope;
mod usage;
pub use usage::{never_used_offenses, used_once_offenses};
#[cfg(test)]
mod tests;
use tree_sitter::Tree;
pub struct SolFile<'t> {
pub src: &'t [u8],
pub tree: Tree,
scopes: Vec<crate::scope_model::Scope>,
}
impl SolFile<'_> {
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) -> SolFile<'_> {
let scopes = scope::collect(tree.root_node(), src);
SolFile { src, tree, scopes }
}