ccls, clangd, cquery, 你更看好谁?

  • ccls: @MaskRay 老大在cquery作恶之后fork之, 另立门户后之作, 早已加入lsp官方 豪华大餐
  • cquery: 在ccls还未出现且clangd仍然残废时期唯一可用的language server.
  • clangd: llvm出品, 但是因为因review效率低下等原因层开发迟缓, 不知是否因为最近发力, qt和jetbrain纷纷表示支持, 比如clion给用户提供了clangd作为error和warning的选项. 不过从其在各个社区的交流中貌似可以看出其用户量貌似是三者中最少的?
1 个赞

官网上貌似没有ccls啊

1 个赞

My bad. Originally, I saw it on https://langserver.org/ and didn’t notice it is community-driven site, not official site:

Langserver.org is a community-driven site, maintained by Sourcegraph, to track development progress of LSP-compatible language servers and clients.

现在还是不知道选哪个,社区就不能集中集中力量,一起完善一个可用的出来?

我看好clangd……以及一切由语言官方或者编译器开发人员开发的language server……

虽然它们可能真的很烂

還有個使用libclang Python binding的C++ language server cxxd,4000+行Python方便學習。

https://microsoft.github.io/language-server-protocol/implementors/servers/現在有ccls了。

對於我,ccls有着學習Clang實作的重要價值,而clangd的開發外人(我)要參與很困難,我自己有着一些特殊的xref需求,所以我會繼續做下去。我的doom-emacs cc-mode ccls配置

clangd的補全是這些language servers中最好的,我打算研究一下它是怎麼做的。

clangd的開發人員也不是編譯器開發人員(你可以對比clang主要貢獻者和clang-tools-extra主要貢獻者,找關聯),但他們確實比我有更多經驗。IDE開發者中倒是有clangd參與者,但他們比較弱勢。clangd現在有一些我討厭的東西:比如對於protobuf檔案的特判、diagnostic轉大寫的開關、一些搜索引擎化的heuristics、……而一些我想要的heuristics他們沒有,也很難讓他們接受

3 个赞

clangd 作为 llvm 的一部分,如果它已经达到相当高的可用度,无疑是最方便的。

如果它还在持续频繁的更新当中,每次都需要重编 llvm,有点麻烦。


UPDATE 2018-08-19 17.13.55

噢,我看到了,clang-tools-extra 是独立的项目,但是好像不太容易编译,所以还是 brew install llvm --HEAD 吧。

1 个赞

官方的东西当然是最方便最稳定的,毕竟llvm的内部原理他们要懂得多些。希望能早点稳定吧。

您好,想咨询一个小技术问题,使用目前lsp自带的clangd,补全效果和速度不错,但是无法补全库头文件,开发目录下的头文件也没有补全提示。手动输入头文件后,头文件中的变量和函数可以获得补全。一直不知道问题出在哪里,望指教。谢谢

19年3月了,现在大家更看好哪个呢?我正在纠结配置clangd还是ccls…

clangd 8.0.0看起来可以很好用了。

目前还是ccls更好,clangd 9.0的今天试了试,不稳定,vscode下一索引就崩溃.ccls稳定很多.就是索引巨耗时,巨耗cpu.不过clangd一个样子,应该是无法避免的.

如何耗時?索引也是編譯,一樣要經過lex parse sema等階段,只是少了codegen。不同clang基於的工具在這部分公共耗時上是差不多的,之後符號、引用的表示,索引的組織會有一些差別。

现在clangd发展的怎么样了? ccls还是clangd? 我用ccls发现补全的时候卡顿明显,Mac 上ccls还找不到头文件,issue中有解决方案,试了好几个都搞不定。后端换成clangd感觉补全很顺滑,头文件也都没问题。

系统:emacs 28.0.50
lsp client:nox

c/c++ 的lsp真的能用吗?我试了clangd和ccls,都可以说是完全不可用的状态。环境是ubuntu,emacs26,apt安装的clangd-10和ccls,用lsp和eglot都试过。一个最简单的文件

#include <vector>

void main() {
    std::vector<int> abc;
    int number = abc;
}

用eglot/lsp-mode + clangd无法识别number,abc,main的定义。 用eglot+ccls可以识别定义,但是没有动态的编译错误查找。

换复杂一点的工程,两个类定义同名成员函数,无法根据对象类型跳转到正确的函数定义;补全功能也不完备。

是我的配置有问题吗?没搞什么特别的配置,就是emacs和ubuntu的包管理系统安装前后端。

后来用VSCode+VSCode的lsp server插件一试,确实就简单易用和功能完备来说比emacs+ccls/clangd强一些。这么多年过去了,代码解析这块还是得商用公司才做得来吗?

正在msys2 上用clangd,稳定。之前用ccls,自从升级llvm10后,我的环境上异常退出。所以,看好clangd。

是你配置的问题吧,我这里可用。

你用的什么后端?怎么定义可用?c/c++很多时候有些复杂的宏,它们解析不明白。

ccls是能用,就是不好用,比如说两个不存在继承关系的类有同名函数,跳转的时候跳不到正确的定义。这东西我折腾过很多次了,实在是搞不明白,后端前端都是包管理系统装的,直接拿来解析代码,就是有问题。说真的,配起来用这么难,不算是个问题吗?

tag+grep至少清楚明白。

clangd和ccls不是完全不能用,是部分功能失效或者达不到预期效果,这也能算是配置问题吗?我一行配置代码没写,都是拿过来直接用。

ccls clangd 都是很香的啊,我用的是coc.nvim,cquery已经很久没更新了吧。感觉是配置问题。