use tree_sitter::Node;
pub(super) fn declared_idents<'tree>(node: Node<'tree>, _src: &[u8]) -> Vec<Node<'tree>> {
let mut out = Vec::new();
match node.kind() {
"variable_declarator" | "parameter" | "catch_declaration" => {
if let Some(name) = node.child_by_field_name("name")
&& name.kind() == "identifier"
{
out.push(name);
}
}
"foreach_statement" => {
if let Some(left) = node.child_by_field_name("left")
&& left.kind() == "identifier"
{
out.push(left);
}
}
_ => {}
}
out
}
pub(super) fn is_reference(node: Node<'_>) -> bool {
let Some(parent) = node.parent() else {
return true;
};
match parent.kind() {
"member_access_expression" => parent.child_by_field_name("name") != Some(node),
"assignment_expression"
if parent.child_by_field_name("left") == Some(node)
&& parent
.parent()
.is_some_and(|gp| gp.kind() == "initializer_expression") =>
{
false
}
_ => true,
}
}