teo-parser 0.3.0

Parser for Teo schema language
Documentation
use crate::availability::Availability;
use crate::ast::expression::{Expression, ExpressionKind};
use crate::ast::schema::Schema;
use crate::ast::source::Source;
use crate::definition::definition::Definition;
use crate::definition::jump_to_definition_in_arith_expr::jump_to_definition_in_arith_expr;
use crate::definition::jump_to_definition_in_array_literal::jump_to_definition_in_array_literal;
use crate::definition::jump_to_definition_in_dictionary_literal::jump_to_definition_in_dictionary_literal;
use crate::definition::jump_to_definition_in_enum_variant_literal::jump_to_definition_in_enum_variant_literal;
use crate::definition::jump_to_definition_in_identifier::jump_to_definition_in_identifier;
use crate::definition::jump_to_definition_in_pipeline::jump_to_definition_in_pipeline;
use crate::definition::jump_to_definition_in_tuple_literal::jump_to_definition_in_tuple_literal;
use crate::definition::jump_to_definition_in_unit::jump_to_definition_in_unit;
use crate::r#type::r#type::Type;

pub(super) fn jump_to_definition_in_expression<'a>(
    schema: &'a Schema,
    source: &'a Source,
    expression: &'a Expression,
    namespace_path: &Vec<&'a str>,
    line_col: (usize, usize),
    expect: &Type,
    availability: Availability,
) -> Vec<Definition> {
    match &expression.kind {
        ExpressionKind::Group(group) => jump_to_definition_in_expression(
            schema,
            source,
            group.expression(),
            namespace_path,
            line_col,
            expect,
            availability
        ),
        ExpressionKind::ArithExpr(arith) => jump_to_definition_in_arith_expr(
            schema,
            source,
            arith,
            namespace_path,
            line_col,
            expect,
            availability,
        ),
        ExpressionKind::EnumVariantLiteral(enum_variant_literal) => jump_to_definition_in_enum_variant_literal(
            schema,
            source,
            enum_variant_literal,
            namespace_path,
            line_col,
            expect,
            availability
        ),
        ExpressionKind::TupleLiteral(tuple_literal) => jump_to_definition_in_tuple_literal(
            schema,
            source,
            tuple_literal,
            namespace_path,
            line_col,
            expect,
            availability,
        ),
        ExpressionKind::ArrayLiteral(array_literal) => jump_to_definition_in_array_literal(
            schema,
            source,
            array_literal,
            namespace_path,
            line_col,
            expect,
            availability,
        ),
        ExpressionKind::DictionaryLiteral(dictionary_literal) => jump_to_definition_in_dictionary_literal(
            schema,
            source,
            dictionary_literal,
            namespace_path,
            line_col,
            expect,
            availability,
        ),
        ExpressionKind::Identifier(identifier) => jump_to_definition_in_identifier(
            schema,
            source,
            identifier,
            namespace_path,
            line_col,
            availability,
        ),
        ExpressionKind::ArgumentList(_) => unreachable!(),
        ExpressionKind::Subscript(_) => unreachable!(),
        ExpressionKind::Unit(unit) => jump_to_definition_in_unit(
            schema,
            source,
            unit,
            namespace_path,
            line_col,
            expect,
            availability,
        ),
        ExpressionKind::Pipeline(pipeline) => jump_to_definition_in_pipeline(
            schema,
            source,
            pipeline,
            namespace_path,
            line_col,
            availability,
        ),
        _ => vec![],
    }
}