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

有看见这些

但是停下来好多次都只收到这一些

这个应该是它报的位置的代码 但是好像行号不对

正常的话 for k, _ 这边的这个_ 应该会报个警告才对

写了一个函数,绑定快捷键,用于控制 lsp-bridge-enable-candidate-doc-preview 的开关,

lsp-bridge-enable-candidate-doc-preview ;;; 设置这个变量只对 python 有效,但不会对 elisp 起作用 

corfu-doc-toggle ;;; 执行这个命令只对 elisp 起作用,不会对 python 起作用

经过测试,实现了预期功能。
请大佬看一下,帮忙修正、精简! :blush:

;;; corfu-doc
(add-to-list 'load-path (expand-file-name "lisp/blove-extra/corfu-doc" user-emacs-directory))
(setq corfu-doc-mode t)
(setq lsp-bridge-enable-candidate-doc-preview nil)

;;;
;;; lsp-bridge/toggle-doc-preview
;;;
(defun lsp-bridge/toggle-doc-preview()
  "turn on/off  corfu-doc | lsp-bridge-enable-candidate-doc-preview"
  (interactive)
  (if lsp-bridge-enable-candidate-doc-preview
	  (progn
		(setq lsp-bridge-enable-candidate-doc-preview nil)
		;; (setq corfu-doc-mode nil)
		(corfu-doc-toggle)
		(message "corfu-doc | Candidate-Doc-Show ~ OFF")
		)
	(progn
	  (setq lsp-bridge-enable-candidate-doc-preview t)
	  ;; (setq corfu-doc-mode t)
	  (corfu-doc-toggle)
	  (message "corfu-doc | Candidate-Doc-Show ~ ON")
	  )
	)
  )
(global-set-key (kbd "C-x p") 'lsp-bridge/toggle-doc-preview)

哈哈哈哈,我马上要用自己写的前端框架替换 corfu 了 (更高的性能、更少闪烁和更简单的代码)

7 个赞

哇哦~太厉害啦!!! :+1: :blush: :+1:

我还以为你不做了呢,笑

期待全新的前端框架,这样可以直接把 Corfu 给替换了 :grinning_face_with_smiling_eyes:

新的补全框架相对于 company-mode 和 corfu 主要有几点不同:

  1. 完全对接 lsp-bridge 的异步架构设计,由 lsp-bridge 来控制什么时候显示还是隐藏,相对于从 capf 那边绕一下,更加稳定
  2. 更少闪烁,现在 company/corfu 的设计都是先插入候选词以后,再由 capf :exit-function 回调函数删除以后再展开,用户就会看到非常奇怪的字符闪烁,capf对于 lsp 协议非常不友好,正确的做法是前端按照 lsp-bridge 要求,一次插入或展开候选词就不会有闪烁
  3. 像素级别对齐,company/corfu 都用 all-the-icons 来绘制,所以会导致要不是菜单大了下面和右边有空隙,要不就是菜单小了,最后一个候选词看不到, 新的补全框架用 svg 来绘制图标,除开图标像素对齐,还会一并解决菜单大小计算不准确的问题
  4. 更高性能,补全菜单支持多个后端过滤,但是前端只绘制10条,保证不管有多少候选词,补全菜单的渲染性能最好的
  5. 更少代码,逃脱 capf 的束缚,前端直接和 lsp-bridge 函数对接,更少的代码也更容易维护
11 个赞

:+1: 我看到你已经推送更新了。
现在已经可以使用了吗?

这样 posframe 这个依赖应该也可以去掉了吧?

还不能用,还有很多设计没有实现,可以用了我会和大家说的。

posframe 的依赖也是可以去掉的。

5 个赞

还是建议能复用的尽量复用,否则容易出现生态割裂,对同时使用corfu 与lsp-bridge中集成的UI的人,不太友好。 比如cape 中 补全文件名、补全symbol 的一些功能还是挺好用的,

如果能复用我肯定复用, lsp-bridge 的机制不适合 capf ,文件名和symbol的功能我会做。

如果还基于现在的逻辑做,只会bug越来越多,我的时间也有限,不是很难维护,我不会给自己找事的。

5 个赞

cape自带补全的Dabbrev还是很有用的,对于动态语言,很多时候类的属性是没办法靠lsp补全的,或者干脆就是字典里的键之类的,这种补全就得靠daabrev根据code的上下文来。

建议把补全的前端剥离出来,也方便大家给前端贡献各种各样的后端。毕竟只靠LSP的补全还是不够用。

那可以同时用吗?还是说company/corfu跟这个新框架只能同时开一个

不能同时用,因为每个前端都会监听 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 个赞