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

emacs -Q测试一下

已经解决了,谢谢大佬

我发现lsp中两个蛮有用的功能lsp-bridge还没有,不知道是否有计划支持

  1. lsp-ivy 中 lsp-ivy-workspace-symbol 可以在项目全局精准查找类,函数等等。比在项目根目录下使用ag/rg 给出的侯选项要少不少
  2. lsp-treemacs 中 lsp-treemacs-call-hierarchy lsp-treemacs-type-hierarchy 查看调用关系和类型继承关系很方便

第一个 lsp-bridge-ref 已经做了

第二个我个人没动力,主要是没时间

似乎不太一样,lsp-bridge-ref 是查引用的,lsp-ivy-workspace-symbol 是提前不知道 symbol在哪,然后在全局范围内查找, 和ag/rg 相比,更加精准,侯选项更少 。相当于项目级别的imenu

这个是它的demo

有人知道自动保存buffer高度如何调整么! image

你说的应该是 Specification 这个协议的支持

这个功能已经实现了: Support workspace symbol protocol. · manateelazycat/lsp-bridge@42426ca · GitHub

3 个赞

第二个要想一想高效的UI, 可以采用类似 lsp-bridge-ref 的形式。

treemacs 那样的布局操作效率不高。

git rev-parse --show-toplevel git rev-parse --is-inside-work-tree eshell执行返回值都没问题,有的文件手动激活lsp-bridge-mode是buffer模式 有的是project模式。。我去log看下

刚用emacs -q 在一个python 项目中测试lsp-bridge-list-workspace-symbols,提示 “LSP server did not return any symbols.”,大佬遇到过么

那是有些LSP server 不支持这个功能,比如pyright,可以试一下clangd

这个Bug影响多文件重命名和跨文件 Code-Action 操作, 已经修复, 建议大家都更新一下。

1 个赞

有个 Rust 的问题, Cargo.toml 更新依赖后,我不知道 lsp 什么时候会更新依赖

lsp-bridge将参加今年的EmacsConf, 欢迎大家观看演讲

https://emacsconf.org/2022/talks/lspbridge/

因为我英语口语太烂了,将由EAF核心开发者 @MatthewZMD 来做英文演讲。

希望 lsp-bridge 能让更多的emacser知道,减少无谓的折腾,享受流畅写代码的快乐。

44 个赞

大佬请问一下 acm 能否实现 tab-and-go 形式的补全呢?

我的使用习惯是 TAB 键同时负责选中和插入(除了snippet之外的)候选,就和这个 issue 里描述和演示的一样。 我没有在 README 里看到相关说明, 也没有在帖子里搜到, 不确定有没有人问过这个。

我大概看了, 其实类似 Emacs 最早 auto-complete 的实现, 就是选择菜单后选项的时候不断的切换真实输入的内容, 具体绑定任意按键都可以。

具体的实现可以看这一楼 lsp-bridge -- 速度最快的语法补全插件 - #1013,来自 manateelazycat

你可以看到截图是带有 overlay 的预插入的效果的, 后面去掉的原因:

  1. Overlay用于现有关键字着色很好用, 但是 after-string 等属性在行尾的时候有各种各样的兼容性问题, 时间长了, 有点记不太清楚了
  2. 预览的问题, 最大的问题是, 各种插件混合的时候, 容易导致预览被误插入, 这个超级烦, 因为 Emacser的配置和环境都千奇百怪, 偶尔被插入不要的候选词就很烦躁
  3. Java类的语言有大量参数不一样的重载函数, 我们不展开Snippet就会导致预插入名字都一样, 展开遇到那种多行 Snippet 就头大

这个功能做好其实还挺帅的, 但是要做好在各种地方不出bug还是没那么容易的, 欢迎大佬写完美补丁。

1 个赞

看了 rust-analyzer 的文档, 给 rust lsp server 默认添加了一些参数, 不知道能否解决 Cargo.toml 变动后刷新的问题, 没有验证过。

今天写 Rust 代码的时候, 总是感觉诊断信息慢一拍, 有时候要移动两次光标才能拉取最新的诊断信息。

调查原因是因为原来的拉取诊断信息的方法和LSP Server发送消息会有多线程条件竞争的问题, 如果拉取最新诊断信息的时候, LSP Sever 还没有分析出来, 就会导致诊断信息延后, 不爽的就是, 有时候代码已经写对了但是诊断信息还没有消除, 或者反过来代码已经有错误了但是诊断信息还没有刷新。

今天写了一个新的补丁 https://github.com/manateelazycat/lsp-bridge/commit/8d08380c2d5c02c7b4f0b72ed1ab7df23cd03222

用Push的方法替代原来Pull的方法, 同时对诊断信息做Ticker处理, 修复上面问题的同时, 避免写代码过程中那些临时诊断信息Push到Emacs端, 影响Emacs的性能。

4 个赞

lsp-bridge 从构思到现在已经快速发展了5个月了, 添加了很多不同的功能, 导致命令的名字比较混乱。

今天重新把所有命令的名字都重新整理了一遍 Refactory names. · manateelazycat/lsp-bridge@096f6df · GitHub , 现在应该比较一致了, 同时针对重命名的命令都做了 alias 处理, 大家升级后应该不影响使用。

最新的名字都可以在 README 中查看: https://github.com/manateelazycat/lsp-bridge/blob/master/README.zh-CN.md

8 个赞