diff --git a/crates/analyzer/src/lib.rs b/crates/analyzer/src/lib.rs index 7895bd5..74f90fb 100644 --- a/crates/analyzer/src/lib.rs +++ b/crates/analyzer/src/lib.rs @@ -1218,6 +1218,11 @@ impl LanguageServer for Backend { return Ok(None); }; + let trigger_char: Option = params + .context + .as_ref() + .and_then(|c| c.trigger_character.clone()); + let comp_params = CompletionParams { text_document_position: TextDocumentPositionParams { text_document: TextDocumentIdentifier { uri: rust_uri }, @@ -1245,13 +1250,13 @@ impl LanguageServer for Backend { match completion_result { Ok(Some(CompletionResponse::Array(mut items))) => { - mist_ify_completions(&source, &mist_pos, &mut items); + mist_ify_completions(&source, &mist_pos, &mut items, trigger_char.as_deref()); Ok(Some(CompletionResponse::Array(items))) } Ok(Some(CompletionResponse::List(mut list))) => { - mist_ify_completions(&source, &mist_pos, &mut list.items); + mist_ify_completions(&source, &mist_pos, &mut list.items, trigger_char.as_deref()); Ok(Some(CompletionResponse::List(list))) } @@ -1546,10 +1551,8 @@ impl LanguageServer for Backend { } } -fn mist_ify_completions(source: &str, pos: &Position, items: &mut Vec) { - let existing: HashSet = items.iter().map(|item| item.label.clone()).collect(); - - items.extend(keyword_completion_items().filter(|item| !existing.contains(&item.label))); +fn mist_ify_completions(source: &str, pos: &Position, items: &mut Vec, trigger_char: Option<&str>) { + let is_scoping_trigger = matches!(trigger_char, Some("." | ":")); for item in items.iter_mut() { item.text_edit = None; @@ -1561,6 +1564,14 @@ fn mist_ify_completions(source: &str, pos: &Position, items: &mut Vec = items.iter().map(|item| item.label.clone()).collect(); + + items.extend(keyword_completion_items().filter(|item| !existing.contains(&item.label))); + let curr_scope = current_scope(&source, pos.line, pos.character); // =========================