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

再来打扰一下大佬:

acm的补全窗口是不是没有判定边界条件?

你的意思是意外弹出补全窗口?

不是,我的意思是补全窗口弹到屏幕外面去了

看看怎么重现?

这个没找到重现的办法,偶尔会出现

又有一个问题: 当c++文件输入

#include <vector>
using namespace std;

vec

class Solution {
public:
  int rob(vector<int>& nums) {
    if (nums.size()<=nums) {
      return 0;
    } else if (nums.size() == 1) {
      return nums[1];
    }
    int dp[nums.size()];
  }
};

时,vec呈现出来的不全内容是空白(应该是vector):

大佬有考虑支持终端环境的计划吗?心痒难耐

lsp-bridge

用上了最新的 lsp-bridge,也用了最新的 gopls。在补全 go 代码时,当补全列表弹出来后,会有些卡顿,直到出现如下提示信息后,才恢复响应,可以选择候选者:

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

可以确认最新的 gopls 支持 ResolveCompletionItem 的。

精力有限,现在没有计划。

1 个赞

这个错误是服务器返回的,看看是不是用了旧版gopls?

原来版本是好的吗?

我貌似找到重现的办法了:

当补全内容从较少内容忽然扩充时,补全窗口就会弹到emacs外去 Peek 2022-06-05 21-19

确认是最新的 gopls (0.8.4,5 月 13 发的版本)且位于 PATH 中。

那是补全label太长导致的,能给一个测试文本不?

#include <algorithm>
#include <vector>
using namespace std;

class Solution {
public:
  int rob(vector<int>& nums) {
    if (nums.size() == 0) {
      return 0;
    } else if (nums.size() == 1) {
      return nums[1];
    }
    int dp[nums.size()];
    dp[0] = nums[0];
    dp[1] = max(nums[0], nums[1]);
    for (int i = 2; i < nums.size(); ++i) {
      dp[i] = max(dp[i-1], dp[i-2] + nums[i]);
        }
  }
};

最后一个 nums[i] 中的 i

确认了,的确是 gopls 没有实现 ResolveCompletionItem。 https://github.com/golang/tools/blob/master/internal/lsp/server_gen.go#L239

修复了, 更新吧。

1 个赞

还要一个问题是补全列表显示的比较慢,大概 16s 才显示候选列表,中间有明显的暂停情况: https://imgur.com/a/MM5k67q

你打开调试日志,Emacs print 日志的时候就会慢, 你说的那个问题我一会就修复了。

lsp-bridge 探测到服务器没有 ResolveCompletionItem 能力时就不会发送 completionItem/resolve 请求,原来版本是支持的,用前端 acm 替换 corfu 的时候重构掉了。

已经修复了。