lsp-bridge -- 速度最快的语法补全插件

不能同时用,因为每个前端都会监听 pre-command-hook 和 post-command-hook, 那会打架,只有不同 mode 可以用各自的前端。

新的前端框架出来后,我会照顾 elisp symbol、dabbrev和English word的需求的。

再说了,等大家真正体验了新的前端的速度和功能后,就不会怀恋 company/corfu 了。

6 个赞

新的补全前端流程设计,只专注UI,所有候选词搜索交给各种后端,补全逻辑完全异步化处理,脱离capf面条逻辑。

14 个赞

一山不容二虎。 哈哈哈

今天升级volar到0.35.2版本,发现补全不生效了。

查了 volar/CHANGELOG.md发现升级到0.35.0版本之后ts需要升级到4.7.

不愿意升级的可以继续使用0.34.17。

新的补全前端已经支持 LSP 和 Elisp 补全,而且可以针对 Elisp 的符号进行类型区分显示。

10 个赞

现在已经支持 LSP、Elisp和Dabbrev, 新的前端菜单主体功能都开发完成了,包括:

  1. 菜单、图标和备注
  2. 文档窗口
  3. 插入灰色预览(类似原来的 auto-complete 效果)
  4. Elisp类型图标
  5. 正则搜索…

已经基本满足平常的补全使用,今天晚上和 lsp-bridge 接口对接一下,明天看看能不能把英文补全、路径补全和融合显示默认就实现,大家开箱即用,不用折腾各种后端和混合功能。

28 个赞

大佬厉害,竟然还有灰色预览功能 :+1:

而且这个插入预览会解析LSP协议,提前让你知道要插入什么语义补全。

而不是corfu/company 先插入label,再删除label后,再在exit-function回调用插入语义补全。

新的菜单会超级流畅,并保持代码逻辑非常简单。

5 个赞

太赞了 :+1:

看起来,我要的功能都有了 :grinning_face_with_smiling_eyes:。图标也很漂亮!

非常期待,感谢 & 膜拜大佬!

图标是svg绘制的,超级对齐和美观。

1 个赞

搜索会需要orderless吗?其实我对正则搜索没什么需求,简单的substring就行。

:+1:,期待!!!

大家的语法检查都正常吗,就我的显示不出来吗

点个大赞!老实说我其实不知道为什么company的融合补全的效果会这么差。基本上同时使用多个补全后端的话、融合补全出来的结果会非常差,几乎是不可用的,基本上只能separate。而用cape的话,排在后面的补全后端的结果非常容易直接被排在前面的后端的结果直接屏蔽掉。有新的出来真的一点都不想念老的

感兴趣新的补全前端的同学可以切换到 acm 分支尝鲜 Use acm instead corfu. · manateelazycat/lsp-bridge@78d159f · GitHub

估计还有一些小bug, 新的分支配置非常简单:

(require 'yasnippet)
(require 'lsp-bridge)
(require 'lsp-bridge-jdtls)       ;; provide Java third-party library jump and -data directory support, optional

(yas-global-mode 1)
(global-lsp-bridge-mode)

corfu、corfu-doc和orderless都不再需要

11 个赞

今天给 lsp-bridge 新前端引入了一种新型的多后端混合技术。

平常我们只需要 Elisp 和 LSP 补全,针对一些脚本又希望拥有 Dabbrev 帮我们找一下别的 buffer 的内容方便我们快速补全。

但是 Dabbrev 非常耗费性能,如果实时计算就会导致补全卡手。

这个补丁的设计是,平常就使用 Elisp/LSP 这两个后端实时补全,等用户一停顿的时候再去取 Dabbrev 的补全列表,这样的好处有:

  1. 保证Elisp/LSP的补全性能,完全不卡手
  2. 避免 Dabbrev 候选词太多,干扰正常的语法补全
  3. 用户一停顿的时候,lsp-bridge就知道语法补全没法满足,立即调用 Dabbrev 去寻找替代候选词

其他的 Snippet 和路径补全也可以采用相同的技术去实现,既兼顾了语法补全性能,又支持无限可扩展的可能性。

这种巨大的灵活性源于新的前端摆脱了 capf 的限制,完全可以根据最佳的用户体验去做架构设计。

3 个赞

更新后加载,发现还需要 corfu???

配置如下

(when (or (eq system-type 'berkeley-unix) (eq system-type 'gnu/linux))
  (defvar lsp-bridge-path "/home/blove/myLinux/myApp/lsp-bridge")
  )

;;; --- posframe
(add-to-list 'load-path (concat user-emacs-directory "lisp/posframe"))
(require 'posframe)

;;; --- markdown-mode
(add-to-list 'load-path (concat user-emacs-directory "lisp/markdown-mode"))
(require 'markdown-mode)

;;; --- yasnippet
(add-to-list 'load-path (concat user-emacs-directory "lisp/yasnippet"))
(require 'yasnippet)
(yas-global-mode 1)

;;; --- lsp-bridge
(add-to-list 'load-path (expand-file-name lsp-bridge-path))
(require 'lsp-bridge)
(global-lsp-bridge-mode)

现在还在 acm 分支,没有推送 master 分支,因为还有一些小bug需要修正一下。

1 个赞