emacs-cquery 成立,呼籲spacemacs支持LSP、集成cquery到c-c++ layer

作者想要給Linux用zip…我想.tar.xz

嗯,好的

好像是 github releases source 塞哪些東西沒法控制

github 不支持就没辙了。

我写了一段简单的 homebrew formula,目前只编译 master 版。release 版的 third_party 还没想好怎么处理,理清楚了再加入。

以后有条件可以提供二进制下载,虽然 cquery 编译已经够简单了,但毕竟还是需要花费一些时间的。

今天更新了之后,一样的错。

我在看 string_view.hpp 时 遇到的问题:

FixIt: ... 这个 lsp-ui-sideline-code-action 总是比可视的行多一个字符,导致要换行

我不知道这是 lsp-ui 的问题,还是 cquery 的问题,还是其他什么的


还有,我觉得错误就是这个, std → stx

这应该是 lsp-ui 的问题,这里显示的是 flycheck 的信息,我之前提过一个类似的 issue。

默认checker太烦了。我不得已 (setq-default flycheck-disabled-checkers '(c/c++-clang c/c++-gcc)) ;; in flycheck.el 了,

lsp-flycheck 太旧

      ;; Disable lsp-flycheck.el in favor of lsp-ui-flycheck.el
      (setq lsp-enable-flycheck nil)

lsp-ui-flycheck 也卡 (setq lsp-ui-flycheck-enable nil)

T_T 所以我都没用

string_view 可能是Mac OS X Xcode里不用 -std=c++17 也会被其他头文件包含,已经解决了

感谢。你能把 homebrew 加到 https://github.com/cquery-project/cquery/wiki/Build

换了这种写法

#if __cplusplus >= 201703L || defined(__has_include) && __has_include(<string_view>)
#include <string_view>
#else
#define STX_NAMESPACE_NAME std
#include "string_view.hpp"
#endif

已经解决了

1 个赞

放到 wiki 没问题,我刚刚把 release 版的编译也加上了:cquery.rb

最好把编译参数也加上,但是我看[wiki/build](Home · jacobdufault/cquery Wiki · GitHub) 几组参数不好归纳:

--variant=release/debug/asan
--variant=system --use-system-clang --llvm-config=llvm-config-3.9
--variant=clang5 --bundled-clang=5.0.1

初步的想法是给 homebrew formula 加三个参数:

  1. --with-variant={variant} 选项 release/debug/asan,对应第一组
  2. --with-llvm-config=llvm-config-{ver} 展开为 --variant=system --use-system-clang --llvm-config=llvm-config-{ver} 对应第二组
  3. --with-bundled-clang={maj.min.patch} 展开为 --variant=clang{maj} --bundled-clang={maj.min.patch} 对应第三组

但是 2.3. 都必须说明将覆盖 1. 但是目前都没见过哪个 formula 把参数设置成相互排斥的,基本上都是叠加式的。

1 个赞

謝謝指出。我之前也想廢棄 --use-system-clang 的,但有人反對。我現在還是堅定按照自己想法簡化邏輯吧

  • --bundled-clang=5.0.1 是默認的,如果 ./waf configure 不帶選項則是使用 bunblded clang+llvm 5.0.1
  • 指定 --llvm-config=llvm-config 可以使用系統 clang+llvm
  • --use-system-clang 已經是廢棄選項,不起作用了

因此,--llvm-config=llvm-config 會覆蓋 --bundled-clang=5.0.1

已經git push

Environment variable CXX or --check-cxx-compiler=clang++ to choose the compiler. Usually not needed.
--variant=release: what CXXFLAGS is used to build cquery source files
--bundled-clang=5.0.1: bundled clang version
--llvm-config=llvm-config: overrides --bundle-clang. Use system clang. --clang-prefix is useful if the clang path is different from that of llvm libs (e.g. Nix)

git submodule update --init

GitHub Releases 上的 “Source code” tarball 是没法 git submodule update --init 的。

只能让他们 Home · jacobdufault/cquery Wiki · GitHub

awk -vRS='[' -F'\n' '$2{gsub("url = ","",$3); gsub("path = ","",$2); print "git clone "$3 $2}' .gitmodules

列出 git clone 命令手动执行了

楼主你好,看了你的帖子,入坑cquery,我设置了几个启动选项,但是都没有生效,你看看参数对吗?

我在看chromium网络部分的源码,compile_commands.json放在src目录,我想只索引src/net和src/base两个子目录,但是从日志来看,其他目录也被扫描。现在每次打开emacs,cquery都占用很多CPU资源,好像一直在做索引。

查找问题期间,我启用了(setq lsp-print-io t),一直报textDocument/publishDiagnostics,然后我在启动选项加了:diagnosticsOnParse :json-false,没有效果,还是一直报。

  • 请问怎样设置白名单,只索引部分目录?
  • cquery占用CPU非常多,是因为正在索引造成的吗?
    (setq cquery-extra-init-params '(:diagnosticsOnParse :json-false
                                     :index (:whitelist ("net/*" "base/*")
                                             :blacklist (".*")
                                             :logSkippedPaths t
                                             :enabled t)))

现在 config->index.whitelist config->index.blacklist 的行为是只影响启动时索引的文件,新打开的文件会 textDocument/didOpen 也会创建索引请求,不受 whitelist/blacklist 限制。net/* /base/* 可以写成 "net/" "base/",这是用 ECMAScript m.regex = std::regex( search, std::regex_constants::ECMAScript | std::regex_constants::icase | std::regex_constants::optimize // std::regex_constants::nosubs );匹配的

但是从日志来看,其他目录也被扫描。

我阅读llvm也发现这个问题。之前 scturtle 有个修改,如果文件parse失败,每次打开还会继续索引。

另外,如果你的 build 目录在项目中的化,可能受 compile_commands.json project root 判断逻辑影响 [Discussion] project root detection logic · Issue #293 · emacs-lsp/lsp-mode · GitHub

你可以在 [Discussion] `Config->index.{whitelist,blacklist}` does not affect `textDocument/didOpen` · Issue #473 · jacobdufault/cquery · GitHub 下面回复