fix(lsp): don't overlay insertion-style inline completions (#36477)

* feat(lua): `Range:is_empty()` to check vim.range emptiness

* fix(lsp): don't overlay insertion-style inline completions

**Problem:** Some servers commonly respond with an empty inline
completion range which acts as a position where text should be inserted.
However, the inline completion module assumes that all responses with a
range are deletions + insertions that thus require an `overlay` display
style. This causes an incorrect preview, because the virtual text should
have the `inline` display style (to reflect that this is purely an
insertion).

**Solution:** Only use `overlay` for non-empty replacement ranges.
This commit is contained in:
Riley Bruins
2025-11-09 17:49:25 -08:00
committed by GitHub
parent c6dad6e9df
commit c2c5a0297e
5 changed files with 50 additions and 1 deletions

View File

@@ -99,6 +99,13 @@ function Range.__eq(r1, r2)
return r1.start == r2.start and r1.end_ == r2.end_
end
--- Checks whether the given range is empty; i.e., start >= end.
---
---@return boolean `true` if the given range is empty
function Range:is_empty()
return self.start >= self.end_
end
--- Checks whether {outer} range contains {inner} range.
---
---@param outer vim.Range