ccls头文件补全

我直接用brew install cquery的 没有自己编译

你貼的很多東西是冗餘的,而有些我問的問題你又沒有回覆。github issues和這裏,樓層多了之後閱讀很困難的。你可以多用編輯功能把資訊整理好,而不是反覆回覆佔用多個樓層。

346:CMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1

像這個是完全無用的

你的C header截圖完全可以編輯到一樓

company-backends: (company-lsp)沒有必要反覆貼。

尝试过brew install --HEAD ccls

我懷疑和xcode內置clang+llvm版本有關。見ccls#191

和自己编译的ccls都有同样问题

你用的cmake命令呢?

實話,你這個問題是有價值的,代表一類Mac OS X xcode clang+llvm的配置問題(#if LLVM_VERSION_MAJOR < 8)。但你提問的方式讓我很不舒服。像擠牙膏一樣問一點答一點不完全的

4 个赞

我发现一个问题,用company-lsp头文件补全的时候,如果是在#include < 后面做补全就没有问题,但是在#include “后面补全就不行了。

试来试去,我最后发现是因为company-lsp这个函数里面调用company-in-string-or-comment的原因,也就是说,company-lsp把#include “当做了字符串所以不补全了。

不知道你们有没有遇到过这个问题?

抱歉,我只是想当然的写了些自己的问题,对于其他没有考虑很多,对于问题的组织我会多注意。由于不知道需要哪些信息,也不确定哪些信息有用,所以多贴了一些,还请谅解。

cmake的命令: cmake -H. -BRelease -DCMAKE_BUILD_TYPE=Release cmake --build Release

其实有时候真不是我们想乱贴。。是不知道该提供哪些。。:joy:

你还不会是打成cquary了吧

人家叫cquery

我也有这个问题,include " 可以手动调用 company-files 补全

你注意讀我的回覆,有用的方法都在裏面。

clang++ -fsyntax-only -v -xc++ /dev/null -stdlib=libc++(clang++替換成CMAKE_CXX_COMPILER)輸出的#include <...> search starts here:部分就是include_complete.cc (ccls #if LLVM_VERSION_MAJOR < 8和cquery用的header completion backend)。

clang++所在的bin和include並置,而ccls executable可能在不同位置,因此有-ccc-install-dir的差異。這些我都提到過,但你的回覆就不像是真的仔細研究過裏面差別、調試過project.cc include_complete.cc後才給出的。

LLVM_VERSION_MAJOR你也沒給。當然你可能用cquery了,其實挺好的,我無所謂的。

3 个赞

我用的是company-c-heads。其实也可以把company-lsp里面company-in-string-or-comment这句注释掉。

你好,如果我没有自己先排查问题,就不会在ccls的wiki和issue里面看了两三天, 尝试了各种不同的方法来解决问题后才在论坛里提问题,在确认确实有问题后(他人可以复现)才到github去提issue。

你之前的指出我回答和提问的一些缺点,我也尽量去改正。这里你提到我没有给LLVM_VERSION_MAJOR,但其实在你的这个回答之前很长时间我已经在issue中给出了,这里可以引用你的原话"你注意讀我的回覆"。这种方式好吗?为何我们非要要求对方从自己的字里行间去揣摩猜测,为何不直接明了的说出来呢?

由于我最近才学习c++,所以无法做到像你一样清楚clang,并调试ccls,但我能做的都尽量提供出来,希望能有有用的信息,如果我可以或许就不会在这里提问题,而是自己已经解决,直接提pull request了。但每个人都有自己不擅长的一面,就像你不知道大小雪崩定式的变化,不是吗?所以大家才在开源社区里面互相帮助,互相贡献。

希望我们能专注到解决问题上来,而不是对提问者进行挖苦和指责。我提出问题来是希望大家讨论关注并解决问题,如果你无法定位和解决问题,可以不回答,让可以复现和解决问题的人来回答就好。

还有就是你说话的方式也让别人很不舒服,你没有察觉么?

2 个赞

大雪崩定式。。。是说围棋吗? 据说这个定式变化之繁杂,定式全部走完棋盘就被占了大半了,朋友厉害啊

你说出了我的心声 !!

(帖子被作者删除,如无标记将在 24 小时后自动删除)

解決方案: https://github.com/MaskRay/ccls/issues/191#issuecomment-453809905 Build · MaskRay/ccls Wiki · GitHub

To make header completion work with clang < 8 on Mac OS X, use a shell script wrapper:

#!/bin/sh
exec /path/to/ccls/Release/ccls -init='{"clang":{"extraArgs":["-isystem", "/Library/Developer/CommandLineTools/usr/include/c++/v1"]}}' "$@"
4 个赞

非常感谢您解决问题,很有效。 之前的言论有些偏激,还请谅解。

1 个赞

我也碰到这个问题,我是在wsl上的,折腾半天像std这种也无法补全, compile_commands.json也正确生成了, 可以问一下您是怎么解决的吗? compile_commands.json 不管用,还是要.ccls里添加

-isystem
[系统路径]

才行