如果lsp-cquery不支持同时多个workspace, 最好是初始化(启动language server)的时候提示用户选择workspace目录, 之后就固定用这个目录.
如果lsp-cquery支持同时多个workspace, 这个有点混乱, 一个文件可能属于多个workspace,只能让用户手工选择, 或者让用户提供规则或优先级顺序.
自动检测结果最好提示一下用户, 让用户知道, 否则很疑惑. 我是把那个get-root的函数改掉了.
如果lsp-cquery不支持同时多个workspace, 最好是初始化(启动language server)的时候提示用户选择workspace目录, 之后就固定用这个目录.
如果lsp-cquery支持同时多个workspace, 这个有点混乱, 一个文件可能属于多个workspace,只能让用户手工选择, 或者让用户提供规则或优先级顺序.
自动检测结果最好提示一下用户, 让用户知道, 否则很疑惑. 我是把那个get-root的函数改掉了.
有compile_commands.json的时候, cquery是不是只索引compile_commands.json里面包含的文件? 会索引其他文件吗?
另外就是,python有一个package auto-virtualenv,则是使用project root下一个文件作为标识
C/C++ 把包扔给系统管了,然后编译的时候各种参数、环境变量。
我觉得就识别有.cquery
或compile_commands.json
的目录就行了,这个是cquery
自身可控的,就算compile_commands.json
是构建工具生成的,不完全由cquery
控制,但是cmake
不是也可以include
别的目录吗,项目根目录一般也把别的目录包含进来了。
搜了一下,还是有不少 c/c++ 包管理器的:
为什么没有一个成为主流呢,应该是难以达成共识,就像 Linux 发行版一样。
一开始就把系统软件包跟开发混为一用了,也没有 global / local 之分。版本依赖怎么办,就各种环境变量 flag 来处理,然后有了各种复杂无比的构建工具 make/cmake/waf/ninja… 一代代开发者都是这么熬过来的,然后还有点上瘾了。
这个我感觉可能性不大
cquery 支持 hierarchical .cquery
,子目录 .cquery
文件影响所在子树的编译选项
compile_commands.json
可以在 project/build/compile_commands.json
并且旁边有生成文件 project/build/generated.cc
等几个月等这个被作者捡起来吧 T_T
还有一个问题,好像company-lsp
在匹配失败的时候也会强制换成候选的第一个,怎么让它不强制替换成第一个?
另外一个想请教的事情是,我好像设置过不补全参数表的,但我现在想补全参数表,但没找到在哪里了。。。隐约记得原来用company-clang
的时候这么设置过。。。现在的表现是有参数的话,补全选中只有函数名字,没有参数的话,选中后会有括号。
这应该是之前的一个bug,更新之后还有这个问题吗? 如果有欢迎提issue。
company-lsp-enable-snippet
?
第一个更新后没有了,第二个的话,company-lsp-enable-snippet
我没有改动它,就是默认的on
。
你的配置是怎样的?建议强在调用lsp-xxx-enable
之前先(require 'company-lsp)
,要不然会出现不能开启snippet的情况
这一楼.emacs
中改动了两处:
第一处,my//enable-cquery-if-compile-commands-json
改成了:
(defun my//enable-cquery-if-compile-commands-json ()
(when
(or (locate-dominating-file default-directory "compile_commands.json")
(locate-dominating-file default-directory ".cquery"))
(require 'company-lsp)
(lsp-cquery-enable)))
第二处,company-backends
改成了:
(company-c-headers company-lsp company-bbdb company-nxml company-css company-cmake company-capf company-files
(company-dabbrev-code company-keywords)
company-oddmuse company-dabbrev)
https://github.com/emacs-lsp/lsp-mode/issues/293#issuecomment-370311956修好就不需要這個my//enable-cquery-if-compile-commands-json
wrapper了
无法补全参数不像是由于配置错误造成的。开启lsp-print-io
后尝试补全,*Messages*
里的内容是什么?
开启方法:M-x set-variable <RET> lsp-print-io <RET> t
顺便给一下company-diag
的输出呗。
struct foo_foo {
int bar_bar;
int bar(int);
};
void foo()
{
foo_foo foo000;
foo000.bar_bar;
foo000.bar//choose bar here
}
lsp-print-io
:
Output from language server: {"jsonrpc":"2.0","method":"textDocument/publishDiagnostics","params":{"uri":"file:///home/mark/test/etest/test.cc","diagnostics":[{"range":{"start":{"line":9,"character":14},"end":{"line":9,"character":14}},"severity":1,"source":"cquery","message":"expected ';' after expression"},{"range":{"start":{"line":9,"character":4},"end":{"line":9,"character":14}},"severity":1,"source":"cquery","message":"reference to non-static member function must be called"},{"range":{"start":{"line":8,"character":4},"end":{"line":8,"character":18}},"severity":2,"source":"cquery","message":"expression result unused [-Wunused-value]"}]}}
company-diag
:
company-call-backend-raw: Company: backend company-lsp error "Wrong type argument: listp, t" with args (candidates (bar . t))
有没有带 textDocument/complete
的请求信息呢?尝试补全一个函数应该会产生若干条这样的请求
另外把所有的buffer都关掉再打开一个文件,看看能不能补全参数?
有人用lsp php的么?感觉怎么样?