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

感谢回复,但是试了一下self-insert-command还是会闪 可能是emacs30的原因吧


试了一下emacs-28上确实popup是复用的,30上不是

啥操作系统? 啥分支?

我的也是 Emacs 30, 不闪烁啊。

Arch Linux x86_64

emacs master b950b46f514

编译选项:

Configured for 'x86_64-pc-linux-gnu'.

  Where should the build process find the source code?    .
  What compiler should emacs be built with?               gcc -g3 -O2
  Should Emacs use the GNU version of malloc?             no
    (The GNU allocators don't work with this system configuration.)
  Should Emacs use a relocating allocator for buffers?    no
  Should Emacs use mmap(2) for buffer allocation?         no
  What window system should Emacs use?                    x11
  What toolkit should Emacs use?                          LUCID
  Where do we find X Windows header files?                Standard dirs
  Where do we find X Windows libraries?                   Standard dirs
  Does Emacs use -lXaw3d?                                 no
  Does Emacs use -lXpm?                                   yes
  Does Emacs use -ljpeg?                                  yes
  Does Emacs use -ltiff?                                  yes
  Does Emacs use a gif library?                           yes -lgif
  Does Emacs use a png library?                           yes -lpng16
  Does Emacs use -lrsvg-2?                                yes
  Does Emacs use -lwebp?                                  yes
  Does Emacs use -lsqlite3?                               yes
  Does Emacs use cairo?                                   yes
  Does Emacs use -llcms2?                                 yes
  Does Emacs use imagemagick?                             no
  Does Emacs use native APIs for images?                  no
  Does Emacs support sound?                               yes
  Does Emacs use -lgpm?                                   yes
  Does Emacs use -ldbus?                                  yes
  Does Emacs use -lgconf?                                 no
  Does Emacs use GSettings?                               yes
  Does Emacs use a file notification library?             yes -lglibc (inotify)
  Does Emacs use access control lists?                    yes -lacl -lattr
  Does Emacs use -lselinux?                               no
  Does Emacs use -lgnutls?                                yes
  Does Emacs use -lxml2?                                  yes
  Does Emacs use -lfreetype?                              yes
  Does Emacs use HarfBuzz?                                yes
  Does Emacs use -lm17n-flt?                              yes
  Does Emacs use -lotf?                                   yes
  Does Emacs use -lxft?                                   no
  Does Emacs use -lsystemd?                               yes
  Does Emacs use -ljansson?                               yes
  Does Emacs use -ltree-sitter?                           yes
  Does Emacs use the GMP library?                         yes
  Does Emacs directly use zlib?                           yes
  Does Emacs have dynamic modules support?                yes
  Does Emacs use toolkit scroll bars?                     yes
  Does Emacs support Xwidgets?                            no
  Does Emacs have threading support in lisp?              yes
  Does Emacs support the portable dumper?                 yes
  Does Emacs support legacy unexec dumping?               no
  Which dumping strategy does Emacs use?                  pdumper
  Does Emacs have native lisp compiler?                   yes
  Does Emacs use version 2 of the X Input Extension?      yes
  Does Emacs generate a smaller-size Japanese dictionary? no

看起来可能像lucid导致的, 我一会再编译一个gtk的试一下


确认了是lucid的问题, 不过我需要xforward所以也不能用gtk…

xforward 为啥不能用 gtk 呀?

lucid 这些都是小众的图形库, Emacs支持不一定好。

是某 GTK bug, distro package manager 给的 emacs 会有这个 Bug

X protocol error: BadRequest (invalid request code or no such operation) on protocol request 130
When compiled with GTK, Emacs cannot recover from X disconnects.
This is a GTK bug: https://bugzilla.gnome.org/show_bug.cgi?id=85715   
For details, see etc/PROBLEMS.
Fatal error 6: Aborted

好像看到 etc/PROBLEMS 里面说用比较新的 GTK+3 和 GTK+2 好像都没这个问题, 一会确认下


自己编译的gtk3也没问题, 可能 arch 编译用的 gtk3 有点问题

请教下,lsp-bridge 会不会实时解析或搜索当前生成的文件,比如 latex 编译的 PDF?我编辑 LaTeX 文件,在 Emacs 中,预览 PDF 文件时,minibuffer 会时不时闪现如下类似编码的提示:

*Message* buffer 中会出现几千条如上的编码信息,然后,Emacs 变得很卡 ~

要把 lsp-bridge 日志发出来看一下, README中文写的有怎么开启日志。

如果卡, 一般是极端情况, Emacs接收到上千条 Elisp 对象创建请求,就会触发GC导致卡。

还是先把日志发上来看看吧。

log文件太大,我截取与之相关的开头和结尾,大佬参考下(中间就是提到的那种码):

感觉LSP Server在实时推送内容给 lsp-bridge, 而 lsp-bridge 无法处理服务器发送内容的编码, 导致 lsp-bridge 直接挂了。

可以上传最小重现文件和步骤到 github 上, 我问问 lsp-bridge 的开发者能否修复不? 我自己很少用 LaTeX。

好的,谢谢大佬 ~ 我整理下,把问题发到 GitHub 上,供你们参考。

请问一下,多server模式是不是并不支持多个server同时提供诊断信息?

有这个疑问的起因是,我在尝试新的pyright_ruff的组合,但是发现ruff现在似乎还有很多报错没有实现,导致很多语法错误之类的报告不出来。然后我尝试修改json的配置把pyright和ruff都加到诊断里面,但是似乎只有一个能生效。

所以想确认下是不是本身就不支持,而不是我配置的问题。倒不是想要求一定要实现这个feature,我理解按lsp-bridge设计的初衷这种纯诊断用的linter完全可以都放到flymake之类里插件里面处理,所以如果确认不支持的话我就直接尝试用单pyright lsp+flymake就可以了。

支持多个同时返回,但是pyright_background_anaysic 本身有bug,后台分析时,pyright不返回诊断信息

诶,但是我试了pyright_ruff(原先那个不是background的),虽然两个源都会触发诊断返回但是不会同时显示,而且现象有点古怪。我在github上发了个issue #538,有具体描述和重现的文件和log。

早上起来看了一下, 确实有这个问题, 因为之前加入多服务器支持的时候, 诊断渲染的逻辑依然是单服务器的逻辑, 也就会发生你说的, 后面一个服务器返回的诊断信息会覆盖前面一个服务器返回的诊断信息。

这个补丁已经在 FileAction 中修改了诊断属性的类型, 从列表改成字典, 这样多服务器返回诊断信息时, 会先按照 LSP Server Name 存储后, 再汇总发给 Emacs 进行渲染。

我测试了一下, 没有问题, 以下是测试日志

((:range (:start (:line 3 :character 4) :end (:line 3 :character 7)) :message Undefined name `bar` :severity 2 :code F821 :source Ruff :server-name ruff) (:range (:start (:line 3 :character 9) :end (:line 3 :character 13)) :message Undefined name `bar2` :severity 2 :code F821 :source Ruff :server-name ruff) 

(:range (:start (:line 3 :character 4) :end (:line 3 :character 7)) :message "bar" is not defined :severity 1 :code reportUndefinedVariable :source Pyright :codeDescription (:href https://github.com/microsoft/pyright/blob/main/docs/configuration.md) :server-name pyright) (:range (:start (:line 3 :character 9) :end (:line 3 :character 13)) :message Expected 1 positional argument :severity 1 :code reportGeneralTypeIssues :source Pyright :codeDescription (:href https://github.com/microsoft/pyright/blob/main/docs/configuration.md) :server-name pyright) (:range (:start (:line 3 :character 9) :end (:line 3 :character 13)) :message "bar2" is not defined :severity 1 :code reportUndefinedVariable :source Pyright :codeDescription (:href https://github.com/microsoft/pyright/blob/main/docs/configuration.md) :server-name pyright))

升级最新版应该就可以支持多服务器诊断了, 不需要 flymake/flycheck, 感谢反馈。

:smile:太速度了,辛苦了~!

1 个赞

懒猫大神,报一个 acm-citre-backend 的 bug。

当前 acm-citre-backend 从闭包中取出 cands 作为补全选项。但是如果 byte-comp citre 之后,返回的闭包格式有变化,导致匹配失败,会返回 nil。 elisp Closures 文档的最后一段,建议不要依赖 closure objects 的格式。

修改后,直接调用 citre 的接口获得 cands,避免依赖闭包的格式。

感谢补丁, 我平常用 citre 非常少, 已经合并了。

大佬速度。大部分场景下用 lsp 和 tabnine 就足够了。但单位有的 c 项目本地无法编译,拿不到compile_commands.json,这种场景下用一用 citre 后端。

1 个赞

lsp-bridge 更新了下 icon 显示变正常了 ~

原来不正常吗? :joy: