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

macOS可以用pypy3。

提个issue吧

这个补丁应该修复了。

其实 Python 3.11 已经更快了, 不用 pypy 已经非常快了, lsp-bridge 主要是靠多线程获取性能优势的, 语言本身的性能对体验影响不大。

1 个赞

不想全局开启,除了global-lsp-bridge-mode,还有什么函数可以用,加到hook里?

默认就用 global-lsp-bridge-mode, 但是你可以通过 lsp-bridge-default-mode-hooks 选项来定制那些模式开, 哪些模式不开。

(defcustom lsp-bridge-default-mode-hooks '(prog-mode))
(global-lsp-bridge-mode)

这样写配置能行吗?

自己可以用 describe-variable 来查看变量值是否生效

defcustom只有第一次会生效,对于另一个人定义的变量,你要用setq

1 个赞

(setq lsp-bridge-default-mode-hooks '(prog-mode-hook))

(global-lsp-bridge-mode)

有效

今天发现 Rust LSP Server 的bug, rust-analyzer 返回诊断的时候, 会返回两种类型的诊断, 一种是 rustc 分析的诊断, 一种是 rust-analyzer 分析的诊断, rust-analzyer分析诊断的经常误报, 比如经常遇到的 Expected semicolon 。

写了一个补丁

在lsp-bridge修复了。

1 个赞

请问,我使用lsp-bridge-find-def查找C语言函数定义的时候,不是跳转到函数的实现代码,而是跳转到头文件函数声明那。 怎么可以直接跳转到函数的实现代码那里呢?

lsp-bridge-find-impl

这个命令会跳转到 .h头文件,而不是这个头文件对应的.c文件。

难道是我用法不对? 由于不是git下载,直接下载的源码包,我设置了

(setq lsp-bridge-get-project-path-by-filepath
      (lambda (filepath)
        (save-match-data
          (and (string-match "/Users/lula/work/src/src/C/ffmpeg-1.0.10" filepath)
               (match-string 0 filepath)))))

然后打开 ffplay.c,想查看 av_log_set_flags()定义,只能跳转到 libavutil/log.h。本希望它跳转到libavutil/log.c

如果跳转了那就是clangd或者是别的lsp告诉你要跳转到那头文件。这不是lsp客户端的问题

你把compilation_commands.json弄出来了吗?

明白了。没玩过compilation_commands.json。我先研究一下。

1 个赞

lsp-bridge如果发现LSP Server返回的文档是Markdown时, 会调用 markdown-mode 去渲染, 当 markdown-mode 渲染文档或代码时, 会创建很多临时 buffer , 这些临时buffer如果匹配 lsp-bridge-default-mode-hooks 里面的 mode 类型时, 就会导致这些临时 buffer 误调用 lsp-bridge-monitor-before-changelsp-bridge-monitor-after-change函数。

这些临时的Buffer会干扰 lsp-bridge 发送错误的 textDocument/didChange 消息给 LSP Server, 从而导致几个严重的错误:

  1. 诊断误报: 即使代码是对的, LSP Server也返回诊断
  2. 代码补全: 补全偶尔会失效, 补一补的就没反应了
  3. 其他依赖光标位置的功能

今天看了一晚上日志, 终于通过补丁 When user do `delete' operation, `length' is bigger than 0, and the … · manateelazycat/lsp-bridge@e13ba84 · GitHub 修复了。

这个bug估计从 lsp-bridge 弹出API文档支持 Markdown 渲染就有了, 强烈建议大家更新到最新版。

11 个赞

整明白了。按照lsp-bridge文档,做了两件事,现在看代码非常丝滑,比source insight还要爽

1,实现一函数lsp-bridge-set-project-path,来设置lsp-bridge-get-project-path-by-filepath为当前目录

  (defun lsp-bridge-set-project-path ()
	(interactive)
	(setq lsp-bridge-get-project-path-by-filepath
		  (lambda (filepath)
			(save-match-data
			  (and (string-match default-directory filepath)
				   (match-string 0 filepath))))))

2,很多代码只是用来看的,本地无法编译,就写了个脚本造一个 compilation_commands.json,内容就是

  {
    "arguments": [
      "/usr/bin/gcc",
      "-c",
      "-Wall"
    ],
    "directory": "/Users/lula/work/src/src/C/ffmpeg-1.0.10",
    "file": "/Users/lula/work/src/src/C/ffmpeg-1.0.10/ffplay.c"
	}
1 个赞

lsp-bridge解决了补全提示,一键编译/运行、调试有什么插件推荐呢?列举几个常用语言,如c、python、shell等,特别是不和lsp-bridge冲突。

1 个赞

一键编译/运行 推荐 @xiyang 大佬开发的 maple-run

调试同求

1 个赞