ccls補全函數時,除了identifier外,還會補全出(
和(可選的)snippets。函數是否帶參數,會影響補全出來的內容:
-
int bar() {}
: 補全出bar()
-
int foo(int a, int b) {}
(帶參數): 檢查 completion.completionItem.snippetSupport && client.snippetSupport
爲:
- true:
foo(${1:int a}, ${2:int b})$0
。即language client支援snippet且initialization option client.snippetSupport
允許。
- false:
foo(
https://github.com/MaskRay/ccls/issues/412 有些人似乎希望把foo(
改成foo
。
我想調查下多少人使用snippet (使用emacs-ccls的話,可以 (setq ccls-initialization-options '(:client (:snippetSupport :json-false)))
強制關閉,即使lsp-mode支援(假如安裝了yasnippets))
假如使用不支援snippet的編輯器/language client,你希望函數foo
(帶參數)以哪種方式補全出來:
假如使用不支援snippet的編輯器/language client,你希望函數bar
(無參數)以哪種方式補全出來:
关于第三个投票
请问他能检测bar的返回值吗?
如果返回值是void 的话,最后加个分号也是可行的
但是如果能让用户去配置这些的话不就更好了吗?
往更远处走一点,让用户加hook,并给予默认值也是可行的
当不支持snippets,且补全foo()
时,光标位置是foo(|)
还是foo()|
?
不满意的方法我都是加 advice,我的配置文件有好多 advice。。。
哦对,lsp只是给company一个candidate,company不用snippet的话没法移动光标?
我的都是
(with-eval-after-load "python"
謝謝投票。我決定把補全樣式設計成這樣 (Add initialization option completion.placeholder; change client.snippetSupport: false to drop ( and < by MaskRay · Pull Request #497 · MaskRay/ccls · GitHub):
- client.snippetSupport: false =>
foo
- client.snippetSupport: true
- completion.placeholder: false =>
foo($1)$0
qux<$1>()$0
- completion.placeholder: true =>
foo(${1:int a}, ${2:int b})$0
qux<${1:typename T}>()$0
無參數的bar沒有bar()
1 个赞
还是让用户可配置的好
可以提供lsp协议之外的东西
顺便问一下 如果是json的配置文件 可以加注释吗
cireu
11
JSON规范里是不允许有注释的
写配置用什么json,辣眼睛,不如用yaml/toml
cireu
13
JSON适合数据交换, 人类可读性很差,而且默认规范里连注释这种基本的东西都没有,一个workaround是
"_comment": "I have to add comment like this"
用脚本语言不是更好?
微软用的支持注释的 JSON 变体,好像叫 CSON,除多了注释外没别的功能。