有都用过irony-mode和cquery的吗

来来来,给点对比的反馈?

最近看到cquery好火啊,它是不是对大项目补全支持的非常好啊?看看的有点心动,考虑要不要跳坑 :smiley:

(我只用过irony-mode和rtags,感觉补全我更喜欢irony-mode,当然rtags还提供了很好的跳转。通常我用irony-mode + helm-gtags。因为还用gtags跳转别的语言,c++下开两个tag系统有点臃肿,原谅我强迫症了😆)

我没用过irony, 不过我以前用的是ycmd+gtags, 不知道对你是否有帮助.

从使用体验上来讲, 两者感觉各有千秋, 整体上来讲感觉cquery的特性好一些, 当然这也有可能是因为以前不喜欢折腾所以ycmd配置的不好.

个人感觉的优点:

  1. tags不需要更新了, 尤其是以前我的spacemacs , g u 一直会提示failed, 很难受.
  2. 语法解析和补全的实时刷新情况比较好. 以前用ycmd感觉有时候修改了一个地方, 在补全的时候反应没有那么快.
  3. 我的ycmd的补全对于类似函数式的宏不能正确展开到参数, 需要手打.
  4. 类似lsp-ui之类的地方, 感觉做的比较美观华丽, 尤其是peek的功能, 个人感觉实用性比较高.
  5. 还有好多我不太感冒, 但是可能其他人觉得好的地方.
  6. 待补充

个人感觉的缺点:

  1. 因为比较新, 稳定性终究还是差一些, 会存在一些bug或崩溃的情况.
  2. 不知道是什么原因, 有时候我用起来比较卡, 尤其是在更新了.cquery文件的时候. 需要重启emacs.
  3. 补全方面有时候还是感觉有些奇怪, 尤其是头文件的补全.

总体来讲个人还是喜欢cquery多一些, 入坑之后没有跳回去的打算…

2 个赞

卡有可能是bin/cquery给emacs发的消息太多了

比如:

{"jsonrpc":"2.0","method":"$cquery/progress","params":{"indexRequestCount":0,"doIdMapCount":0,"loadPreviousIndexCount":0,"onIdMappedCount":0,"onIndexedCount":0,"activeThreads":0}}

diagnostics publishSemanticHighlighting也关掉可能能快一点

语法解析和补全的实时刷新情况比较好

这个cquery在git checkout时不太好吧,需要 M-x cquery-freshen-index

补全方面有时候还是感觉有些奇怪, 尤其是头文件的补全.

Twitter上找 @scturtle

FAQ · jacobdufault/cquery Wiki · GitHub 有一些特别的 textDocument/definition 用法。

补足了一些rtags支持cquery没有的功能rtags-find-symbol-at-point和 macro replacement-list 的单层展开 (rtags 这部分代码恨恶心……所以我不想照抄) Indexing references in macro replacement-list · Issue #331 · jacobdufault/cquery · GitHub

只用补全的化 cquery 和 irony-mode 没有本质区别,并不能提供更多东西,也可能在一些地方显得卡。

1 个赞

cquery对跳转的支持怎么样,有没有计划支持到像rtags那种程度。helm-gtags这种基于基本tags的跳转,当然没有rtags基于parsing的优秀(但我就是不太爽rtags,大概命里不合😹)。

rtags程度是哪些?Emacs · jacobdufault/cquery Wiki · GitHub

textDocument/definition textDocument/references workspace/symbol

不爽rtags什么地方?find-references太卡?(rtags返回cross references有很多冗余磁盘读取操作,on-disk storage做得很差;但cquery on-disk做得很少,内存占用高很多,比如索引cquery 200+MiB,而rtags索引cquery大概只有60)

1 个赞

也不是,我还没用它做很大的代码。就是使用过程感觉有点繁琐,特别要生成那个.clang-complete文件;应该可以写个函数简化下;因为我只是配置成功rtags试了几天,没有怎么用,所以没探索它的便捷使用方法。

谢谢,看了这个介绍页后,我也就要这些基本跳转;我以为cquery也像irony只提供基本的补全和语法检查的。多谢,我去多了解了解lsp和cquery。

1 个赞

T_T賣點主要就是cross references

1 个赞