SublimeText rust 插件设置为 release 模式
目录
有不少开发者,像有悟一样,非常喜欢 Sublime Text 。只因它足够简洁,速度足够快,功能一点也不弱。不过它并非专业IDE,虽然有一定的插件支持,但多数要手动配置,而且还可能不成功。但是用来做为代码阅读器,功能完全满足。
如果使用了 Sublime Text 来开发 rust 程序,或者阅读 rust 代码,通常都会安装:
-
Rust Enhanced
,开发辅助,它扩展了 SublimeText 的 Build System, 提供 cargo
build
、run
、test
、check
等用于编译、运行、测试、检查的快捷命令。提供语法错误与建议等。 - LSP-rust-analyzer ,开发辅助,提供语法检查、语法辅助、宏展开(属性宏好像不支持展开)等语言服务。
以上也是所有 IDE 中的两大核心功能。
cmd+shift+p,调出 command palette,输入 Install
,选择 Package Control: Install Package
后Enter,分别安装 Rust Enhanced
,LSP-rust-analyzer
这两个插件。
Rust Enhanced 最常用的功能的 Build System、代码提示。
LSP-rust-analyzer 做为后端语言服务存在,为代码开发过程提供支持,优化了代码补全和代码提示的内容、代码定位、定义定位、重命名、格式化等。一般的 LSP 功能有
配置 release #
rust 编译慢是出名的,而且编译的附属物一般会比较大,位于当前工程的 target 目录下。
通常情况下,使用 cargo build
、cargo run
、cargo check
、cargo clippy
、cargo test
都属于 Development,所以编译过程中,会尽可能多的保留更多用于辅助开发和调试的信息。但如果你经常需要阅读他人的 rust 代码,并不负责开发、调试,更多的是在代码阅读过程中,需要使用 “悬停提示”、“跳转到定义处”等帮助理解代码的功能,或者只是想编译运行他人的工程看看效果,那可能会更偏向于使用 cargo build --release
,而不是 cargo build
来减少编译总体时间和结果文件的大小。
有悟的电脑是一台老旧的 macboook pro , CPU频率低,磁盘空间小,不得不经常为节省一点点时间与存储空间,花费比较多的时间和精力为工具的使用找一些非主流的设置。
以上斥求,它与面向开发的配置不同。
当前的 SublimeText ,并没有类似于 iterm profiles 的概念,不能在不同配置间切换。rust、cargo、rust-enhanced、lsp-rust-analyzer 等的配置要么是全局的,要么是项目级的,同一范围只能有一种配置情况。
每次都需要手动设定。开发者根据自己的需要进行设置,是 SublimeText 全局还是项目级。
Rust Enhanced 设置 #
- 在整个 SublimeText 编辑器启用
无论打开多个项目窗口,Rust Enhanced 的参数均一样。
使用 command palette 的 Rust: Config Cargo Build
非常虚幻,还是打开 Rust Enhanced 的配置文件更直接,搜索 pref rust
找到 Preferences: Rust Enhanced Settings
,自动打开用户目录下的 User/RustEnhanced.sublime-settings
。
// User/RustEnhanced.sublime-settings
{
...
"cargo_build": {
"defaults": {
// "toolchain": "nightly",
//"extra_cargo_args": "-Zunstable-options --keep-going" //only for nightly
"release": true,
"extra_cargo_args": "--verbose",
},
"variants": {
"auto": {
"release": true,
"extra_cargo_args": "--verbose",
},
},
},
}
以上的 RustEnhanced 配置参数,仅突出设置 release
,使得 Build With: RustEnhanced
编译命令(cargo build)及其变种 (如 cargo run、cargo check 等) 启动时,都带有 --relase
参数。编译结果在 ./target/release 目录下。
- 在项目中设置
覆盖全局配置,仅当前项目有效。配置信息保存在项目的 .sublime-project 文件中。
// debug-me.sublime-project
{
"folders": [
{
"path": ".",
}
],
"settings": {
"cargo_build": {
"defaults": {
"release": true
},
"variants": {
"auto": {
"release": true,
},
},
},
},
}
这样,在当前项目的范围内,使用 Build With: RustEnhanced
命令及它变种启动的 cargo 命令均带有 --release
参数。
更多详细设置,参见 Rust Enhanced 的 Build Settings
🔔 Rust Enhanced 的配置优化级覆盖规则如下:
- .sublime-project > Cargo Package > Cargo Target
- .sublime-project > Cargo Package > Build Variant
- .sublime-project > Cargo Package > Defaults
- .sublime-project > Build Variant
- RustEnhanced.sublime-settings > Build Variant
- .sublime-project > Defaults
- RustEnhanced.sublime-settings > Defaults
LSP-rust-analyzer 设置 #
LSP-rust-analyzer 插件,调用 rust-analyzer 执行语法分析,会对代码进行编译。你可以在 terminal 执行 cargo build --release
提前编译,或者由 LSP-rust-analyzer 自动调用编辑器对代码进行编译。
LSP-rust-analyzer 自动编译的参数,可以通过配置文件来修改。如 RustEnhanced 的配置相同, LSP-rust-analyzer 的配置也可以是全编辑器实例级,也可以是仅当前项目。
- 在整个 SublimeText 编辑器启用
使用 lsp rust
搜索 Preferences: LSP-rust-analyzer Settings
,打开用户配置文档 User/LSP-rust-analyzer.sublime-settings。
// User/LSP-rust-analyzer.sublime-settings
// Settings in here override those in "LSP-rust-analyzer/LSP-rust-analyzer.sublime-settings"
{
"command": [
"/usr/local/bin/rust-analyzer",
],
"settings": {
// --------------------------------
// for build/test
// e.g. cargo test
"rust-analyzer.runnables.extraArgs": [
"--verbose",
"--release",
],
// --------------------------------
// for check on save
// 注意不要与 rust-analyzer.cargo.extraArgs 重复
"rust-analyzer.check.extraArgs": [
"--verbose",
"--jobs",
"2",
// "--release", // cargo.extraArgs 的 --release 会传入
],
"rust-analyzer.cargo.extraArgs": [
"--release",
// "--verbose", // 这个参数会导致 rust-analyzer 无法展开宏
],
},
"enabled": true,
}
LSP-rust-analyzer 的参数非常多,这里仅列出可达到本文目的的参数。
- 仅在项目中配置
上面在 LSP-rust-analyzer.sublime-settings 配置的项,在项目的 .sublime-project 中,位置与结构如下:
// debug-me.sublime-project
{
...
"settings": {
"cargo_build": ...
"LSP": {
"rust-analyzer": {
// 与 LSP-rust-analyzer.sublime-settings 中的 Settings 相同。
"settings": {
"rust-analyzer.runnables.extraArgs": ["--release"],
"rust-analyzer.cargo.extraArgs": ["--release"],
}
}
}
}
}
实测,需要设置的参数项有二个,rust-analyzer.cargo.extraArgs
和 rust-analyzer.runnables.extraArgs
。
runnables.extraArgs
会影响 cargo build/test,cargo.extraArgs
会影响除 cargo build/test 之外的 cargo 命令,如 cargo check。