Rust编译器需要在用户修改 toml 文件后 reindex 整个项目, 否则 toml 新加的包无法提供补全。
今天给 lsp-bridge 增加了 LSP workspace/didChangeWatchedFiles 协议的支持, lsp-bridge 最新版会根据 LSP Server 返回的监听文件列表进行自动监听, 当这些关键的项目文件变动后会给 LSP Server 发送 workspace/didChangeWatchedFiles notification 。
最新版需要用 pip 安装 watchdog 这个依赖, watchdog 这个包提供跨操作系统平台的文件系统探测能力,文件变动探测的性能要比 lsp-mode/eglot 这种用 elisp 来实现的方式性能高很多, 同时使用多线程进行文件变动探测, 即使文件变动数量巨大也不会卡住Emacs。
3 个赞
在日常编程中, LSP的优势是提供语法补全, 但是在一些创作过程中,代码还不是语义完备的, 这时候LSP的语法补全就不够用了。
今天给 lsp-bridge 增加了一个新功能
利用 LSP Server 会根据AST自动分析出所有工作区的符号(比如函数名、变量名等), 写了一个 Workspace Symbol 的补全后端, 这个后端的应用场景是, 当代码不是语义完备的时候, 自动补全当前项目所有的符号, 基于符号的补全会比文档的文本搜索补全更加精准。
这个 Workspace Symbol 后端依然是在多线程中运行, 补全过程中不会卡住Emacs。
3 个赞
lsp-bridge-popup-documentation
和 lsp-bridge-show-documentation
能否渲染代码颜色?
光秃秃的,我记得 lsp-mode 和 eglot 的 documentation 都有代码高亮啊
github 提一个issue吧, 我有空的时候研究一下。
twleo
3696
可以把
"hover": {
"contentFormat": [
"markdown",
"plaintext"
],
"dynamicRegistration": True
},
加到 lspserver.py 的 default capabilities?
解决了,
嗨呀,还有一件事
不知道是不是 acm 的问题,在 doom emacs 中,org mode 下写文本,acm-mode-map 的 acm-complete 无法触发:
Ctrl + m |
acm-complete |
Complete completion |
Return |
acm-complete |
Complete completion |
Tab |
acm-complete |
Complete completion |
Alt + h |
acm-complete |
Complete completion |
好像全都被 doom emacs 的 org 快捷键设置覆盖了,acm 不能做到弹出补全窗口时,加载 acm-mode-map吗?等补全消失了再启动 major-mode-map
就是这样设计的,但是感觉doom的配置啊,你emacs -Q对比测试下吧
这样还有一个问题:文档不知道为什么直接滑倒了最后,不应该是从头开始吗?
emacs -Q 如下:
;;; debug.el --- Debugging -*- lexical-binding: t; -*-
(add-to-list 'load-path "~/.config/emacs/.local/straight/repos/lsp-bridge")
(add-to-list 'load-path "~/.config/emacs/.local/straight/repos/yasnippet")
(add-to-list 'load-path "~/.config/emacs/.local/straight/repos/markdown-mode")
(require 'yasnippet)
(yas-global-mode 1)
(require 'lsp-bridge)
(global-lsp-bridge-mode)
另外一个问题,应该是 doom emacs 的 org mode 的问题,通过设置别的快捷键 M-tab
解决了,不想找具体是哪个原因了
在另外一个buffer弹出文档的功能用的少,我晚上回去看一下
lsp-bridge-show-documentation 最新版已经是显示开始的位置了, 更新最新版就好了。
bszzz
3703
看回复看的有点晚,是lsp-bridge版本太老了……
另外README里好像没有提及怎么关掉workspace-symbol啊
我简直就是找 bug 小能手,又发现一个 bug?
我发现 lsp-bridge 针对这种空头文件的索引非常缓慢,但是 Neovim 表现没啥问题啊
比如 #include <fmt/core.h>
Neovim
Emacs:
emacs -Q 也是一样的缓慢
查了 Neovim 的 lsp log 和 lsp birdge 的 log 其实没什么大差别,都是显示这个:
找不到头文件了什么的,必须要手动指定完完整整的全部头文件,才能正常速度索引,但是 lsp mode 和 eglot 都没有这个问题。应该不是 acm 的问题吧。
1 个赞
你想说,搞个 compile_commands.json 是吗?加上 compile_commands.json
速度确实没什么问题了,但是正常来说,我本本身已经指定了 .clangd
了,配置好相关的头文件目录了,应该不会有什么问题吧(Neovim,lsp mode,eglot 速度一切正常)
bszzz
3708
我也发个bug
虽然using namespace
容易编译错误,但应该不至于让lsp-bridge乱弹acm吧
另外我发现nvim-cmp在能弹补全窗口的时候一定会弹出来,acm的触发机制好像不太一样(比如#include <ext/pb_ds/hash_policy.hpp>
nvim-cmp可以一直开着补全窗口,lsp-bridge会在输入#、e、p、h的时候重新打开,补全完一项之后就关闭了。)
不知道有没有在TUI下使用lsp-bridge的小伙伴,lsp-bridge-popup-documentation弹不出来,log也没有报错。
bszzz
3711
在我这里他也不会弹出,但它会把window buffer 都创建出来,rime也像往常一样段错误。
所以popup-document应该是使用了posframe或者childframe之类的不支持Terminal的frame机制。