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

我测了 clangd 没问题,但是 pyright server 好像很快就不回复消息了。我再看看。

请教一下,capf 里面,如果返回类似 [(label, kind), (label, kind)] 的数据给 Emacs, lsp-bridge-completion-items 就不是纯粹的字符串列表了, corfu 怎么知道从里面找 label ?

提了一个 pr 解决图标,check 一下呢

原来是用的 text-property 来传递图标和备注呀。 :joy:

:joy: annotation 还需要处理一下,可以参考 eglot:

       :annotation-function
       (lambda (proxy)
         (eglot--dbind ((CompletionItem) detail kind)
             (get-text-property 0 'eglot--lsp-item proxy)
           (let* ((detail (and (stringp detail)
                               (not (string= detail ""))
                               detail))
                  (annotation
                   (or detail
                       (cdr (assoc kind eglot--kind-names)))))
             (when annotation
               (concat " "
                       (propertize annotation
                                   'face 'font-lock-function-name-face))))))

或者大佬你看怎么好看怎么来吧。现在还有点小问题会挤在一起
image

挤在一起好说呀,插入点空格, 哈哈哈哈。


关闭 buffer 的时候 lsp-bridge 会有这个错,是进程已经被释放了吗?

现在是工程里面最后一个文件关闭后就退出 lsp server 进程,我嫌 lsp server 退太慢了,直接把他杀掉了, 哈哈哈哈。

你图标用的那个包呀?

坛里的这个。

@smallzhan 大佬,你这个好用,我直接集成到 lsp-bridge.el 里面,可以吗?

集成吧,没问题。 windows 下的 lsp-bridge 跑 pyright 好像有点问题, 好像是 initialize 之后就没回复了。

Cache action change_cursor, wait for file x:/WalkingPad/RPadDoctor/main.pyw to open it before executing.

--- Send request (1): initialize
{
   "jsonrpc": "2.0",
   "method": "initialize",
   "params": {
      "processId": 16996,
      "rootPath": "X:/WalkingPad/RPadDoctor",
      "clientInfo": {
         "name": "emacs",
         "version": "GNU Emacs 28.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.33, cairo version 1.17.6)\n of 2022-04-04"
      },
      "rootUri": "file:///X:/WalkingPad/RPadDoctor",
      "capabilities": {},
      "initializationOptions": {}
   },
   "id": 12452
}

--- Recv message:  window/logMessage
{
   "jsonrpc": "2.0",
   "method": "window/logMessage",
   "params": {
      "type": 3,
      "message": "Pyright language server 1.1.245 starting"
   }
}

--- Recv message:  window/logMessage
{
   "jsonrpc": "2.0",
   "method": "window/logMessage",
   "params": {
      "type": 3,
      "message": "Server root directory: c:\\Users\\smallqiang\\AppData\\Roaming\\npm\\node_modules\\pyright/dist/"
   }
}

之后就再也收不到消息了。send 倒是一直正常发。

搞定了,好看。

大佬, corfu 的字体能够定制调大一点吗?

把这行注释打开 lsp-bridge/lspserver.py at ef4dbc09fbb40295395915275d81cc960f827766 · manateelazycat/lsp-bridge · GitHub

看看是不是真的接不到消息,还是解析代码出问题了?

1 个赞

(set-face-attribute 'corfu-default nil :height 200) 类似这样?没设过不太清楚

lsp-bridge-lang-server-list 可以支持多个 mode 对应一个服务吗,比如这样

((latex-mode Tex-latex-mode texmode context-mode texinfo-mode bibtex-mode) . "texlab")

而不用写成

(latex-mode . "texlab")
(Tex-latex-mode . "texlab")
...

可以呀,只要 lsp-bridge-get-lang-server 代码要写对同时不要太耗费性能就行了。

没消息。我换了 pylsp (GitHub - python-lsp/python-lsp-server: Fork of the python-language-server project, maintained by the Spyder IDE team and the community) 是可以的,所以可能还是哪里选项的问题。

服务器 settings 参数一定要对,LSP 协议怪的很,参数不对,它不告诉你哪个参数有问题,反正就不理了。

开启了 orderless 和 corfu-history,现在 emacs 终于可以用完全不卡手的语义补全了,哈哈哈,感谢懒猫和大佬们。

corfu_

注意, orderless flex match和 api 记忆功能,太赞了!

7 个赞

(custom-set-faces '(corfu-default ((t (:height 1.3)))))

这样可以把字体调大一点,也不用改默认的颜色,我看 corfu 作者默认还做了深浅模式适配。

1 个赞