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

:smile:,好的 ,感谢感谢,调试好痛苦!起码有点眉目了!

我看了一下, 主要是 dwm.c 这个文件手动格式化的时候就会触发几千行的缩进变化, 一瞬间修改几千行会触发Emacs进行GC操作, 导致Emacs卡顿。

Elisp真的是一个非常脆弱的语言。

2 个赞

抱歉,刚刚看到消息

我确实换了较旧的 clojure-lsp, 貌似 clojure-lsp-native 还没有提供格式化功能,所以用 clojure-lsp 也就接受了。

这个补丁在格式化之前, 临时把 inhibit-modification-hooks 设置成 t, 避免一瞬间格式化上千行引起Emacs的GC介入。

同时这个补丁避免每修改一行就像 LSP 服务器发送一个 textDocument/didChange 提醒, 而是全部格式化完成以后, 保存文件后, 让服务器重新读取新的文件, 以此来避免格式化几千行的瞬间发送几千个请求给 LSP Server。

我测试的 dwm.c , 不再会因为几千行一瞬间修改卡顿了。

1 个赞

换成旧的 clojure-lsp , 补全就没问题是吧?

是的

旧的 clojure-lsp 补全正常,

新的 clojure-lsp-native, 补全 keyword 会添加额外的 :,例如 :ab| 触发 :abc 补全得到的是 ::abc,怀疑是补全时删除了 ab 没有删除 :,所以才有上述对 acm-backend-lsp.el 的修改尝试

那是新的还是旧的功能全呢?

clojure-lsp 官方确实建议使用 clojure-lsp-native , lsp-mode 使用的也是 clojure-lsp-native

又确认了下 clojure-lsp-native 应该支持 format,但是前几天用的时候提示没有 format 功能,现在想想会不会是接口有变化,所以 lsp-bridge 没有调用到?

要看一看 clojure-lsp-native 初始化的参数是怎么返回的。

这个补丁已经修复了, 可以直接安装 clojure-lsp-native 了。

1 个赞

最新的 clojure-lsp-native 支持 format, lsp-bridge也可以正常调用 format 功能。

1 个赞

太快了吧 :+1:

已经标注最低Emacs 28, 感谢建议。

安装 clojure-lsp-native 花了一点时间, 日志打印出来后原因很快就找到了。

今天研究了一下 volar , 删除边界要更小心处理:

  1. 删除开始的位置要在 菜单弹出位置range-start 之间找更小的那个值
  2. 删除末尾的位置要在 当前光标位置range-end 之间找更大的那个值

只有把这四种情况都考虑进去后, volar/vue 的 插入替换 操作才能完全正确, vue补全时偶尔会发生插入额外字符的同学可以更新一下。

volar 真的是 LSP 协议测试最佳服务器。

1 个赞

卧槽,上次我提的问题被这个更新解决了,我希望您还是创建一个测试组,让测试组的人来测试各位反馈的问题吧

你负责给测试组的人发工资吗?

13 个赞

为啥你说话总是命令口吻?另外建议说话少一些 不那么文明的用词,比如 “卧槽”。

11 个赞

我希望您还是自己深入学习一下emacs-lisp和python,然后调试自己和其他人遇到的问题吧。

3 个赞

有些人总是认为其他人应该无偿的为他服务,把自己伸手动嘴和别人付出当做理所当然。

不用理吧,我已经把他屏蔽了,多次不尊重人的沟通,我不想和他沟通了。

论坛就是大家相互交流学习的地方,他却把我当做免费开发,眼不见心不烦。

16 个赞