mago-analyzer 1.10.0

A PHP static analyzer that can detect type errors in PHP code, and provide suggestions for fixing them.
Documentation
use mago_atom::Atom;

pub mod case_scope;
pub mod conditional_scope;
pub mod control_action;
pub mod finally_scope;
pub mod if_scope;
pub mod loop_scope;

#[inline]
pub fn var_has_root(var_id: Atom, root_var_id: Atom) -> bool {
    if var_id == root_var_id {
        return true;
    }

    if !var_id.starts_with(root_var_id.as_str()) {
        return false;
    }

    let after_root = &var_id[root_var_id.len()..];
    after_root.starts_with("->") || after_root.starts_with("::") || after_root.starts_with('[')
}

#[cfg(test)]
mod tests {
    use super::*;
    use mago_atom::atom;

    #[test]
    fn test_var_has_root() {
        assert!(var_has_root(atom("$foo"), atom("$foo")));
        assert!(var_has_root(atom("$foo[bar]"), atom("$foo")));
        assert!(var_has_root(atom("$foo->bar"), atom("$foo")));
        assert!(var_has_root(atom("$foo::bar"), atom("$foo")));
        assert!(var_has_root(atom("$foo->bar[0]"), atom("$foo")));
        assert!(var_has_root(atom("$foo->bar[0]->baz"), atom("$foo")));
        assert!(!var_has_root(atom("$foo[bar]"), atom("$bar")));
        assert!(var_has_root(atom("$foo[bar]"), atom("$foo[bar]")));
        assert!(!var_has_root(atom("$foo[bar]"), atom("$foo[bar][baz]")));
        assert!(!var_has_root(atom("$foo[bar]"), atom("$foo[bar][baz]")));
    }
}