Skip to content
This repository has been archived by the owner on Oct 13, 2021. It is now read-only.

Negative position value in textDocument/hover request #381

Open
1 task done
yochem opened this issue Jun 27, 2021 · 0 comments
Open
1 task done

Negative position value in textDocument/hover request #381

yochem opened this issue Jun 27, 2021 · 0 comments

Comments

@yochem
Copy link

yochem commented Jun 27, 2021

  • Please read through this section before posting a bug report.

My testing minimal init.vim
Post your init.vim to help me reproduce this issue

vim.cmd('packadd packer.nvim')
require('packer').startup(function(use)
    use 'wbthomason/packer.nvim'
    use 'neovim/nvim-lspconfig'
    use 'nvim-lua/completion-nvim'
end)

vim.cmd [[au BufRead,BufNewFile *.tex setlocal filetype=tex]]
require'lspconfig'.texlab.setup{on_attach=require'completion'.on_attach}

vim.cmd[[au Filetype lua setl omnifunc=v:lua.vim.lsp.omnifunc]]
vim.cmd[[inoremap <expr> <Tab>   pumvisible() ? "\<C-n>" : "\<Tab>"]]
vim.cmd[[inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"]]

vim.cmd[[set completeopt=menuone,noinsert]]

How to reproduce
Detailed step to reproduce this issue.

  1. Open a .tex file (and possibly confirm that the texlab language server is connected to buffer)
  2. Type something that triggers completion, for example \begin{
  3. The language server crashes

Expected behavior
A clear and concise description of what you expected to happen.

The language server should not crash.

Okay, I've had quite some struggles with this. At first, I thought this was a bug in texlab because only that language server crashed emmediately after the completion pop up comes. I opened an issue on its repository: latex-lsp/texlab#450. Turns out the language servers receives the following request:

{"method": "textDocument/hover", "jsonrpc": "2.0", "id": 6, "params": {"textDocument": {"uri": "file:///Users/yochem/Documents/thesis/paper/discussion.tex"}, "position": {"character": -2, "line": 14}}}

In this, params..textDocument.position.character has a value of -2. This should not be the case (character can not be negative). While going through my configs, it turned out to be that completeopt without noselect causes this! The -2 value is set somewhere around here:

local row, col = unpack(api.nvim_win_get_cursor(0))
row = row - 1
local line = api.nvim_buf_get_lines(0, row, row+1, true)[1]
col = vim.str_utfindex(line, col)
local params = {
textDocument = vim.lsp.util.make_text_document_params();
position = { line = row; character = col-string.len(item.word); }
}
vim.lsp.buf_request(bufnr, 'textDocument/hover', params, handler_function)

At least, that is where the request comes from.

So, TL;DR, language server quits after receiving bad value for position due to completeopt being 'menuone,noinsert'. It works as expected when noselect is added to compleopt.

I'm on the latest nvim (well, updated 5 hours ago) and latest completion-nvim.

Let me know if I could provide more information, happy to help!

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant