ghdl-language-server icon indicating copy to clipboard operation
ghdl-language-server copied to clipboard

[Bug] Cannot read property 'capabilities' of null when running GHDL-LS LSP Server

Open pidgeon777 opened this issue 3 years ago • 14 comments

We're trying to run ghdl-ls on Neovim with coc.nvim, one of its LSP clients.

An error occurs when doing that, we're trying to understand if this is a bug coc.nvim side or ghdl-ls side.

Here is the necessary info:

Result from CocInfo

## versions

vim version: NVIM v0.4.4
node version: v14.15.4
coc.nvim version: 0.0.80-50544406f0
coc.nvim directory: C:\Neovim\config\nvim\plugged\coc.nvim
term: undefined
platform: win32

## Log of coc.nvim

2021-01-31T15:54:27.641 INFO (pid:24080) [services] - registered service "languageserver.ghdlLS"
2021-01-31T15:54:27.883 INFO (pid:24080) [plugin] - coc.nvim 0.0.80-50544406f0 initialized with node: v14.15.4 after 308ms
2021-01-31T15:54:30.772 INFO (pid:24080) [attach] - receive notification: showInfo []

Describe the bug

I defined a LSP entry in the coc-settings.json file, this involve running the ghdl-ls executable when analyzing VHDL files. When one of those VHDL files is opened, coc.nvim detect it and start the ghdl-ls LSP Server, but an error is generated, the following:

Cannot read property 'capabilities' of null

I'm using other VHDL LSP Servers with success, which are currently disabled, but this issue only occurs when using ghdl-ls.

Reproduce the bug

  • Create file mini.vim with:
" -----------------------------
" Paths
" -----------------------------

let s:ghdl_p      = 'C:\GHDL\bin'
let s:ghdl_ls_p   = 'C:\Users\pcuser\.local\bin'

if (has('win32') || has('win64'))
 if !executable('ghdl')
   if (isdirectory(s:ghdl_p))
     let $PATH .= ';' . s:ghdl_p
   endif
 endif

 if !executable('ghdl-ls')
   if (isdirectory(s:ghdl_ls_p))
     let $PATH .= ';' . s:ghdl_ls_p
   endif
 endif

endif

" -----------------------------

set nocompatible
set runtimepath^=C:\Neovim\config\nvim\plugged\coc.nvim
filetype plugin indent on
syntax on
set hidden
  • Start (neo)vim with command: vim -u mini.vim

  • Operate vim.

My coc-settings.json:

{
	"suggest.autoTrigger": "always",

	"diagnostic.messageDelay": 0,

	"suggest.triggerCompletionWait" : 30,
	"signature.triggerSignatureWait": 200,

	"languageserver": {
		"ghdlLS": {
			"enable": true,
			"trace.server": "verbose",
			"command": "ghdl-ls",
			"filetypes": [
				"vhdl"
			],
                        "trace.server": "verbose"
		}
	},

	"snippets.userSnippetsDirectory": "$VIMCONFIG/UltiSnips"
}

LSP server config file hdl-prj.json:

{
    "options": {
        "ghdl_analysis": [
            "--workdir=work",
            "--ieee=synopsys",
            "-fexplicit"
        ]
    },
    "files": [
        { "file": "C:/VHDL/entity.vhd", "language": "vhdl" }
    ]
}

hdl-prj.json path:

C:\Test\hdl-prj.json

set pwd? result in Neovim:

C:\Test

ghdl-ls manual execution test in Neovim:

:!ghdl-ls --version
ghdl-ls 1.0-dev

The Issue

It occurs when I load the file added to the LSP config project, or any file of the VHDL type.

Coc.nvim returns:

[coc.nvim] Caught exception while handling initialize, see VHDL language server output for details.
[coc.nvim] Cannot read property 'capabilities' of null
[coc.nvim] Server languageserver.ghdlLS failed to start: TypeError: Cannot read property 'capabilities' of null

CocCommand workspace.showOutput shows an empty buffer.

pidgeon777 avatar Jan 31 '21 16:01 pidgeon777