teo-parser 0.3.0

Parser for Teo schema language
Documentation
use crate::ast::constant_declaration::ConstantDeclaration;
use crate::ast::schema::Schema;
use crate::ast::source::Source;
use crate::completion::completion_item::CompletionItem;
use crate::completion::find_completion_in_expression::find_completion_in_expression;
use crate::completion::find_completion_in_type_expr::{find_completion_in_type_expr, TypeExprFilter};
use crate::r#type::Type;
use crate::traits::info_provider::InfoProvider;
use crate::traits::node_trait::NodeTrait;
use crate::traits::resolved::Resolve;

pub(super) fn find_completion_in_constant_declaration(schema: &Schema, source: &Source, constant: &ConstantDeclaration, line_col: (usize, usize)) -> Vec<CompletionItem> {
    if constant.expression().span().contains_line_col(line_col) {
        let undetermined = Type::Undetermined;
        return find_completion_in_expression(schema, source, constant.expression(), line_col, &constant.namespace_str_path(), if let Some(type_expr) = constant.type_expr() {
            type_expr.resolved()
        } else {
            &undetermined
        }, constant.define_availability);
    }
    if let Some(type_expr) = constant.type_expr() {
        if type_expr.span().contains_line_col(line_col) {
            return find_completion_in_type_expr(schema, source, type_expr, line_col, &constant.namespace_str_path(), &vec![], TypeExprFilter::None, constant.define_availability);
        }
    }
    vec![]
}