Skip to content

Commit

Permalink
fix: don't blow up when nvim_buf_get_lines() returns Blobs
Browse files Browse the repository at this point in the history
Some LSP servers may return binary garbage and `nvim_buf_get_lines()`
will return a `Blob` instead of a `String` in those cases.

I added some `print(vim.inspect())` debugging in
`entry.get_documentation()` to prove that by the time the text passes
through there, it's already garbage.

Here's an excerpt from a sample line returned by `nvim_buf_get_lines()`,
as rendered by `vim.inspect()`:

    default\0\0\0!      vim.opt.background = 'dark'\0\0\0000

(etc)

Now, this looks like an LSP bug to me, but I think we shouldn't allow
buggy LSP output to crash nvim-cmp. "Be conservative in what you send,
be liberal in what you accept" and all that.

So, degrade by coercing any `Blob` we see into a `String` before passing
it to `strdisplaywidth()`.

Closes: #820
  • Loading branch information
wincent committed Sep 27, 2024
1 parent d818fd0 commit 3225c52
Showing 1 changed file with 3 additions and 0 deletions.
3 changes: 3 additions & 0 deletions lua/cmp/utils/window.lua
Original file line number Diff line number Diff line change
Expand Up @@ -309,6 +309,9 @@ window.get_content_height = function(self)
local height = 0
vim.api.nvim_buf_call(self:get_buffer(), function()
for _, text in ipairs(vim.api.nvim_buf_get_lines(self:get_buffer(), 0, -1, false)) do
if vim.fn.type(text) == vim.v.t_blob then
text = vim.fn.string(text)
end
height = height + math.max(1, math.ceil(vim.fn.strdisplaywidth(text) / self.style.width))
end
end)
Expand Down

0 comments on commit 3225c52

Please sign in to comment.