cquery 作者創建了 organization
我就開心地建立
GitHub - cquery-project/emacs-cquery: Emacs client for cquery, a low-latency language server supporting multi-million line C++ code-bases 了~從 cquery 裏把 emacs/cquery.el 抽出來
% cd cquery
% git filter-branch --prune-empty --subdirectory-filter emacs -- --all
# .git 依然很大,怎麼縮小呢
LICENSE 這件事很棘手,大部分代碼是topisani寫的,他想用MIT (應該是指 MIT Expat license 吧)。等到他加了LICENSE,才能扔到 Melpa 去
呼籲 spacemacs 社區支持 LSP、集成cquery到c-c++ layer 的提案 Add ccls/cquery (language server) to c-c++ layer · Issue #10134 · syl20bnr/spacemacs · GitHub
希望 lsp-mode lsp-ui 能進 spacemacs。spacemacs 最近有些改進 c-c++ layer 的行動,syl20bnr 弄的 c-c+±enable-rtags-support 把大家弄壞了。感覺得快點發 issue 引起他們對 LSP 的重視
3 个赞
M-x checkdoc 好煩啊……怎麼辦
% du -sh .vscode/cquery_cached_index
96M .vscode/cquery_cached_index
ray @ hacking >>= ~/Dev/Bin/radare2
% du -sh ~/.cache/rtags/_home_ray_Dev_Bin_radare2_
600M /home/ray/.cache/rtags/_home_ray_Dev_Bin_radare2_
不用跑到项目目录打tag这点就比其他的工具好了,先观望一下,等进MELPA再装,不过这个clang resource directory
指的什么?就是clang执行文件之类的吗?
编译了一下cquery, 依赖的东西有点多, rapidjson, loguru, sparsepp等, 有编译好的最好
這些是 clang resource directory 裏的東西,包括重要的 stddef.h stdint.h 等。可以當作 -internal-system 頭文件。
resource dir 是自動檢測的,不需要設置 cquery-resource-dir
% tree
.
├── asan_blacklist.txt
├── cfi_blacklist.txt
├── dfsan_abilist.txt
├── include
│ ├── adxintrin.h
│ ├── altivec.h
│ ├── ammintrin.h
│ ├── arm_acle.h
│ ├── armintr.h
│ ├── arm_neon.h
│ ├── avx2intrin.h
│ ├── avx512bwintrin.h
│ ├── avx512cdintrin.h
│ ├── avx512dqintrin.h
│ ├── avx512erintrin.h
│ ├── avx512fintrin.h
│ ├── avx512ifmaintrin.h
│ ├── avx512ifmavlintrin.h
│ ├── avx512pfintrin.h
│ ├── avx512vbmiintrin.h
│ ├── avx512vbmivlintrin.h
│ ├── avx512vlbwintrin.h
│ ├── avx512vlcdintrin.h
│ ├── avx512vldqintrin.h
│ ├── avx512vlintrin.h
│ ├── avx512vpopcntdqintrin.h
│ ├── avxintrin.h
│ ├── bmi2intrin.h
│ ├── bmiintrin.h
│ ├── __clang_cuda_builtin_vars.h
没用过lsp-mode
,按着wiki的1.
、2.
、3.
、4.
、5.
步安装了lsp-mode
和cquery
,设置了cquery-executable
和.cquery
,然后开了lsp-cquery-mode
。
但是在M-x lsp-capabilities
说这个buffer没有关联lsp,还需要设置什么吗?
解决了
整理了一下.emacs
。。。
不过我用了下面这个后还要手动开一次
(defun my//enable-cquery-if-compile-commands-json ()
(when
(or (locate-dominating-file default-directory "compile_commands.json")
(locate-dominating-file default-directory ".cquery"))
(lsp-cquery-enable)))
(my//enable-cquery-if-compile-commands-json)
今天试了一下 pr 中的 lsp layer 和 cquery layer 的代码,但是发现有一下错误
File mode specification error: (file-error Writing to process Bad file descriptor lsp-cquery)
Error running timer ‘lsp-ui-sideline--run’: (wrong-type-argument hash-table-p nil)
为了不拖慢你的 pr 成功合并时间,我就不在 pr 下讨论了
详情
system info
System Info
- OS: darwin
- Emacs: 26.0.91
- Spacemacs: 0.300.0
- Graphic display: t
- Distribution: memacs
- Editing style: hybrid
- Completion: ivy
- Layers:
((auto-completion :variables auto-completion-enable-sort-by-usage t auto-completion-return-key-behavior 'complete auto-completion-tab-key-behavior 'complete auto-completion-enable-snippets-in-popup t auto-completion-idle-delay 0.6 auto-completion-private-snippets-directory "~/.emacs.d/snippets/")
git
(syntax-checking :variables syntax-checking-enable-by-default nil)
markdown protobuf docker
(ranger :variables ranger-show-preview t)
(org :variables org-startup-indented t org-enable-github-support t)
lsp lsp-python cquery emacs-lisp html
(latex :variables latex-build-command "LatexMk" latex-enable-folding t)
shell-scripts
(python :variables python-enable-yapf-format-on-save t python-test-runner 'pytest)
javascript
(c-c++ :variables c-c++-enable-clang-support t)
sql yaml
(go :variables gofmt-command "goimports")
mp-org mp-hacking)
- System configuration features: JPEG RSVG IMAGEMAGICK NOTIFY ACL GNUTLS LIBXML2 ZLIB TOOLKIT_SCROLL_BARS NS MODULES LCMS2
memacs 即 spacemacs-base
Inited
- 已编译安装 cquery
- 已设置正确的
cquery-executable
- 在一个c的项目目录下创建
.cquery
:
# Driver
gcc
# Language
-xc
.cquery
为空文件时, 同样具有这个错误。
exclusion
我使用 lsp layer 和 lsp-python layer 时能够如期运行,所以我觉得问题不在 lsp layer
error: (file-error Writing to process Bad file descriptor lsp-cquery)
應該是 cquery-executable 進程退出了
pgrep -af cquery
(setq cquery-extra-args '("--log-file=/tmp/cq.log"))
看 /tmp/cq.log
我发现问题所在了…
我这个版本的 cquery 需要 --language-server
参数启动。
而 cquery 包中运行 cquery 的方式是 (,cquery-executable ,@cquery-extra-args)
, 这个 cquery-extra-args
默认为 nil。
所以加一个 --language-server
进去就对了 。
我不知道将来 cquery 包会不会默认添加这种参数。
你用的是 Releases · jacobdufault/cquery · GitHub 预编译版本吗?我最近把 --language-server
删除了,也从 cquery.el 中删除了
我用的是 2018.1.23 的 releases 版本, master 分支的版本我编译失败,有以下错误
顺便提一下, release 版本的 Source Code 竟然没有把相应的 submodule 包含进去,导致只能手动根据 .gitmodules
克隆第三方包。
没有了 submodules, 打包好的 releases 源码如何获取 third_party?
.gitmodules 文件果然还在,但是没有锁定版本,有可能哪一天就编不过了 @MaskRay
你能調研下 std::string_view(detailed_name.c_str() + short_name_offset, short_name_size);
爲什麼編譯失敗嗎?
這個 third_party/string_view.hpp
是給C++11的polyfill,隨便找的,不一定好用。
releases/ 源碼包是原作者弄的……我可以去提醒一下
release 的时候可以把当前的 third_party 一起打包,就不需要维护了。
要不然过一段时间,想要编译某个版本的 release,而 third_party 最新版有可能做了比较大的变更,导致编译失败。
有沒有人感興趣把 Make lsp-ui-imenu hierarchical · Issue #73 · emacs-lsp/lsp-ui · GitHub 做出來?任意的 symbol hierarchy
- 遞歸顯示 struct/class 的成員
- 顯示 call tree
- 顯示繼承樹(DAG)
T_T