teo_parser/completion/
find_completion_in_config.rs

1use crate::availability::Availability;
2use crate::ast::config::Config;
3use crate::ast::schema::Schema;
4use crate::ast::source::Source;
5use crate::completion::completion_item::CompletionItem;
6use crate::completion::completion_item_from_top::completion_item_from_field;
7use crate::traits::has_availability::HasAvailability;
8use crate::traits::node_trait::NodeTrait;
9
10pub(super) fn find_completion_in_config(schema: &Schema, _source: &Source, config: &Config, line_col: (usize, usize)) -> Vec<CompletionItem> {
11    // let mut used: Vec<&str> = vec![];
12    // used.extend(config.items().map(|i| i.identifier().name()));
13    // used.extend(config.unattached_identifiers.iter().map(|i| i.name()));
14    // for item in config.items() {
15    //     if item.span().contains_line_col(line_col) {
16    //         return find_completion_in_config_item(schema, item, line_col, &used);
17    //     }
18    // }
19    // for unattached_identifier in &config.unattached_identifiers {
20    //     if unattached_identifier.span.contains_line_col(line_col) {
21    //         return collect_config_declaration_item_names(schema, config.keyword().name(), config.availability(), &used)
22    //     }
23    // }
24    vec![]
25}
26
27fn collect_config_declaration_item_names(schema: &Schema, config_name: &str, availability: Availability, used: &Vec<&str>) -> Vec<CompletionItem> {
28    let Some(config_declaration) = schema.find_config_declaration_by_name(config_name, availability) else {
29        return vec![];
30    };
31    config_declaration.fields().filter(|f| !used.contains(&f.identifier().name())).map(|f| completion_item_from_field(f)).collect()
32}