Skip to content

Commit

Permalink
LSP: Resolve completion items when any info is missing (helix-editor#…
Browse files Browse the repository at this point in the history
  • Loading branch information
the-mikedavis authored and Schuyler Mortimer committed Jul 10, 2024
1 parent 27e6a74 commit 4c2b28b
Showing 1 changed file with 24 additions and 4 deletions.
28 changes: 24 additions & 4 deletions helix-term/src/handlers/completion/resolve.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,30 @@ impl ResolveHandler {
if item.resolved {
return;
}
let needs_resolve = item.item.documentation.is_none()
|| item.item.detail.is_none()
|| item.item.additional_text_edits.is_none();
if !needs_resolve {
// We consider an item to be fully resolved if it has non-empty, none-`None` details,
// docs and additional text-edits. Ideally we could use `is_some` instead of this
// check but some language servers send values like `Some([])` for additional text
// edits although the items need to be resolved. This is probably a consequence of
// how `null` works in the JavaScript world.
let is_resolved = item
.item
.documentation
.as_ref()
.is_some_and(|docs| match docs {
lsp::Documentation::String(text) => !text.is_empty(),
lsp::Documentation::MarkupContent(markup) => !markup.value.is_empty(),
})
&& item
.item
.detail
.as_ref()
.is_some_and(|detail| !detail.is_empty())
&& item
.item
.additional_text_edits
.as_ref()
.is_some_and(|edits| !edits.is_empty());
if is_resolved {
item.resolved = true;
return;
}
Expand Down

0 comments on commit 4c2b28b

Please sign in to comment.