teo-parser 0.3.0

Parser for Teo schema language
Documentation
use crate::ast::argument::Argument;
use crate::ast::argument_list::ArgumentList;
use crate::availability::Availability;
use crate::ast::identifier::Identifier;
use crate::ast::schema::Schema;
use crate::ast::source::Source;
use crate::definition::definition::Definition;
use crate::definition::jump_to_definition_in_expression::jump_to_definition_in_expression;
use crate::traits::node_trait::NodeTrait;
use crate::traits::resolved::Resolve;

pub(super) fn jump_to_definition_in_argument_list<'a>(
    schema: &'a Schema,
    source: &'a Source,
    argument_list: &'a ArgumentList,
    namespace_path: &Vec<&'a str>,
    callable_reference: Option<Vec<usize>>,
    line_col: (usize, usize),
    availability: Availability,
) -> Vec<Definition> {
    for argument in argument_list.arguments() {
        if argument.span.contains_line_col(line_col) {
            return jump_to_definition_in_argument(
                schema,
                source,
                argument,
                namespace_path,
                callable_reference,
                line_col,
                availability,
            )
        }
    }
    vec![]
}

pub(super) fn jump_to_definition_in_argument<'a>(
    schema: &'a Schema,
    source: &'a Source,
    argument: &'a Argument,
    namespace_path: &Vec<&'a str>,
    callable_reference: Option<Vec<usize>>,
    line_col: (usize, usize),
    availability: Availability,
) -> Vec<Definition> {
    if let Some(name) = argument.name() {
        if name.span.contains_line_col(line_col) {
            return jump_to_definition_in_argument_name(
                schema,
                source,
                name,
                namespace_path,
                callable_reference,
                line_col,
            );
        }
    }
    if argument.value().span().contains_line_col(line_col) {
        return jump_to_definition_in_expression(
            schema,
            source,
            argument.value(),
            namespace_path,
            line_col,
            argument.value().resolved().r#type(),
            availability,
        );
    }
    vec![]
}

pub(super) fn jump_to_definition_in_argument_name<'a>(
    _schema: &'a Schema,
    _source: &'a Source,
    _name: &'a Identifier,
    _namespace_path: &Vec<&'a str>,
    _callable_reference: Option<Vec<usize>>,
    _line_col: (usize, usize),
) -> Vec<Definition> {
    vec![]
}