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

lsp-bridge/fileaction.py at 83fb9248ff2b07e7641762ac60edf281717f583a · manateelazycat/lsp-bridge · GitHub 这里的逻辑控制是否要触发新的补全,可以加一下 print 语句来看看。

nope, what is the grammatical-edit, I never use that

输入 } 跳转的问题肯定不是 lsp-bridge 引起的,检查一下你的括号补全插件。

边写边查看API文档的功能已经实现了, 需要安装新的依赖 corfu-doc 不喜欢的同学可以通过 lsp-bridge-enable-candidate-documentation 选项关闭这个功能。

同时发现了一个 corfu-doc 的bug

4 个赞

在弹出补全时,选择列表中下拉的其中一项,按下删除键,会进行补全,其实,期望是删除输入的字符,重新找补全项。 如下:

我这边删除按键没问题,请用 emac -Q 对比测试一下,排除其他插件的影响。

还是一样。

(require 'go-mode)
(require 'yasnippet)
(require 'lsp-bridge)
(require 'lsp-bridge-icon)        ;; show icons for completion items, optional
(require 'lsp-bridge-jdtls)       ;; provide Java third-party library jump and -data directory support, optional
(require 'lsp-bridge-orderless)   ;; make lsp-bridge support fuzzy match, optional
(require 'corfu)
(require 'corfu-info)
(require 'corfu-history)
(require 'cape)
;; 默认用这三个补全后端
(add-to-list 'completion-at-point-functions #'cape-symbol)
(add-to-list 'completion-at-point-functions #'cape-file)
(add-to-list 'completion-at-point-functions #'cape-dabbrev)

(yas-global-mode t)
(corfu-history-mode t)

(global-lsp-bridge-mode)

(global-corfu-mode)


;; 融合 `lsp-bridge' `find-function' 以及 `dumb-jump' 的智能跳转
(defun lsp-bridge-jump ()
  (interactive)
  (cond
   ((eq major-mode 'emacs-lisp-mode)
    (let ((symb (function-called-at-point)))
      (when symb
        (find-function symb))))
   (lsp-bridge-mode
    (lsp-bridge-find-def))
   (t
    (require 'dumb-jump)
    (dumb-jump-go))))

(defun lsp-bridge-jump-back ()
  (interactive)
  (cond
   (lsp-bridge-mode
    (lsp-bridge-return-from-def))
   (t
    (require 'dumb-jump)
    (dumb-jump-back))))

你的删除按键帮定的什么命令?

没有绑定任何其他,就是默认的

上传一个实例文本给我? 我试了你的按键,没有重现。

目前测试,干净的环境,没加载其他任何的插件,只加载了,lsp-bridge需要的

package main

import (
	"regexp"
	"testing"
)

// TestBp ...
func TestBp(t *testing.T) {
	r := regexp.MustCompile(`^[a-z_]+[a-z0-9]+$`)
	ok := r.MatchString("wangmazi")
	if ok {
		t.Log("ok")
	} else {
		t.Error("no")
	}
	ok = r.MatchString("zhangsna123")
	if ok {
		t.Log("ok")
	} else {
		t.Error("no")
	}

}

具体复现步骤:

  1. 输入t. 弹窗
  2. 用方向键选择下拉(C-n or C-p)一样。
  3. 按键盘上的delete键(mac)

就会出现,如上描述问题。

这个文档确实重现了,我看看。

已经修复了,确实是 bug

感谢反馈! :grinning:

1 个赞

大家更新到最新版 corfu-doc 吧,补丁已经合并了。

3 个赞

lsp-bridge 现在可以在补全菜单选中的时候,动态更新候选词的 additionalTextEdits 信息。

主要的作用是, 写 vue 代码的时候,比如直接补全 ref ,在用户真正按回车之前会立刻更新 ref 的 additionalTextEdits 信息,当用户回车的时候,会自动根据 additionalTextEdits 信息自动插入 auto-import 代码。

因为默认发送 textDocumentation/completion 请求时, 候选词太多, LSP服务器没法计算所有候选词的文档和auto-import信息,通过上面这个补丁可以用户敲候选词的时候动态获取。

3 个赞

优秀!效率很赞!

用最新的LSP-Bridge 和corfu-doc 0.6.2 干净的golang环境提示以下错误信息,文档显示不出来。 测试代码参考上面 删除键补全bug代码。

gopls version golang.org/x/tools/gopls v0.8.4

[LSP-Bridge] JSON RPC method not found: "ResolveCompletionItem" not yet implemented

python没问题,应该gopls的问题,提示错误信息在补全选择时闪烁,有点晃眼。

另外,额外咨询一下,doc的显示lsp-bridge一般会被什么配置属性影响,我完整版的python不显示也不报错,愣是找不到被那个配置干扰了

你报错的时候就应该再更新一下,手速慢了, 哈哈哈哈。

:joy: 在候选快速选择的时候,minibuffer下面一直闪 :joy: :joy: :joy: :joy: :joy:

你确定更新了? gopls 现在不会报错了。