幫忙改進 C++ LSP 體驗

已经安装了高版本g++编译好了.

3.4支持c++11, c++14看来是不支持, 如果cquery没有用到c++14, 可以把这个要求降低一点, 这样兼容性更好一点.

用了几次, 符号提示和跳转确实很厉害, 太精确了, 速度也快, 体验很好, 在emacs上第一次有媲美IDE的体验, 之前用过gtags和rtags, gtags不准确, rtags有点卡.

目前ui上还有一些不满意的地方, 还有启动时emacs卡顿, 运行时emacs报一些错误, emacs退出时也会报错, company-lsp补全会闪烁等.

看好cquery, 希望继续完善, 早日普及.

Company-lsp补全闪烁的话更新company-mode到最新版试试?

你是说最后一个buffer关闭时 lsp-mode 报错吗

/tmp/r/hello/: lsp-rust has exited (killed)
/tmp/c/: lsp-cquery has exited (killed)

这个好像就是这样

目前ui上还有一些不满意的地方, 还有启动时emacs卡顿

感觉主要是emacs JSON反序列化性能问题

如果cquery没有用到c++14, 可以把这个要求降低一点, 这样兼容性更好一点.

generic lambda。你用clang 3.4 可以 -std=c++1y 我不想要不必要的兼容代码兼容过于古老的系统

这些都是可以通过升级clang gcc解决的

这个错误信息没法复制, 大致如下:

Error in process sentinel: lsp-cquery is not active

文件夹中搜了一下, 看到third_party中有用c++14的, 那只好升级编译器了

可能没描述清楚,我是之前在一个旧的工程里面可以正常使用cquery,在使用git pull同步了cquery并且重新编译之后,才出现了找不到头文件引用的问题。同时有一个并发的问题是,打开拥有compile_commands.json的工程时,cquery直接崩溃。

后来我回退到了2月14日的最后一个版本,功能就恢复正常了。

https://github.com/cquery-project/cquery/wiki/Debugging

你贴stack trace,贴相关的日志对开发者才有帮助。

并发的问题是,打开拥有compile_commands.json的工程时,cquery直接崩溃。

./waf configure build --variant=debug编译cquery,最好能贴--log-file=/tmp/a.log的内容

Sorry, 我看了一下这个log, 里面泄露的信息有点多, 不太方便贴出来, 十分抱歉…

我想请问这个log里面哪个关键字指明了寻找include的过程? 我试试自己能不能先分析一下. 目前就现象看, 我这的主要问题是在使用.cquery文件配置工程的时候, 找不到include的文件.

刚刚测试了一下, 发现cquery-sem-highlight-method仅仅控制emacs端是否处理收到的sem highlight信息, 而不能控制cquery是否发送该信息, 所以即使设置为nil, 依然会收到大量的sem highlight信息, 我的emacs打开了一两百个buffer, 收到的这些数据量有几十MB, 所以导致emacs卡顿很长时间.

将cquery中的EmitSemanticHighlighting注释掉, 卡顿基本消失. 应该有参数来控制cquery是否启用此功能才对, 否则打开文件太多有点吃不消.

应该是lsp-mode的问题, 发现它会多次重复kill语言服务进程.

@netjune 加了 initialization option highlight.blacklist

我遇到的也是这个问题…

好, 我试试. 谢谢

告诉那个用户,第一行指定 %clang

额, 其实在我这, 加了%clang也没有使-I./include生效 :sweat_smile:

你如果用Windows的化去看下 Issues · jacobdufault/cquery · GitHub

%clang
%cpp -std=gnu++14
-Isome_path
# don't use -I space_separated_path

你好 這真的是一個很棒的project

我是原本發出此issue的使用者 我在 .cquery 下寫入以下的內容還是沒有作用

%clang
%cpp -std=gnu++14
-I./include

目錄結構如下

test/ inlcude/test.hpp src/main.cpp .cquery

請問我該如何提拱有用的訊息給你了

感謝

Note. 我去看 .cquery_cached_index/@Users@yclin@Desktop@test/[email protected] 在 “include": [] 裡的確沒吃到 -I./include

