teo-parser 0.3.0

Parser for Teo schema language
Documentation
use crate::ast::node::Node;
use crate::ast::schema::Schema;
use crate::definition::definition::Definition;
use crate::definition::jump_to_definition_in_config::jump_to_definition_in_config;
use crate::definition::jump_to_definition_in_config_declaration::jump_to_definition_in_config_declaration;
use crate::definition::jump_to_definition_in_constant::jump_to_definition_in_constant;
use crate::definition::jump_to_definition_in_declared_synthesized_shape::jump_to_definition_in_declared_synthesized_shape;
use crate::definition::jump_to_definition_in_decorator_declaration::jump_to_definition_in_decorator_declaration;
use crate::definition::jump_to_definition_in_enum_declaration::jump_to_definition_in_enum_declaration;
use crate::definition::jump_to_definition_in_handler_declaration::{jump_to_definition_in_handler_declaration, jump_to_definition_in_handler_group_declaration};
use crate::definition::jump_to_definition_in_handler_template_declaration::jump_to_definition_in_handler_template_declaration;
use crate::definition::jump_to_definition_in_import::jump_to_definition_in_import;
use crate::definition::jump_to_definition_in_interface::jump_to_definition_in_interface;
use crate::definition::jump_to_definition_in_middleware_declaration::jump_to_definition_in_middleware_declaration;
use crate::definition::jump_to_definition_in_model::jump_to_definition_in_model;
use crate::definition::jump_to_definition_in_pipeline_item_declaration::jump_to_definition_in_pipeline_item_declaration;
use crate::definition::jump_to_definition_in_struct_declaration::jump_to_definition_in_struct_declaration;
use crate::search::search_top::search_top;

pub fn jump_to_definition(schema: &Schema, file_path: &str, line_col: (usize, usize)) -> Vec<Definition> {
    if let Some(source) = schema.source_at_path(file_path) {
        if let Some(top) = search_top(schema, file_path, line_col) {
            return match top {
                Node::Import(i) => jump_to_definition_in_import(schema, source, i, line_col),
                Node::Model(m) => jump_to_definition_in_model(schema, source, m, line_col),
                Node::InterfaceDeclaration(i) => jump_to_definition_in_interface(schema, source, i, line_col),
                Node::ConstantDeclaration(c) => jump_to_definition_in_constant(schema, source, c, line_col),
                Node::Config(c) => jump_to_definition_in_config(schema, source, c, line_col),
                Node::ConfigDeclaration(c) => jump_to_definition_in_config_declaration(schema, source, c, line_col),
                Node::PipelineItemDeclaration(p) => jump_to_definition_in_pipeline_item_declaration(schema, source, p, line_col),
                Node::DecoratorDeclaration(d) => jump_to_definition_in_decorator_declaration(schema, source, d, line_col),
                Node::StructDeclaration(s) => jump_to_definition_in_struct_declaration(schema, source, s, line_col),
                Node::HandlerGroupDeclaration(h) => jump_to_definition_in_handler_group_declaration(schema, source, h, line_col),
                Node::Enum(e) => jump_to_definition_in_enum_declaration(schema, source, e, line_col),
                Node::MiddlewareDeclaration(m) => jump_to_definition_in_middleware_declaration(schema, source, m, line_col),
                Node::SynthesizedShapeDeclaration(f) => jump_to_definition_in_declared_synthesized_shape(schema, source, f, line_col),
                Node::HandlerDeclaration(h) => jump_to_definition_in_handler_declaration(schema, source, h, line_col, true),
                Node::HandlerTemplateDeclaration(h) => jump_to_definition_in_handler_template_declaration(schema, source, h, line_col),
                Node::DataSet(_) => vec![],
                Node::Namespace(_) => vec![],
                Node::UseMiddlewaresBlock(_) => vec![],
                _ => vec![],
            };
        }
    }
    vec![]
}