如何限制 rust-analyzer 的扫描范围?

项目根路径 ~/Downloads/test_ts,但 rust-analyzer 却从 ~/Downloads 开始扫描,狂吃 CPU 几十分钟,然后 (error "Lisp nesting exceeds ‘max-lisp-eval-depth’")

重现步骤

$ mkdir ~/Downloads/test_rs && ~/Downloads/test_rs
$ cargo init
$ git init && git add . && git commit -m 'Init commit'
$ emacsq.sh -P rust-mode --eval "(add-hook 'rust-mode-hook #'eglot-ensure)" src/main.rs

期望

只扫描 ~/Downloads/test_rs

实际

扫描整个 ~/Downloads

环境

  • macOS 10.13.6
  • rust-analyzer 0.3.1266-standalone (ba28e19b7 2022-10-29)
  • emacs 29.0 2022-11-04
  • Packages
    • eglot built-in
    • rustic 20220715.1010
1 个赞

这种情况是不是 在 ~/Downloads/test_rs 执行git init一下可以规避一下呀。
虽然没有本质上解决问题 :rofl:

写漏了,有这一步骤,而且还提交了。

1 个赞

好吧,那确实有问题。 :face_holding_back_tears: zsbd

lsp-workspace-folders-addlsp-workspace-folders-remove 设置一下看看。

哦用的是 eglot 啊,钠算了

eglot 用的是 project-root,看下这个是什么吧,是不是 downloads 目录内有个 .git 目录。

(project-current)        ;; => (vc Git "~/Downloads/test_rs/")
(eglot--current-project) ;; => (vc Git "~/Downloads/test_rs/")

竟然是乌龙。

1楼截图高亮的那两行信息其实是 lsp-mode 输出的。所以是 lsp-mode 在扫描 ~/Downloads/。

因为我直接用 ~/.emacs.d/elpa 已经下载的包,里边有 ristic, 是 rustic 启动了 lsp-mode。

应该创建一个空的 user-emacs-directory 进行测试:

$ emacsq.sh -ud '<tmp>' -P rust-mode --eval "(add-hook 'rust-mode-hook #'eglot-ensure)" -nw

关键是上面的 emacsq.sh 也让别人摸不着头脑呀。

另外,rustic 为啥要操心 lsp 的事,有些多管闲事了。。。