{“last_modification_time”:1520732597,“language”:2,“import_file”:"/Users/yclin/Desktop/test/src/main.cpp",“args”:[“clang++”,"-working-directory=/Users/yclin/Desktop/test/","/Users/yclin/Desktop/test/src/main.cpp","-resource-dir=/Users/yclin/git/cquery/build/release/lib/clang+llvm-6.0.0-x86_64-apple-darwin/lib/clang/6.0.0","-Wno-unknown-warning-option","-fparse-all-comments"],“includes”:[],“dependencies”:[],“skipped_by_preprocessor”:[],“types”:[{“id”:0,“usr”:10126648560804067630,“detailed_name”:“Test1”,“short_name_offset”:0,“short_name_size”:5,“kind”:23,“hover”:"",“comments”:"",“declarations”:[],“spell”:“3:8-3:13|-1|1|2”,“extent”:“3:1-6:2|-1|1|0”,“bases”:[],“derived”:[],“types”:[],“funcs”:[],“vars”:[0,1],“instances”:[],“uses”:[]},{“id”:1,“usr”:17,“detailed_name”:"",“short_name_offset”:0,“short_name_size”:0,“kind”:0,“hover”:"",“comments”:"",“declarations”:[],“bases”:[],“derived”:[],“types”:[],“funcs”:[],“vars”:[],“instances”:[0],“uses”:[]},{“id”:2,“usr”:18,“detailed_name”:"",“short_name_offset”:0,“short_name_size”:0,“kind”:0,“hover”:"",“comments”:"",“declarations”:[],“bases”:[],“derived”:[],“types”:[],“funcs”:[],“vars”:[],“instances”:[1],“uses”:[]}],“funcs”:[{“id”:0,“usr”:7033269674615638282,“detailed_name”:“int main()”,“short_name_offset”:4,“short_name_size”:4,“kind”:12,“storage”:1,“hover”:"",“comments”:"",“declarations”:[],“spell”:“8:5-8:9|-1|1|2”,“extent”:“8:1-11:2|-1|1|0”,“bases”:[],“derived”:[],“vars”:[],“uses”:[],“callees”:[]}],“vars”:[{“id”:0,“usr”:8483996805509893175,“detailed_name”:“int Test1::_abc”,“short_name_offset”:11,“short_name_size”:4,“hover”:"",“comments”:"",“declarations”:[],“spell”:“4:7-4:11|0|2|2”,“extent”:“4:3-4:11|0|2|0”,“type”:1,“uses”:[],“kind”:8,“storage”:0},{“id”:1,“usr”:16428055204341554675,“detailed_name”:“long Test1::_Def”,“short_name_offset”:12,“short_name_size”:4,“hover”:"",“comments”:"",“declarations”:[],“spell”:“5:8-5:12|0|2|2”,“extent”:“5:3-5:12|0|2|0”,“type”:2,“uses”:[],“kind”:8,“storage”:0}]}

include/a.h

int bad;

a.cc

int main(){return bad;}

.cquery

%clang
%cpp -std=gnu++14
-Iinclude

jq . < /tmp/cquery/@tmp@c/a.cc.json

15
{
  "last_modification_time": 1520737513,
  "language": 1,
  "import_file": "/tmp/c/a.cc",
  "args": [
    "clang++",
    "-working-directory=/tmp/c",
    "-std=gnu++14",
    "-Iinclude",
    "/tmp/c/a.cc",
    "-resource-dir=/home/maskray/Dev/Util/cquery/build/debug/lib/clang+llvm-6.0.0-x86_64-linux-gnu-ubuntu-14.04/lib/clang/6.0.0",
    "-Wno-unknown-warning-option",
    "-fparse-all-comments"
  ],
  "includes": [
    {
      "line": 0,
      "resolved_path": "/tmp/c/include/a.h"
    }
  ],
  "dependencies": [
    "/tmp/c/include/a.h"
  ],
  ...

似乎是被人改壞了。。

@deep @yclin 抱歉,是個.cquery解析bug,已修復

ok 一起讓這個project 變好