diff --git a/crates/lang_srv/src/analysis.rs b/crates/lang_srv/src/analysis.rs index 2b7268653a..4a408cb433 100644 --- a/crates/lang_srv/src/analysis.rs +++ b/crates/lang_srv/src/analysis.rs @@ -105,7 +105,7 @@ pub(crate) fn global_analysis(doc_info: DocInfo) -> Vec { abilities_store, docs_by_module, imported_modules, - mut exposed_imports, + exposed_imports, mut imports, exposed_types_storage, mut exposes, @@ -116,6 +116,7 @@ pub(crate) fn global_analysis(doc_info: DocInfo) -> Vec { subs: solved.into_inner(), abilities_store, }); + debug!("exposed_imports: {:#?}", &exposed_imports); let exposed_imports: HashMap<_, _> = exposed_imports .into_iter() .map(|(id, symbols)| { @@ -124,7 +125,10 @@ pub(crate) fn global_analysis(doc_info: DocInfo) -> Vec { symbols .into_iter() .filter_map(|(symbol, _)| { - exposes.get(&id)?.iter().find(|(symb, _)| symb == &symbol) + exposes.get(&id)?.iter().find(|(symb, _)| { + //TODO this seems to not be comparing proprely so we aren't getting any exposed imports + symb == &symbol + }) }) .cloned() .collect::>(), diff --git a/crates/lang_srv/src/analysis/analysed_doc.rs b/crates/lang_srv/src/analysis/analysed_doc.rs index e1cf057cb8..f6370a77d7 100644 --- a/crates/lang_srv/src/analysis/analysed_doc.rs +++ b/crates/lang_srv/src/analysis/analysed_doc.rs @@ -241,6 +241,7 @@ impl AnalyzedDocument { .map(|a| a.chars().nth(0).unwrap().is_uppercase()) .unwrap_or(false); if is_module_completion { + //TODO: this doesn't work with builtins for some reason Some(get_upper_case_completion_items( position, symbol_prefix, @@ -283,6 +284,7 @@ impl AnalyzedDocument { &mut subs.clone(), module_id, interns, + exposed_imports, ); Some(completions) } diff --git a/crates/lang_srv/src/analysis/completion.rs b/crates/lang_srv/src/analysis/completion.rs index 6ee0dd4bcc..4d23d32934 100644 --- a/crates/lang_srv/src/analysis/completion.rs +++ b/crates/lang_srv/src/analysis/completion.rs @@ -308,8 +308,11 @@ pub fn get_completion_items( subs: &mut Subs, module_id: &ModuleId, interns: &Interns, + exposed_imports: &Vec<(Symbol, Variable)>, ) -> Vec { - let completions = get_completions(position, decls, prefix, interns); + let mut completions = get_completions(position, decls, prefix, interns); + completions.extend(exposed_imports); + debug!("extended with:{:#?}", exposed_imports); make_completion_items( subs, module_id, @@ -340,15 +343,16 @@ pub fn get_upper_case_completion_items( format!("`{0}` module", mod_name), )] } else if prefix.starts_with(&mod_name) { - make_completion_items( - subs, - module_id, - interns, - vars.clone() - .iter() - .map(|(sym, vars)| (sym.as_str(interns).to_string(), vars.clone())) - .collect::>(), - ) + vars.clone() + .iter() + .map(|(sym, vars)| { + CompletionItem::new_simple( + sym.as_str(interns).to_string(), + //TODO! I need to get subs from the module we are completing from + "builtin".to_string(), + ) + }) + .collect::>() } else { vec![] }