teo-parser 0.3.0

Parser for Teo schema language
Documentation
use crate::ast::arith_expr::ArithExpr;
use crate::availability::Availability;
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::r#type::r#type::Type;
use crate::traits::node_trait::NodeTrait;

pub(super) fn jump_to_definition_in_arith_expr<'a>(
    schema: &'a Schema,
    source: &'a Source,
    arith_expr: &'a ArithExpr,
    namespace_path: &Vec<&'a str>,
    line_col: (usize, usize),
    expect: &Type,
    availability: Availability,
) -> Vec<Definition> {
    match arith_expr {
        ArithExpr::Expression(e) => jump_to_definition_in_expression(
            schema,
            source,
            e.as_ref(),
            namespace_path,
            line_col,
            expect,
            availability,
        ),
        ArithExpr::UnaryPostfixOperation(u) => if u.lhs().span().contains_line_col(line_col) {
            jump_to_definition_in_arith_expr(
                schema,
                source,
                u.lhs(),
                namespace_path,
                line_col,
                expect,
                availability,
            )
        } else {
            vec![]
        }
        ArithExpr::UnaryOperation(u) => if u.rhs().span().contains_line_col(line_col) {
            jump_to_definition_in_arith_expr(
                schema,
                source,
                u.rhs(),
                namespace_path,
                line_col,
                expect,
                availability,
            )
        } else {
            vec![]
        }
        ArithExpr::BinaryOperation(b) => if b.lhs().span().contains_line_col(line_col) {
            jump_to_definition_in_arith_expr(
                schema,
                source,
                b.lhs(),
                namespace_path,
                line_col,
                expect,
                availability,
            )
        } else if b.rhs().span().contains_line_col(line_col) {
            jump_to_definition_in_arith_expr(
                schema,
                source,
                b.rhs(),
                namespace_path,
                line_col,
                expect,
                availability,
            )
        } else {
            vec![]
        }
    }
}