File: rust/src/tools/rustfmt/build.rs rust/src/tools/rustfmt/build.rs文件是Rust代码中一个构建脚本,它的主要作用是在构建rustfmt MacroConfigType:该enum定义了Rustfmt针对过程宏的派生属性的配置类型。每个选项表示了Rustfmt针对过程宏的不同配置。 File: rust/src/tools/rustfmt/src/lists.rs 在Rust源代码中,rust/src/tools/rustfmt/src/lists.rs文件是Rustfmt工具中负责处理列表格式化的模块 File: rust/src/tools/rustfmt/src/bin/main.rs rust/src/tools/rustfmt/src/bin/main.rs文件是Rustfmt工具的入口文件。 File: rust/src/tools/rustfmt/src/config/lists.rs rust/src/tools/rustfmt/src/config/lists.rs是Rustfmt的配置模块之一
File: rust/src/tools/rustfmt/src/git-rustfmt/main.rs 在Rust源代码中,rust/src/tools/rustfmt/src/git-rustfmt 这个程序是基于Rustfmt工具构建的,Rustfmt是一个用于格式化Rust代码的工具。 在这个文件中,有三个struct起着不同的作用:NullOptions、Config和Rustfmt. Rustfmt: Rustfmt struct是git-rustfmt程序的主要结构。它处理命令行参数并执行相应的操作。 Rustfmt struct使用Config struct以及命令行参数中的选项来配置Rustfmt,并通过调用Rustfmt工具对代码进行格式化。 File: rust/src/tools/rustfmt/src/rustfmt_diff.rs 在Rust源代码中,rust/src/tools/rustfmt/src/rustfmt_diff.rs
Rustfmt 的技术架构 在深入探讨之前,我想先了解一下你的具体需求: 你主要关注哪个方面? 是 rustfmt 的配置优化、在 CI/CD 中的集成,还是团队协作中的最佳实践? cargo fmt 基于 rustfmt 工具,而 rustfmt 本身构建在 Rust 编译器的语法解析器之上。它不是简单的文本处理工具,而是真正理解 Rust 语法的格式化器。 配置哲学:约定优于配置 Rust 社区有意限制了 rustfmt 的配置选项数量。与其他语言的格式化工具(如 Prettier、Black)不同,许多格式化风格在 rustfmt 中是不可配置的。 [rustfmt::skip] 属性完全跳过格式化,既节省时间又避免不必要的 diff。 特殊场景处理 rustfmt 对宏的处理一直是争议点。对于声明宏(macro_rules!) 它不仅调用 rustfmt,还能理解项目的 rustfmt.toml 配置,确保编辑器格式化与命令行格式化的一致性。
为什么需要《Rust 编码规范》 在最初学习 Rust 的那几年,我觉得 Rust 有rustfmt和Clippy 这样的静态检查工具,就没有必要搞什么编码规范了。 比如,有的项目将 rustfmt 里的规则全部写到 rustfmt.toml 文件中,也不管里面有多少规则其实是默认的;有的项目则严格依赖 clippy 的警告去修改代码,而不去思考是否适合当前场景。 rustfmt 和 clippy 这种工具也只能在他们编写完代码之后,才能进行检测,无法在编写代码的过程中给予其规范和指导。 可以帮助开发人员,在面对 rustfmt 和 clippy 这样的工具的规则,可以更好地做出决策。 同时,也提供了一个针对 Rust 编码规范的平台,帮助大家思考和讨论更加合理的规范,帮助 rustfmt 和 clippy 进化。
File: rust/src/tools/rustfmt/src/items.rs 在Rustfmt工具的源代码中的rust/src/tools/rustfmt/src/items.rs文件中,定义了一些与 File: rust/src/tools/rustfmt/src/chains.rs 在Rust源代码中,rustfmt/src/chains.rs文件的作用是实现代码格式化工具rustfmt的链式表达式处理逻辑 File: rust/src/tools/rustfmt/src/lib.rs 在Rust源代码中,rust/src/tools/rustfmt/src/lib.rs文件是rustfmt工具的主要实现文件 文件是Rustfmt工具中用来管理Rustfmt的发布渠道的模块。 File: rust/src/tools/rustfmt/src/pairs.rs 在Rust源代码中,rust/src/tools/rustfmt/src/pairs.rs文件的作用是处理rustfmt
2015 年,Rust 发布 1.0 版本的时候,在 GitHub 上发布过一个带有风格指南的 rustfmt 工具。 正如 Josh Triplett 在最近的 Rust 博客文章中解释的那样:“标准化的风格指南能帮助 Rust 开发者在许多不同的项目中感到舒适和自在,而来自 rustfmt 的工具支持使其易于维护和融入持续集成 近年来,相关的一些工作逐渐落到了 rustfmt 团队肩上,但该团队似乎更愿意执行由另一个团队做出的 style 决定,而不是自己做出的。
自动格式化 Rust 开发了一个叫做 rustfmt 的自动格式化工具,能够将用户编写的代码自动调整为一种标准风格。最新版的 Rust 中已经包含了该工具。 详细使用参见命令手册: rustfmt --help
Rust 风格团队宣布成立 随着 Rust 语言的发展,经常需要改进样式指南,例如支持新的语言结构(比如 let-chain / let-else 等新语法),像这样的新结构会被 rustfmt 忽略且不格式化 并且 rustfmt 的向后兼容性也阻碍了 Rust 代码风格的演变。
其中最具有代表性的就是clippy,当然最基础的不得不说rustfmt了。 编辑第四个,默认启用rustfmt现在rustrover格式化代码已经使用官方的rustfmt了,而不是之前内置的格式化工具。
注:先莫要急着升级,Rustup 1.24.0 版的 rustfmt 和 cargo fmt 有问题,下文有详述。 因为在升级到 Rustup 1.24.0 之后,用户无法运行 rustfmt 和 cargo fmt。因此,我们将版本恢复为 1.23.1。
比如: // Tells the rustfmt tool to not format the following element. #[rustfmt::skip] struct S { } // Controls the "cyclomatic complexity" threshold for the clippy tool. 现在 rustc 只认识两个外部工具(及它们内部的属性):一个是 rustfmt,另一个是 clippy。
build 命令 cargo doc 生成项目文档 cargo publish 将库发布到 crates.io 除了以上 cargo 自带的命令外, cargo 还支持安装额外的扩展命令, 例如格式化工具. rustfmt 是一个可以自定义风格的 rust 代码格式化工具, 使用如下命令安装它: $ rustup component add rustfmt 在项目根目录输入以下命令, 会自动格式化项目内的全部 Rust
为cargo配置ustc反代, 提高crates(rust库)下载速度2 安装rustfmt: rustup component add rustfmt --toolchain stable-x86_64
crate的时候,都有自己对crate的评估标准,本文从下面十个方面给出评估指导: Licensing Maintainers Unsafe Auditing Testing & CI Clippy Rustfmt
该文件中定义了一个名为RustfmtConfig的结构体,用于表示rustfmt的配置。 具体来说,RustfmtConfig结构体有以下几个作用: config_path字段:表示rustfmt的配置文件路径,默认为~/.rustfmt.toml。 该配置文件用于存储用户对rustfmt的个性化配置,包括缩进、换行、行长度等等。 config_file字段:表示rustfmt的配置文件的内容。 该模式下,rustfmt会将格式化后的文件写回到原始文件中,同时在控制台输出文件路径和格式化信息。 overwrite字段:表示是否允许rustfmt覆盖已存在的文件,默认为true。 在该文件中,RustfmtConfig结构体主要负责维护和传递rustfmt的配置信息。
你会发现多出了下列工具: cargo cargo-clippy cargo-fmt cargo-miri clippy-driver rls rust-gdb rust-lldb rustc rustdoc rustfmt
言其在升级到 rustup 1.24.0 之后,用户无法运行 rustfmt 和 cargo fmt。因此,我们将版本恢复为 1.23.1。
/target/debug/my-app) cargo check 快速检查语法(不生成目标文件) cargo test 运行单元测试和集成测试 cargo fmt 格式化代码(需 rustfmt) cargo TiKV 总结:Rust 的核心优势 优势 说明 高性能 接近 C/C++,无运行时开销 内存安全 编译时防止空指针、数据竞争 零成本部署 单文件,无依赖,启动快 现代工具链 Cargo + rustfmt
reported by rustc fmt Formats all bin and lib files of the current crate using rustfmt
功能特性: 完全支持 async/await; 类型安全; 对Rustfmt用户友好 (过程宏); 最小开销; 示例: 代码: use poem_openapi::{payload::PlainText