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

好的,我去看看。

我试一试eglot,我一直用的是lsp-mode,不过依赖太多了。

import (
	"crypto/hmac"
	"crypto/sha512"
	"crypto/subtle"
	"encoding/base64"
	"errors"
	"fmt"
	"strings"
)

type Hello struct {
	Name string
	Age  int64
}

// Verify ...
func VerifyHS512(signature string, sigKey string) (payload string, err error) {
	parts := strings.Split(signature, ".")

	// 签名数据
	sign, err := base64.RawURLEncoding.DecodeString(parts[2])
	if err != nil {
		return
	}
	hmac := hmac.New(sha512.New, []byte(sigKey))
	hmac.Write([]byte(strings.Join(parts[0:2], ".")))
	if subtle.ConstantTimeCompare(hmac.Sum(nil), sign) != 1 {
		err = errors.New("签名验证失败")
		return
	}
	h := &Hello{
		Name: "",
	}

	h.Age = 12

	return parts[1], nil
}

func main() {

	SIGNINGKEY := "K-9Nwl0UdVtkHIsOlvMSnzi5RfP5981KLL8PTQ"
	ENCRYPTIONKEY := "0KVXaN-nlXay7OVI5pN0E"

	sig := "eyJhbGciOiJIUzUxMiJ9.ZXlKNmFYQWlPaUpFU"

	payload, err := VerifyHS512(sig, SIGNINGKEY)
	if err != nil {
		fmt.Println(err)
		return
	}
}

另外,那个参数类型连接在一起,又莫名其名的出现了。。 :joy:

补全除了你给出的字符规则,还有按键规则么,比如tab后才弹窗,或者.访问属性的时候才弹

今天写了一天代码,实际使用下来,比如在浏览其他代码块时,莫名其妙的给补全成了其他东西。。干扰严重体验不佳

emacs -Q对比测试一下,默认肯定是不会有这个问题的,要不我怎么写代码?

看看和哪个插件在冲突。

社区反馈evil会冲突

参数类型链接到一起的给个截图

不能按照点来补全,比如vue里面你打v-if也是要补全的。

耐心点,看看emacs -Q对比测试下,看看啥在干扰lsp-bridge,不要着急。

社区大佬 @theFool32 有打 evil 的补丁,Add more constraints for completion popup by theFool32 · Pull Request #141 · manateelazycat/lsp-bridge · GitHub

试一下两个方案:

方案一:

(add-to-list 'lsp-bridge-enable-popup-predicates
                        '((lambda ()
                            (and
                            (< corfu--index 0) ; not select a candidate
                            (or (not (featurep 'evil)) (evil-insert-state-p))))))

方案二

(setq corfu-on-exact-match 'quit)

我不用 evil , 看看哪个代码对你有效果?

1 个赞

方案一,少了个括号 )

lsp-bridge-corfu-bug-4 这个行为有些奇怪,当我输入到onM还能补全,输入到onMo补全就没了

也是和evil模式有关

1 个赞

为啥你们的 volar 补全比我丰富呀? 你们定制了 volar.json 还是安装方式和我不一样呀?

你们是怎么安装 volar 的?

npm i @volar/vue-language-server -g

我没有特别定制volar.json

打开日志看一下,是不是 textDocument/completion 的时候,两次返回的 isIncomplete 的值是什么?

先移除了吧,确实像 PR 另一个大佬说的,lsp-bridge 异步的方式,和 xref 不太好协作到一起

感谢大佬的速度回复 :+1:


实测,方案一 启动时出现错误



方案二,解决了 python 代码补全与 evil的冲突,不会再多添加下划线 _ 了。

但是,对于 clangd 补全头文件,我这边还是会多添加一个 >

方案一需要你更新最新版

你说的多> 怎么感觉像你自己配置的问题呀

好的!感谢!我再试试!

之前用 company+lsp+clangd 的时候,同样操作,循环候选时就不会多出 >
也许是我的配置与 lsp-bridge 有冲突!我再检查检查自己的配置看看! :blush:

我测试了,没有问题,你试一下

(add-to-list 'lsp-bridge-enable-popup-predicates
                        '((lambda ()
                            (and
                            (< corfu--index 0) ; not select a candidate
                            (or (not (featurep 'evil)) (evil-insert-state-p))))))

呢?

你更新一下最新版,今天提交了一个 Always delete from range/start for all languages, golang delete rang … · manateelazycat/lsp-bridge@4583530 · GitHub 补丁,不知道有没有影响?

我找到我的 rust-analyzer 为啥不能补全了,因为我的工程是软链接的,启动时候的 rootUri 正常识别到了真实链接,但是 completion 那个请求的不是真实链接,还是软链接的,rust-analyzer 没处理这个情况。

解决了,evil模式下也没问题! :smile:

今天提交了两个补丁, evil 的用户可以用一下,看看还有啥问题了吗?

1 个赞