|  | #[[ | 
|  | ## 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/ |