#![allow(
clippy::enum_glob_use,
clippy::too_many_lines,
clippy::wildcard_imports
)]
#![allow(
clippy::cast_precision_loss,
clippy::cast_possible_truncation,
clippy::cast_sign_loss
)]
use super::cpp::{cpp_count_unary_conditions, cpp_inspect_child, cpp_inspect_container};
use super::{Abc, Stats};
use crate::*;
impl Abc for ObjcCode {
fn compute<'a>(node: &Node<'a>, _code: &'a [u8], stats: &mut Stats) {
use Objc::*;
match node.kind_id().into() {
AssignmentExpression | UpdateExpression => {
stats.assignments += 1.;
}
InitDeclarator if node.first_child(|id| id == EQ as u16).is_some() => {
stats.assignments += 1.;
}
CallExpression | CallExpression2 => {
stats.branches += 1.;
}
MessageExpression => {
stats.branches += 1.;
cpp_count_unary_conditions(node, &mut stats.conditions);
}
LTEQ | GTEQ | EQEQ | BANGEQ | Else | Case | QMARK | ATtry | CatchClause => {
stats.conditions += 1.;
}
LT | GT
if node.parent().is_some_and(|p| {
matches!(p.kind_id().into(), BinaryExpression | BinaryExpression2)
}) =>
{
stats.conditions += 1.;
}
AMPAMP | PIPEPIPE => {
if let Some(parent) = node.parent() {
cpp_count_unary_conditions(&parent, &mut stats.conditions);
}
}
IfStatement | WhileStatement => {
if let Some(cond) = node.child_by_field_name("condition") {
cpp_inspect_container(&cond, &mut stats.conditions);
}
}
ReturnStatement => {
cpp_inspect_child(node, 1, &mut stats.conditions);
}
DoStatement => {
cpp_inspect_child(node, 3, &mut stats.conditions);
}
ArgumentList | ArgumentList2 => {
cpp_count_unary_conditions(node, &mut stats.conditions);
}
_ => {}
}
}
}