use oxc_ast::ast::*; use anyhow::{Result, anyhow}; pub fn get_callee_name(expr: &Expression) -> Result { get_member_expr_name(expr) } pub fn get_member_expr_name(expr: &Expression) -> Result { match expr { Expression::Identifier(ident) => { let name = ident.name.to_string(); // Remove prefix 'P' if it's followed by an uppercase letter (e.g., PGfx -> Gfx) if name.len() > 1 && name.starts_with('P') && name.chars().nth(1).unwrap().is_uppercase() { Ok(name[1..].to_string()) } else { Ok(name) } } Expression::StaticMemberExpression(member) => { let obj = get_member_expr_name(&member.object)?; let prop = member.property.name.to_string(); Ok(format!("{}.{}", obj, prop)) } _ => Err(anyhow!("Unsupported expression")), } }