mirror of https://github.com/bazelbuild/rules_rust
54 lines
2.1 KiB
Plaintext
54 lines
2.1 KiB
Plaintext
#[[
|
|
## Overview
|
|
]]#
|
|
|
|
[Rustfmt][rustfmt] is a tool for formatting Rust code according to style guidelines.
|
|
By default, Rustfmt uses a style which conforms to the [Rust style guide][rsg] that
|
|
has been formalized through the [style RFC process][rfcp]. A complete list of all
|
|
configuration options can be found in the [Rustfmt GitHub Pages][rgp].
|
|
|
|
|
|
#[[
|
|
### Setup
|
|
]]#
|
|
|
|
Formatting your Rust targets' source code requires no setup outside of loading `rules_rust`
|
|
in your workspace. Simply run `bazel run @rules_rust//:rustfmt` to format source code.
|
|
|
|
In addition to this formatter, a simple check can be performed using the [rustfmt_aspect](#rustfmt-aspect) aspect by running
|
|
```text
|
|
bazel build --aspects=@rules_rust//rust:defs.bzl%rustfmt_aspect --output_groups=rustfmt_checks
|
|
```
|
|
|
|
Add the following to a `.bazelrc` file to enable this check during the build phase.
|
|
|
|
```text
|
|
build --aspects=@rules_rust//rust:defs.bzl%rustfmt_aspect
|
|
build --output_groups=+rustfmt_checks
|
|
```
|
|
|
|
It's recommended to only enable this aspect in your CI environment so formatting issues do not
|
|
impact user's ability to rapidly iterate on changes.
|
|
|
|
The `rustfmt_aspect` also uses a `--@rules_rust//:rustfmt.toml` setting which determines the
|
|
[configuration file][rgp] used by the formatter (`@rules_rust//tools/rustfmt`) and the aspect
|
|
(`rustfmt_aspect`). This flag can be added to your `.bazelrc` file to ensure a consistent config
|
|
file is used whenever `rustfmt` is run:
|
|
|
|
```text
|
|
build --@rules_rust//:rustfmt.toml=//:rustfmt.toml
|
|
```
|
|
#[[
|
|
### Tips
|
|
]]#
|
|
|
|
Any target which uses Bazel generated sources will cause the `@rules_rust//tools/rustfmt` tool to fail with
|
|
``failed to resolve mod `MOD` ``. To avoid failures, [`skip_children = true`](https://rust-lang.github.io/rustfmt/?version=v1.6.0&search=skip_chil#skip_children)
|
|
is recommended to be set in the workspace's `rustfmt.toml` file which allows rustfmt to run on these targets
|
|
without failing.
|
|
|
|
[rustfmt]: https://github.com/rust-lang/rustfmt#readme
|
|
[rsg]: https://github.com/rust-lang-nursery/fmt-rfcs/blob/master/guide/guide.md
|
|
[rfcp]: https://github.com/rust-lang-nursery/fmt-rfcs
|
|
[rgp]: https://rust-lang.github.io/rustfmt/
|