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

你不要完全抄我配置呀,按键定义就按照 Emacs 传统方式定义就好了

1 个赞

更新了,不知道是不是错觉,又流畅了 :dog:

新版只是 fork 了 corfu 代码,真正手术还没有开始,肯定是错觉哈。

1 个赞

你的 auto-import 的图标为啥那么大?

最新版本,C++ clangd输入的时候碰到以下错误

Debugger entered--Lisp error: (void-function lsp-bridge-ui--auto-tick)
  (lsp-bridge-ui--auto-tick)
  (setq lsp-bridge-last-change-tick (lsp-bridge-ui--auto-tick))
  lsp-bridge-monitor-after-change(316 317 0)
  self-insert-command(1 105)
  funcall-interactively(self-insert-command 1 105)
  call-interactively(self-insert-command nil nil)
  command-execute(self-insert-command)

重启吧,字数补丁。

重启没用,还是出先一样的错误 setq: Symbol’s function definition is void: lsp-bridge-ui–auto-tick

$ cat compile_commands.json 
[
{
  "directory": "/Users/donald/acm_note/code/cmake/demo01/cmake-build-debug",
  "command": "/usr/local/bin/g++-11   -isystem /usr/local/Cellar/gcc/11.1.0/include/c++/11.1.0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.1.sdk -mmacosx-version-min=11.6 -o CMakeFiles/main.dir/main.cpp.o -c /Users/donald/acm_note/code/cmake/demo01/main.cpp",
  "file": "/Users/donald/acm_note/code/cmake/demo01/main.cpp"
}
]

请看新版的README, 你没有加载 lsp-bridge-ui

搞定了,多谢

晚上花了几个小时读 corfu 的源代码,写了一个手动刷新 corfu 数据的函数:

(defun corfu--manual-complete ()
  (pcase (while-no-input ;; Interruptible capf query
           (run-hook-wrapped 'completion-at-point-functions #'corfu--capf-wrapper))
    (`(,fun ,beg ,end ,table . ,plist)
     (let ((completion-in-region-mode-predicate
            (lambda () (eq beg (car-safe (funcall fun)))))
           (completion-extra-properties plist))
       (setq completion-in-region--data
             (list (if (markerp beg) beg (copy-marker beg))
                   (copy-marker end t)
                   table
                   (plist-get plist :predicate)))

       ;; Refresh candidates forcibly!!!
       (pcase-let* ((`(,beg ,end ,table ,pred) completion-in-region--data)
                    (pt (- (point) beg))
                    (str (buffer-substring-no-properties beg end)))
         (corfu--update-candidates str pt table (plist-get plist :predicate)))

       (corfu--setup)
       (corfu--update)))))

这样,lsp-bridge.el 应该又可以重新支持 corfu和company了。

8 个赞

这个补丁手动刷新 corfu 的候选词数据,同时设置 :company-cache 为 t 让 company-mode 也手动刷新数据( company-mode 待验证)

所以,大家可以继续使用 corfu 或者 company了。

麻烦按照 README 切换会 corfu 吧,不好意思.

我用最新版测试了 python, golang, vue, java, 都没有问题,睡觉了。

12 个赞

别啊,我觉得用法最好统一,另外这个还继续搞吗

现在 corfu 我写了手动刷新数据,corfu 是正常的, company 从 lsp-bridge 开发团队的评估来看,company 现在还没法做手动刷新,所以目前为止大家尽量用 corfu.

没事,如果还有进一步的问题,我可以随时 fork corfu, 昨天已经有经验了,哈哈哈哈。

2 个赞

关于 Java 补全会连同包名一同补全的问题,我发现只要启用了 lsp-bridge-orderless 并且补全被匹配到了包名中的字符,就会有很大的机率会把包名也补全上屏。有一个百分百复现的方法就是使用 corfu-separator 即按 Meta-space 进行分词补全。

最新版本下,使用corfu在补全emmet时会出现这种情况 lsp-bridge-corfu-bug

第一个字符貌似丢了

company 的话可以不用 capf,直接写一个 async 的 company backend。

已经修复了,感谢反馈。

效率好高 :smile: 已解决。

昨晚写了 corfu 强制刷新函数,我估计现在即使开了 orderless 也会因为 lsp-bridge 快速刷新而没法使用。