blob: 47d5af0a698b1520cd902ffac4aa15f2902987a6 [file] [log] [blame]
Brian Silvermancc09f182022-03-09 15:40:20 -08001#[[
2## Overview
3]]#
4
5[Rustfmt][rustfmt] is a tool for formatting Rust code according to style guidelines.
6By default, Rustfmt uses a style which conforms to the [Rust style guide][rsg] that
7has been formalized through the [style RFC process][rfcp]. A complete list of all
8configuration options can be found in the [Rustfmt GitHub Pages][rgp].
9
10
11#[[
12### Setup
13]]#
14
15Formatting your Rust targets' source code requires no setup outside of loading `rules_rust`
16in your workspace. Simply run `bazel run @rules_rust//:rustfmt` to format source code.
17
18In addition to this formatter, a check can be added to your build phase using the [rustfmt_aspect](#rustfmt-aspect)
19aspect. Simply add the following to a `.bazelrc` file to enable this check.
20
21```text
22build --aspects=@rules_rust//rust:defs.bzl%rustfmt_aspect
23build --output_groups=+rustfmt_checks
24```
25
26It's recommended to only enable this aspect in your CI environment so formatting issues do not
27impact user's ability to rapidly iterate on changes.
28
29The `rustfmt_aspect` also uses a `--@rules_rust//:rustfmt.toml` setting which determines the
30[configuration file][rgp] used by the formatter (`@rules_rust//tools/rustfmt`) and the aspect
31(`rustfmt_aspect`). This flag can be added to your `.bazelrc` file to ensure a consistent config
32file is used whenever `rustfmt` is run:
33
34```text
35build --@rules_rust//:rustfmt.toml=//:rustfmt.toml
36```
37
38[rustfmt]: https://github.com/rust-lang/rustfmt#readme
39[rsg]: https://github.com/rust-lang-nursery/fmt-rfcs/blob/master/guide/guide.md
40[rfcp]: https://github.com/rust-lang-nursery/fmt-rfcs
41[rgp]: https://rust-lang.github.io/rustfmt/