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

Negative position value in textDocument/hover request #381

@yochem

Description

@yochem
  • 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!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions