请教 eglot + typescript-language-server 在 js-mode 下报错的原因是什么

egot 是默认配置,eglot-server-programs 里:

((js-mode js-ts-mode tsx-ts-mode typescript-ts-mode typescript-mode)
  "typescript-language-server" "--stdio")

启动 eglot 时得到

[eglot] Server reports (type=1): Inlay Hints request failed. File not opened in the editor.

启动后编辑时得到 eglot 提示

[server-reply] (id:73) ERROR Mon Nov 13 17:00:53 2023:
(:jsonrpc "2.0" :id 73 :error
	  (:code -32603 :message "Request textDocument/documentHighlight failed with message: The document should be opened first: file:///home/xueshumeng/Workspace/javascript/sample/index.js"))
[internal] (id:73) ERROR Mon Nov 13 17:00:53 2023:
(:message "error ignored, status set (Request textDocument/documentHighlight failed with message: The document should be opened first: file:///home/xueshumeng/Workspace/javascript/sample/index.js)" :id 73 :error -32603)

请教各位,这是什么问题?

有没有更加详细的信息,比如如何安装的 LSP server 以及编辑的文件内容

最近也发现了,之前版本不会,不知道是不是升级29.1之后有一些东西不兼容。

我这边发现打开文档报错:

(:jsonrpc "2.0" :method "window/logMessage" :params
          (:type 1 :message "Unexpected resource file:///Users/lionqu/workspace/learn-typescript/test.ts"))

lsp server 安装在 ~/.npm/typescript-language-server/ 下面

➜  cd ~/.npm/typescript-language-server 
➜  npm install typescript-language-server typescript

之后把 typescript-language-server 的 BIN 目录导出到 PATH 变量里

NODE_PACKAGE_HOME=$HOME/.npm

for NODE_PACKAGE in $NODE_PACKAGE_HOME/*; do
    NODE_PACKAGE_BIN=$NODE_PACKAGE/node_modules/.bin
    if [[ -d $NODE_PACKAGE_BIN ]]
    then
	PATH=$PATH:$NODE_PACKAGE_BIN
    fi
done

编辑的 JavaScript 文件内容是

console.log("Hello JavaScript");

我换lsp-mode没问题。感觉像是eglot的问题

1 个赞

我试着把 typescript-language-server 版本回退到 4.0.0,就没再有上面的错误了。

2 个赞

确实好了,应该还是Emacs 29.1内置的eglot的兼容性不太好。 这种情况,估计很多 LSP server的版本都不能太新,容易导致兼容性问题。

感觉是这个bug GNU bug report logs - #67150 eglot with typescript language server >= 4.1.0

master 分支已经修复了

1 个赞

看来 typescript-language-server 之前的更新也影响到其他客户端的功能了,现在服务端也推了一个补丁

1 个赞