rustfmtでRustコードを自動整形する
rustfmtはRustのコードフォーマッターだ。TOMLファイルを使用してフォーマッティングの設定を行うことができる。この記事では、rustfmtのおすすめの設定方法やVSCodeからの呼び出し方法などを記す。
インストール・実行方法
rustup経由でインストールする場合は、以下のコマンドが使用できる。
$ rustup component add rustfmt --toolchain nightly
いくつかの便利な機能はnightlyが必要になるので、toolchainにnightlyを指定することをおすすめする。VSCodeを使っている場合は、rust-analyzerの拡張機能をインストールすれば一緒にインストールされるので上記のコマンドは必要ない。
コード整形の実行には、下記のコマンドを使用する。コマンドを直接実行しなくても、後述のエディタの設定によって自動でコード整形することができるので、あまり実行する機会はないかもしれない。CI等でフォーマット検査だけしたい場合は、--checkオプションを使用すると良い。
$ cargo +nightly fmt
$ cargo +nightly fmt --check
TOMLファイルで挙動を設定
設定できる項目の一覧はrustfmtのドキュメントから確認することができる。プロジェクトディレクトリに.rustfmt.toml
かrustfmt.toml
を配置することでフォーマッティングの設定ができる。以下は僕のおすすめの設定例だ。
unstable_features = true
imports_granularity = "Crate"
group_imports = "StdExternalCrate"
reorder_impl_items = true
condense_wildcard_suffixes = true
format_code_in_doc_comments = true
format_macro_matchers = true
format_strings = true
上記のファイル内で明示的に記述されていない項目はデフォルト値が使用される。ここでは、いくつかの項目について説明をしておこうと思う。まず、unstable_features
はnightlyを必要とする設定項目を有効化するために必要だ(--unstable-features
オプションをコマンド実行時に指定することでも有効化できる)。
imports_granularity
は、importのまとめ方に関する項目で、Crate
を指定すると、例えば以下のようにcrate毎にいい感じにuse文をまとめてくれる。
VSCode / Cursorで使用する
VSCodeやCursorで利用する場合は、rust-analyzer経由で利用すると良い。フォーマット以外にも、Warningや型情報を表示してくれたりするためRustのコーディングをする際には非常に便利だ。エディタのExtensionsタブから、「rust-analyzer」で検索してインストールできる。デフォルトの設定では、ファイルのセーブ時に自動でフォーマットがかけられる。
nightlyの機能をエディタで使用する
エディタの自動フォーマット時にnightlyが必要な機能を使用したい場合は、追加で設定が必要になる。具体的には、プロジェクトのルートディレクトリに.vscode/settings.json
を作成して以下の設定を追加する。
{
"rust-analyzer.rustfmt.extraArgs": [
"+nightly"
],
}
これで、rustfmt.toml
でnightlyの機能をオンにしていてもエディタ上で使用することができるようになった。
Discussion