这里有没有人用emacs(spacemacs)开发rust?开发环境都怎么搭建呢?尤其是代码索引,跳转。其次是自动补全。错误提示之类。
多谢。
这里有没有人用emacs(spacemacs)开发rust?开发环境都怎么搭建呢?尤其是代码索引,跳转。其次是自动补全。错误提示之类。
多谢。
rust的配置,如果结合lsp client的话,基本上就是零配置,即:无需配置。只要对应的language server(rust-analyzer
或rls
)在PATH中即可。可用的lsp client有:
lspce其实也挺快的,如果比eglot/lsp-mode慢,那可以当有bug看,我会努力解决。
好像需要安装 rust-mode? 我是按了 rust-mode 才能用的。。。还有类似的 go-mode。
哈哈哈,这是必然。没有mode肯定是不行的。
真是相当的靠谱!!!!
asdasdasd
我用rustic + lsp-mode,server用rls或者rust-analyzer都行。
cargo, rust-mode, lsp-mode 只用了这三个,感觉体验很不错。
eglot + rust-mode + rust-analyzer
全部 rust 配置
;; Eglot
(require 'eglot)
(add-hook 'rust-mode-hook 'eglot-ensure)
(require 'corfu)
(setq corfu-auto t)
(setq corfu-quit-at-boundary t)
(global-corfu-mode)
我设置完成之后,随便打开一个网上下的rust项目。emacs的message提示出错。貌似是缺环境变量。但是按照rustup的安装说明也没提环境变量之类的。下面好也有lsp bridge相关的出错提示。
Spacemacs is ready. Loading /home/lch/.emacs.d/.cache/company-statistics-cache.el (source)…done [yas] Prepared just-in-time loading of snippets successfully. Loading /home/lch/.emacs.d/.cache/recentf…done Skipping check for new version (reason: dotfile) Package cl is deprecated eldoc error: (user-error No such directory: /usr/local/src/rust/src. Please set ‘racer-rust-src-path’ or ‘RUST_SRC_PATH’) [LSP-Bridge] Start LSP server (rust-analyzer) for /home/lch/download/rust/tikv… [LSP-Bridge] Start LSP server (rust-analyzer) for /home/lch/download/rust/tikv with ’project’ mode, enjoy hacking! deferred error : (error “"TypeError(\"object of type ‘Symbol’ has no len()\")"”) [LSP-Bridge] waiting for cargo metadata or cargo check [2 times] deferred error : (error “"TypeError(\"object of type ‘Symbol’ has no len()\")"”) [LSP-Bridge] waiting for cargo metadata or cargo check deferred error : (error “"TypeError(\"object of type ‘Symbol’ has no len()\")"”)
No such directory: /usr/local/src/rust/src
Please set ‘racer-rust-src-path’ or ‘RUST_SRC_PATH’
应该是 rust 的 std 包没有下?
解决方案
按照 User Manual 说明 已经rustup component add rust-src 下载了源码。但不知道是不是std的包。
这个源码没有装到 /usr/local/src/rust/src 目录。是在.rustup 目录下。
我用的是spacemacs。加了rust layer。貌似它在用racer。racer能禁用么?或者这个可以和lsp-bridge共存?
Spacemacs is ready. Loading /home/lch/.emacs.d/.cache/company-statistics-cache.el (source)…done [yas] Prepared just-in-time loading of snippets successfully. Loading /home/lch/.emacs.d/.cache/recentf…done Skipping check for new version (reason: dotfile) Package cl is deprecated Opening file/dir: ~/download/rust/tikv/src/server/proxy.rs proxy.rs has auto save data; consider M-x recover-this-file [LSP-Bridge] Start LSP server (rust-analyzer) for /home/lch/download/rust/tikv… [LSP-Bridge] Start LSP server (rust-analyzer) for /home/lch/download/rust/tikv with ’project’ mode, enjoy hacking! [LSP-Bridge] waiting for cargo metadata or cargo check [8 times] Error in post-command-hook (winner-save-old-configurations): (wrong-type-argument frame-live-p #<dead frame acm frame 0x55690e585978>) [LSP-Bridge] waiting for cargo metadata or cargo check Company: An error occurred in auto-begin Company: backend company-capf user-error: /home/lch/.cargo/bin/racer exited with 127. ‘M-x racer-debug’ for more info eldoc error: (user-error /home/lch/.cargo/bin/racer exited with 127. ‘M-x racer-debug’ for more info) [LSP-Bridge] waiting for cargo metadata or cargo check [4 times] Mark set Quit
lsp-bridge不需要其他任何补全的前后端,你都禁用掉。
我没有开其他的补全。我只是在spacemacs中加了 rust layer。可能是这里它自己加的。 你的意思是把rust layer去掉? 那rust mode 是不是也会一起去掉了。
只保留rust-mode
我把spacemacs 的rust layer删掉。然后在 dotspacemacs-additional-packages 中加上rust-mode。现在可以补全了。
不过我在代码中随便敲几个字母的时候,messagen 里仍然会出下面这个错误提示,不知道是否正常: deferred error : (error “"TypeError(\"object of type ‘Symbol’ has no len()\")"”)