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

打开日志看看吧,我估计是你pyright没配置好

感觉好像是/Users/apple/miniforge3/bin/python没有安装numpy这个包?

安装pyright 是只需要用pip install pyright,还是 也要安装eglot or lsp-mode with lsp-pyright? 目前我只用pip install pyright。

在 lsp-bridge.el 中:

(defcustom lsp-bridge-python-command (if (memq system-type '(cygwin windows-nt ms-dos)) "python.exe" "python3")
  "The Python interpreter used to run lsp_bridge.py."
  :type 'string)

试下 pip3 install pyright ?

也试过了,还是不能在.后出现补全。我换成pylsp 倒是可以

大佬,请教一个问题,我配置文件设置了(global-company-mode nil)不生效,全局关不了company-mode补全!

你有遇到,每次打看文件,必须手动关闭下company-mode,不然敲代码和lsb-bridge一起弹出补全框,会弹2个补全框,好蛋疼

看我的回复:你说你在配置文件里写了

(global-company-mode nil)

等同于

(global-company-mode)

所以它被调用一次,就toggle ON了,你全局打开了,自然每个文件都要手动关 company-mode 了。

正确写法是:

(global-company-mode -1)

(global-company-mode -1)我已经这样设置了,但是每打开文件都要手动执行下company-mode,不知道为啥

你是不是在其他地方还有 (global-company-mode)?

或者 Emacs 保存了你开启company的状态?

第一种情况我排查了,其他没有设置的,第二种我怎么排查,我应该如何设置

如果你打开了session和desktop,就把.emacs.d目录下的.emacs.desktop文件删掉试试?

试了,还是不行,好奇怪,我再看看吧,实在不行每次就手动关闭下company-mode= =

可不可以用 consult-ripgrep 定位下 关于 “company-mode” 的可能设置?以及其他的 package 调用的补全模式。

比如大佬的 aweshell:

这个补丁合并后, lsp-bridge对不同工程的LSP配置(比如 volar)就更灵活了, 现在支持几种方式:

  1. 通过 lsp-bridge-get-single-lang-server-by-project 或 lsp-bridge-get-multi-lang-server-by-project 统一控制所有项目的LSP配置
  2. lsp-bridge-single-lang-server-extension-list 或 lsp-bridge-multi-lang-server-extension-list 按照扩展名来加载不同的LSP配置
  3. lsp-bridge-single-lang-server-mode-list 或 lsp-bridge-multi-lang-server-mode-list 按照Emacs mode来加载不同的LSP配置
  4. 加上今天这个补丁的新策略, 按照 lsp-bridge-user-langserver-dir 或 lsp-bridge-user-multiserver-dir, 读取不同工程目录下LSP配置

新增的方式就是把 lsp-bridge 的 LSP json 配置文件放到工程目录下自定义修改就可以了, 对于 JavaScript 语言很方便。

2 个赞

这个社区补丁合并后, Python默认用 pyright_ruff 这个混合LSP服务器来服务:

{
  "completion": ["pyright"],
  "completion_item_resolve": ["pyright"],
  "diagnostics": ["ruff"],
  "code_action": ["ruff"],
  "execute_command": ["pyright", "ruff"],
  "find_define": "pyright",
  "find_implementation": "pyright",
  "find_references": "pyright",
  "formatting": "pyright",
  "hover": "pyright",
  "signature_help": "pyright",
  "prepare_rename": "pyright",
  "rename": "pyright"
}

代码诊断和代码修复用 ruff, 代码补全用 pyright, ruff是用Rust编写的, 传说性能是现有Python代码检查程序的100倍。

同时 lsp-bridge 最近提交了 Try to load single language server if not found all commands of multi… · manateelazycat/[email protected] · GitHub 补丁, 默认会用混合LSP服务器, 如果混合LSP服务器中某一个命令不存在,就会尝试fallback到单服务器。

比如, lsp-bridge默认用 pyright_ruff 这个混合LSP服务器, 如果发现用户没有安装 ruff-lsp/ruff, lsp-bridge就会自动fallback到 pyright 这个单服务器。

1 个赞

最近合并了社区开发者的几个补丁:

增加了对 Kotlin 语言的支持

增加了对 QML 的支持, 同时利用 lsp-bridge 的混合服务器能力, 让 QMLLS + JavaScript 两个LSP Server 同时提供语法补全

增加了对 Astro 的支持, 传说是一个网站构建利器

利用 lsp-bridge 的混合服务器能力, 用 ruff 来替代 pyright 等 Python LSP Server 执行代码诊断, 诊断传说最高提升 100 倍性能

目前 lsp-bridge 已经支持61 种LSP Sever, 支持9种混合服务器配置, 欢迎各位大佬继续贡献补丁和功能。

4 个赞

远程编辑设计,在现有lsp-bridge基础上,写个远程文件模块(转发text diff和保存文件)和acm lsp转发模块(用UDP传递补全信息到本地acm)就可以实现vscode一样性能的远端补全。

tramp的卡顿本质是每个字符编辑变动就用很重的方法向远端同步文件。

分享设计想法,还没有时间开发,欢迎贡献,在酒店起床想的,纸太小,见谅。

14 个赞

刚刚发现一个问题,如果lsp-bridge-user-langserver-dir获取的路径类似

~/temp/tempPython

在python端测试路径是否存在的时候就会认为路径不存在,导致无法获取到用户的lsp 配置。

这行代码判断会出现问题

一下是测试代码:

import cv2
from pathlib import Path

if __name__ == "__main__":
    test_path = Path("~/temp/testPython/")
    test2_path = Path("/home/lizqwer/temp/testPython/")

    if test_path.exists():
        print("路径存在")
    else:
        print("路径不存在")

    if test2_path.exists():
        print("路径2存在")
    else:
        print("路径2不存在")

结果

希望可以在python端修复一下这个路径问题,或者给Readme这里加上file-truename