你要自己实验哈, 建议参考一下 VSCode 是怎么写的, 如果 lsp server 没有什么额外参数, 这样写是可以的。
建议json改成 racket.json 的名字,写完 json 只是第一步, 还要按照上面的连接, 把 racket-mode 和 “racket” 绑定, 重启Emacs就可以测试了。
按照我上面的连接一步一步的来吧, 依葫芦画瓢很快就可以做好。
你要自己实验哈, 建议参考一下 VSCode 是怎么写的, 如果 lsp server 没有什么额外参数, 这样写是可以的。
建议json改成 racket.json 的名字,写完 json 只是第一步, 还要按照上面的连接, 把 racket-mode 和 “racket” 绑定, 重启Emacs就可以测试了。
按照我上面的连接一步一步的来吧, 依葫芦画瓢很快就可以做好。
1.将racket-langserver.json更改如下
{
"name": "racket-langserver",
"languageId": "racket",
"command": [
"racket",
"--lib",
"racket-langserver"
],
"settings": {}
}
2.在lsp-bridge.el的lsp-bridge-single-lang-server-mode-list 下添加 (racket-mode . “racket-langserver”) 经过上面的两步设置后在racket-mode 下实现了补全,看是否考虑更新到lsp-bridge 下一版本中以支持racket?
你可以自己推补丁,让楼主合并
直接发补丁吧,谢谢
社区开发者增加了对 Org roam 的补全后端, 欢迎大家试用反馈。
代码水平有限,如有问题或更好的解决方案,还请各位指出。
目前比较影响使用体验的是含有空格的字符串。一个是在输入空格后,补全菜单会关闭,可能是因为大部分补全都不会包含空格,所以设计上 acm 会在空格后关闭?另一个问题是一个含有空格的候选项,如foo bar
,以空格为分界,除了最后一个(bar)以外必须完全匹配(大小写不敏感),即 fo ba
不会出现该候选项,可能和上一个问题有关,orderless 的匹配模式只运用在最后一个上。我还没有读完所有的acm代码,所以没有找到方法。
第二问题的解决方式, 可以用 acm-filter M-u 键来模糊搜索候选词
已经添加到 lsp-bridge 中, 更新即可
第一个问题, 需要检查 lsp-bridge-completion-popup-predicates 是否导致菜单无法弹出? 看看是哪个条件函数需要兼容 acm-in-roam-bracket-p ?
大致已经解决了。
第一个问题是这个predicate:
(defun lsp-bridge-not-only-blank-before-cursor ()
"Hide completion if only blank before cursor, except in roam bracket."
(or (not
(null
(split-string (buffer-substring-no-properties
(max (1- (point)) (line-beginning-position))
(point)))))
;; Keep completion after space in Org roam bracket.
(acm-in-roam-bracket-p)))
这样实现有没有问题?我需不需要把 acm-in-roam-bracket-p
移到lsp-bridge.el
中,这样如果有人不需要org-roam
的后端删掉了这个文件,也可以正常使用。
第二个问题改成 orderless 就行了:
(setq acm-candidate-match-function 'orderless-flex)
第一个补丁我已经合并到主分支了。
感谢 @kongds 大佬的帮助, 今天最新版修复了 lsp-bridge 无法在 org src block 区域手动补全的bug, 用 lsp-bridge 手动挡的用户可以更新到最新版。
之前 orderless
更新了,可以搜索 annotation,比如在 describe-variable
的时候通过变量的值筛选候选项。
但是我在更新了 orderless
后,无法在 (setq acm-candidate-match-function 'orderless-flex)
时
补全 yasnippet 后端,默认的 regexp-quote
可以。
我尝试 bisect 了一下,应该是 orderless
的 这个 commit 引起的。
因为 backtrace 报错信息太长了,所以我提交了一个 issue
应该给orderless发issue呀,为什么要给被破坏兼容性的lsp-bridge发issue呀?
感谢大佬加了个hook!我也糊了一个flycheck的前端。放在这里给有需要的道友吧。这个绕开了我在这里提到的diagnostics的列表不会自动更新的问题,顺带让modeline上可以显示error的数量了。
为什么不修lsp-bridge呢,因为我在100行内修不好啊(逃
orderless
的更新使部分函数返回 rx
表达式,我在 acm
相关函数中分别处理了字符串和 `rx。acm
中使用的部分函数为内部函数,所以并不视为一个重大的破坏性改变。acm
的相关函数同时处理字符串和 rx
。我对 acm-candidate-match-function
的所有变量进行了简单的测试,并没有发现明显问题,同时禁用 orderless
不影响默认值 regexp-quote
。我认为这个改动是合理的,也许之后考虑改用 orderless-compile
?
希望有使用最新的 orderless
和 lsp-bridge
的人可以提供反馈。
可以直接提交一个 lsp-bridge-flycheck.el 文件哈, 虽然我觉得LSP场景下没有必要用 flycheck/flymake, 但是我乐于合并, 以方便那些喜欢 flycheck/flymake 的同学。
感谢耐心沟通, 虽然 orderless 新版引入新的 rx sexp 结构, 但是兼容 orderless 的补丁看起来并不复杂, 我已经合并了兼容补丁。
再次感谢耐心的沟通, 向你学习。
过奖了,我也是为自己的需求去提交补丁的,这一切的前提是这个开放好用的包,要感谢你对 Emacs 作出的贡献。在 Emacs 方面,我还有许多要学习的地方。
最近我打算在空闲时间看看其他编辑器的补全设计,看看有什么值得借鉴的地方,比如,我觉得目前的图标设计并不是那么直观,想在这方面进行改进,希望能够从中学习到新的东西。
今天修复了 Rust Inlay Hint 有时候不会渲染的问题, 主要是 InlayHint 请求才发送以后, 如果这时候发送 didChange 请求就会导致 rust lsp server 报错。
上面这个补丁的作用是探测到这种错误后, 重新尝试再发送一次 InlayHint