teo-parser 0.3.0

Parser for Teo schema language
Documentation
use crate::ast::empty_pipeline::EmptyPipeline;
use crate::availability::Availability;
use crate::ast::pipeline::Pipeline;
use crate::ast::schema::Schema;
use crate::ast::source::Source;
use crate::ast::unit::Unit;
use crate::completion::collect_argument_list_names::collect_argument_list_names_from_pipeline_item_declaration;
use crate::completion::completion_item::CompletionItem;
use crate::completion::find_completion_in_argument_list::find_completion_in_argument_list;
use crate::completion::find_top_completion_with_filter::find_top_completion_with_filter;
use crate::search::search_pipeline_unit_for_auto_completion::search_pipeline_unit_for_auto_completion;
use crate::utils::top_filter::top_filter_for_pipeline;

pub(super) fn find_completion_in_empty_pipeline(schema: &Schema, source: &Source, pipeline: &EmptyPipeline, line_col: (usize, usize), namespace_path: &Vec<&str>, availability: Availability) -> Vec<CompletionItem> {
    if pipeline.span.contains_line_col(line_col) {
        find_top_completion_with_filter(schema, source, namespace_path, &vec![], &top_filter_for_pipeline(), availability)
    } else {
        vec![]
    }
}

pub(super) fn find_completion_in_pipeline(schema: &Schema, source: &Source, pipeline: &Pipeline, line_col: (usize, usize), namespace_path: &Vec<&str>, availability: Availability) -> Vec<CompletionItem> {
    find_completion_in_pipeline_unit(schema, source, pipeline.unit(), line_col, namespace_path, availability)
}

fn find_completion_in_pipeline_unit(schema: &Schema, source: &Source, unit: &Unit, line_col: (usize, usize), namespace_path: &Vec<&str>, availability: Availability) -> Vec<CompletionItem> {
    search_pipeline_unit_for_auto_completion(
        schema,
        source,
        unit,
        namespace_path,
        line_col,
        |argument_list, path| {
            let names = if let Some(path) = path {
                collect_argument_list_names_from_pipeline_item_declaration(path)
            } else {
                vec![]
            };
            find_completion_in_argument_list(schema, source, argument_list, line_col, namespace_path, availability, names)
        },
        |user_typed_prefix| {
            find_top_completion_with_filter(schema, source, namespace_path, user_typed_prefix, &top_filter_for_pipeline(), availability)
        },
        vec![],
        availability
    )
}