luaur-analysis 0.1.0

Luau type checker and type inference (Rust).
Documentation
use crate::enums::pack_field::PackField;
use crate::records::generic_pack_mapping::GenericPackMapping;
use crate::records::pack_slice::PackSlice;
use crate::records::path::Path;
use crate::type_aliases::component::Component;

pub fn is_path_on_argument_list(path: &Path) -> bool {
    let mut iter = path.components.iter();

    let first = match iter.next() {
        Some(c) => c,
        None => return false,
    };

    if let Component::PackField(args) = first {
        if *args != PackField::Arguments {
            return false;
        }
    } else {
        return false;
    }

    for component in iter {
        match component {
            Component::PackSlice(_) | Component::GenericPackMapping(_) => continue,
            Component::PackField(pack_field) => {
                if *pack_field != PackField::Tail {
                    return false;
                }
            }
            _ => return false,
        }
    }

    true
}