新的介绍内容:
Prettier Rust:高效代码格式化工具,提升开发体验
Prettier Rust是Prettier代码格式化工具的扩展版本,专门为Rust语言开发者设计。它承袭了Prettier的一贯优势,提供一致、美观的代码格式,同时支持Rust特有的特性,如夜间功能和宏。
为什么选择Prettier Rust?
使用Prettier Rust后,开发者们意识到他们在代码格式化上所花费的时间和精力是多么宝贵。无论您正在处理的代码有多不完整或有错误,使用Prettier编辑器扩展,只需按下格式化文档的快捷键,代码就会立即变得整齐有序。
代码格式化示例:
输入 | 格式化后 |
---|---|
``` const LEET = 1337 /// My WIP code draft #![feature(crate_visibility_modifier)] async crate fn foo(arg) { arg.0 *= 3.14 LEET & 1337 arg.1(|b, c| -> T &c).await } ``` | ``` const LEET = 1337; #![feature(crate_visibility_modifier)] /// My WIP code draft crate async fn foo(arg) { arg.0 *= (3.14 LEET) & 1337; (arg.1)(|b, c| -> T { &c }).await } ``` |
格式化成功并修复了7个语法错误。
配置Prettier Rust:
访问Prettier官方配置文档以了解更多配置选项。
// .prettierrc.json
{
"useTabs": false,
"tabWidth": 4,
"printWidth": 100,
"endOfLine": "lf",
// -- 目前不支持 --
// "trailingComma": "es5",
// "embeddedLanguageFormatting": "auto",
// 示例覆盖
"overrides": { "files": ["tests/*.rs"], "options": { "printWidth": 80 } }
}
# .prettierrc.toml
useTabs = false
tabWidth = 4
printWidth = 100
endOfLine = "lf"
-- 目前不支持 --
trailingComma = "es5"
embeddedLanguageFormatting = "auto"
示例覆盖
overrides = [
{ files = ["tests/*.rs"], options = { printWidth = 80 } }
]
</details>
**如何忽略某些内容:**
- 在代码上方添加`// prettier-ignore`或`#\[rustfmt::skip\]`
- 在代码块或文件内添加`#!\[rustfmt::skip\]`
- 创建`.prettierignore`文件来匹配忽略的文件,类似`.gitignore`
**宏的格式化规则:**
- 花括号`!{}`格式化为代码块,`!\[\]`和`!()`格式化为逗号分隔的表达式
- 宏调用内部的格式化更加保守,因为宏可能对令牌敏感
- 流行的内置宏具有原始语法规则的定制格式化(例如`matches!`, `if_chains!`...)*\[目前尚未实现\]*
- 宏声明仅部分格式化(转换部分尚未格式化,但未来可能会实现)
- 无法格式化的宏会被静默忽略
**是否支持夜间功能?**
是的!Prettier Rust格式化大多数夜间功能。支持取决于jinx-rust。
**项目集成:**
- **命令行**
*需要NodeJS*
- 全局安装prettier和prettier-plugin-rust
npm install --global prettier-plugin-rust prettier
使用prettier CLI格式化Rust文件。例如,运行:
prettier --write **/*.rs
```
NodeJS包
需要NodeJS
在项目中安装prettier和prettier-plugin-rust
npm install --save-dev prettier-plugin-rust prettier
在prettier配置中链接到插件的位置:
"plugins": ["./node_modules/prettier-plugin-rust"]
使用prettier CLI格式化Rust文件。例如,运行:
npx prettier --write **/*.rs
Rust crate
目前没有crate。可使用上述选项。
常见问题解答:
为什么我要使用Prettier Rust而不是已有的cargo fmt?
编辑器集成至关重要 — 在工作过程中格式化代码的能力真正提升了开发体验,而Rust严格的语法自动完成则极大地节省了时间。一旦你尝试了这个扩展,就再也回不去了。
总的来说,代码风格的差异很小,因此采用Prettier Rust不会显著改变你的代码库。真正的缺点是与Rust生态系统的整合较为严苛,但这会随着时间的推移得到改善。
逐点分析:
- 扩展在编辑器中简化了你的工作
- 可以格式化无法编译的代码(例如缺少类型注释的代码)
- 自动更正语法错误(例如缺少分号、代码块、括号等)
- 它具有强烈的风格偏好,无需格式选项,因此代码在项目间保持统一
- 在某些情况下,它生成的代码更易读(例如条件链、复合表达式、模式)
- 它支持一切功能(例如夜间功能、宏)
- 它始终以相同的方式打印代码,而Rustfmt在某些地方保留了任意的风格
- 它可以用于其他语言(例如markdown、html、typescript、java、python、ruby)
- 它格式化语言嵌入。Rust代码块可以在非Rust文件中(例如markdown),以及在Rust文档注释中支持的语言。[注意:后者尚未实现]
为什么不直接将这些功能添加到rustfmt中?
不幸的是,rustfmt无法通过设计实现这些功能。
rustfmt使用rustc解析代码。rustc严格且不宽容,因为它总是假设代码处于“最终版本”,因此任何与接受语法稍有偏差都会使解析器崩溃。此外,rustc在解析器中有许多类似lint的检查。意图是为后续的编译器工作节省时间,不幸的是,这也意味着rustc有时无法解析语法正确的代码。
然而,Prettier Rust基于jinx-rust。jinx-rust专为Rust工具设计。因此,它设计为能容忍广泛的语法错误,支持缺失的节点,有时甚至能推断用户意图(例如Javascript的!==
)
jinx-rust在其readme中有一个关于Rust工具不应使用官方rustc解析器的小型plaidoyer。
Prettier Rust何时会更改代码语法?
Prettier Rust的语法自动更正功能旨在适应Prettier Typescript如何自动更正缺少分号的javascript代码。
您可以将Prettier Rust的语法自动更正视为自动应用Rust编译器建议的语法修复(例如“此处缺少分号”、“在此处加括号”或“在此处添加代码块”)。
否则,如果您的代码库可以编译,那么Prettier Rust只是一个格式化工具,不会更改有效Rust代码的语法。此外,它不会重新组织导入、拆分注释或合并属性。
这是一个“有意见的格式化工具”。但它是全新的!这些意见的可靠性如何?
请放心,Prettier Rust实际上并不自行决定风格。Prettier Rust基本上是Prettier Typescript的1:1改编,因此它实施的意见已被数百万用户实战测试并达成共识。
本站所有资源都是由网友投稿发布,或转载各大下载站, 请自行检测软件的完整性!
本站所有资源仅供学习与参考,请勿用于商业用途,否则 产生的一切后果将由您自己承担!
如有侵权请联系我们删除下架,联系方式:study_golang@163.com