cquery 补全卡顿

spacemacs

#1

请教各位,为什么我的我用spacemacs 配置cquery补全会卡顿呢,延迟比较高.但是如果我用vscode配合cquery补全速度就是瞬间补全.同一份工程.感觉跟emacs 配置有关,我该如果改配置呢,有遇到这个问题的吗


#2
company-idle-delay is a variable defined in ‘company.el’.
Its value is 0.2
Original value was 0.5

The idle delay in seconds until completion starts automatically.

You can customize this variable


#3

我把这个值设为0,但是补全还是很慢。需要等待大概1.5秒,甚至2秒。


#4

我昨天測了一下irony-server和ccls。

ccls用了一些clangd的技巧,服務端計算量小。 但irony-server延遲低,主要應該是通信傳輸數據上。 emacs JSON deserialization比較慢

irony-server 在client-side 排序 company如果啓用推薦的 (setq company-transformers nil company-lsp-cache-candidates nil),也會卡一點。


#5

貌似就是json导致的,vscode下面快的很


#6

那如何才能和vscode中一样快呢?


#7

从 27 开始, emacs 有 json 的原生实现了


#8

我现在用的就是27,也是卡得不要不要的


#9

暂时弃坑emacs,我转投vscode了。


#10

应该是cquery的锅,每次触发补全时,cquery的cpu都会高上那么一会儿


#11

不知道是什么问题。但是cquery的确会让CPU占用率飙升。

而且打开的时间长了,eldoc和xref都会出问题。感觉光标的位置捕捉错误。只能重新打开emacs。


#12

你們如果只想要補全,在乎延遲,不關心服務端fuzzy matching,請用基於libclang的 irony-mode

如果ycmd的:GoTo (單translation unit的find definition)的cross references就能滿足,不需要references,用 clangd

如果想要references,或者對clangd的記憶體佔用不滿意(clangd記憶體非常浪費),可以考慮ccls

但是在Windows、或者難以安裝GCC>7的Linux,不想要折騰編譯工具鏈的話,推薦cquery

今天給ccls實現了一個神器,index.multiVersion https://github.com/MaskRay/ccls/wiki/Initialization-options 可以檢索一個檔案多次,即使有#ifdef保護,如果被索引兩次,也能把所有信息取出來。


#13

今天在win10下,用neovim结合cquery搭建了个简单的,补全速度非常非常快,秒补全,看来速度慢也有可能是emacs的锅呀


#14

看来是emacs的lsp客户端的问题.