#![allow(clippy::wildcard_imports, clippy::enum_glob_use)]
#![allow(
clippy::cast_precision_loss,
clippy::cast_possible_truncation,
clippy::cast_sign_loss
)]
use super::*;
impl Npm for RustCode {
fn compute<'a>(
node: &Node<'a>,
_code: &'a [u8],
ancestors: Ancestors<'a, '_>,
stats: &mut Stats,
) {
use Rust::*;
if !matches!(node.kind_id().into(), FunctionItem | FunctionSignatureItem) {
return;
}
let mut climb = ancestors.iter(node);
let Some((parent, _)) = climb.next() else {
return;
};
if !matches!(parent.kind_id().into(), DeclarationList) {
return;
}
let Some((grand, _)) = climb.next() else {
return;
};
match grand.kind_id().into() {
ImplItem => {
stats.class_nm += 1;
if super::npa::rust_item_is_public(node) {
stats.class_npm += 1;
}
}
TraitItem => {
stats.interface_nm += 1;
stats.interface_npm = stats.interface_nm;
}
_ => {}
}
}
}