幫忙改進 C++ LSP 體驗

是的,只是 lib,各种 lsp-<lang> 才是具体/完整实现:

  • lsp-css
  • lsp-go
  • lsp-haskell
  • lsp-java
  • lsp-javascript
  • lsp-ocaml
  • lsp-python
  • lsp-rust
  • lsp-vue

感谢回复!

也就是说, 还没有c++的客户端. 比如lsp-cpp. 只能靠cquery中的打包的server和client了.

一些基本问题建议自己解决。http://langserver.org

当然,cquery 是个好项目。

cquery 的 Emacs 客户端(cquery.el)就是 “lsp-cpp”。

服务端实现与 Emacs 无关。Emacs 无需知道服务端是谁/如何实现的,只要符合 lsp 协议即可:

server <-- socket/stdio --> client (Emacs / VSCode /...)

嗯,没错。 cquery,我没装成功,archlinux,按照wiki编译总是出错 :sweat_smile: 你装好了吗?

1 个赞

AUR (en) - cquery-git SilverRainZ有個回覆

lsp-ui 新功能 lsp-ui-doc.el child frame lsp-ui child frame 相信可以做更多事

感谢楼上的信息,我抽空再试试。希望能把cquery先装上,然后看看lsp-ui是否需要装。

我安装完之后只有一个 “cquery/bin/cquery”, 但是cquery wiki上又说要添加

(add-to-list 'load-path “/path/to/cquery/emacs”)

大家有安装成功cquery的吗? 这个问题该怎么解决呢?

这里没有问题。

构建 cquery 会得到可执行文件 cquery,Emacs 支持放源代码下的 emacs 文件夹下。

哦, 原来是这样, 多谢~~

  • 先是装了cquery, 没反应…
  • 然后又装了lsp-ui, 还是不能用. 提示(error “Buffer xxx.cpp has no process”).

是不是Emacs26才能用cquery和lsp-ui啊? :joy: 我用的Emacs版本是25.3.1.

emacs 26 一直到 pretest 1 都还有问题,建议直接 emacs 27。

EMACS25.3.1不行吗?cquery也没有对emacs版本有要求啊

lsp-ui 中的 chlid-frame 是 Emacs 26 的新功能。

lsp-cquery-enable 一定要在project 目录里的找的 compile_commands.json 或者 .cquery 才会启动 cquery 的server

YouCompleteMe 只針對一個 translation unit,不支持 find references。find definitions 不知到怎麼實現的,理論上如果在其他 .cc 文件是跳轉不了的,但能跳轉到 #include 裏的頭文件,用一些啓發可以找到 .cc

rtags 存儲模型設計得很愚蠢,find references 可以 strace 看它到底要訪問多少文件。

以及 LSP 週邊客戶端都在茁長成長,這兩個的插件系統都是自己一套的,多一份配置

cquery 跟 Emacs 没关系。cquery.el 需要至少 Emacs 25.1,我用 25.3 试过可以正常工作。先把自己操作层面的因素排除掉(特别是 cquery 并非开箱即用的),然后再找外部原因。

感谢大家的回复!

我现在已经将lsp-ui卸载了. 现在的状态是cquery安装好了, 也按照wiki相应地配置了emacs. 也调用了lsp-cquery-enable, 但是不能补全, 而且调用xref-find-xxx之类的命令时, 总是提示visit tags table (default TAGS). 我觉得language server没有正常工作.

是不是还有什么需要特别注意的呢?

server 有没有启动可以用 ps aux | grep <关键字> 查看,提示 visit tags table (default TAGS) 跟 server 无关吧,都 lsp 了应该不需要 TAGS 了,你看下 xref-find-xxx 是不是可以配置不同的来源。

另外 Linux 可以用 forkstat 透過 process events connector 查看進程是否啓動過

M-: xref-backend-functions 看是否(lsp--xref-backend)

對於畫 $cquery/callHierarchyTree ,可以復用 tree-widget.el 或 treemacs 嗎?(感覺我的elisp技藝不夠做這件事:frowning: