VSCodeのformatterをカスタマイズする

Atomも開発終了してしまったことだし、新しく勉強するRustはVSCodeで環境を作ろうと思ったのですが、なんか全然資料が見つからなくて苦労したのでメモしておきます。

例はRustのformatterですが、言語はどれでもいいはず。たぶん恐らく。

# 手順
## formatterの用意
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/890310/5af37b6e-b782-9ceb-f144-a29e1c29a87f.png)
　とりま拡張機能の`rust-analyzer`（公式が出してるやつです。`Rust`とかいうのが使えなくなってこれに代替わりしたらしい）を入れます。これに`rustfmt`というrust用のformatterも含まれています。
　他の言語の方はそれ用の物をお願いします。VSCodeは詳しくないので。

## formatter設定ファイルの登録
左下から適当に`Settings`を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/890310/ad6c39d1-efe8-aa9f-b889-203d9d574d94.png)
次におもむろにformatter名、ここでは`rustfmt`で検索します。
その後、![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/890310/201f9cce-c657-c5a6-f2db-ac10db928863.png)
`Rust-analyzer › Rustfmt: Extra Args`(Rust以外ならArgsってついてるやつ)の中の`Add Item`を押し、`--config-path`と入力した後、OKと押します。もうこの時点で全部察したっていう人が大半だと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/890310/019ca1ea-bc8c-8fd3-0f68-0ed9f2a91ee9.png)
次に`.rustfmt.toml`の存在するフォルダのPathを入力します。ファイルをのパスを直接でもいいと思います。フルパスです。エスケープはVSCodeがやってくれるのでいりません。
他のformatterの方は専用のコマンドのヘルプを見るか、ぐぐってください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/890310/a90c99ac-c177-2b79-37ab-f9c322850507.png)
上記は一応`.rustfmt.toml`の中身です。

ちなみに、`setting.json`を見ると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/890310/f488dfff-eecb-4d91-70f3-7977706701f4.png)
こんな感じに増えてます。
`"editor.formatOnSave": true`はsaveした時に勝手にformatterをかけるというVSCodeの機能ですね。
ちなみに、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/890310/069d00ee-fde5-5c11-313c-53c4da4b4d84.png)
のようにも書けますが、まだ安定していない設定（まだ`nightly Rust`とかいうのでしか使えないらしい）を盛り込むとerror?を吐いてformatterは機能しません。設定ファイルになら組み込んでも問題ないのでそうしましょう。いつか使えるようになることを祈っておきます。
あと[rustfmtの設定一覧](https://rust-lang.github.io/rustfmt/)です。なぜかVer1.5で開きますが。

# 参考
※`VSCode`や`Rust`を始めようと思って調べ始めたサイトたちなので若干関係ない物も入っています。インスピレーションをもらっただけというものや基礎勉強も多々です。

https://rust-lang.github.io/rustfmt/

https://qiita.com/wordijp/items/6860e27643ba9d06a987

https://qiita.com/ayatokura/items/4301e0d1d8b339f722eb#:~:text=Settngs.json%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%20VSCode%E3%81%AE%E3%80%8C%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%20%28F%29%20%E3%80%8D%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E2%86%92%E3%80%8C%20%E5%9F%BA%E6%9C%AC%E8%A8%AD%E5%AE%9A%20%28P%29,%E3%80%8D%E2%86%92%E3%80%8C%20%E8%A8%AD%E5%AE%9A%20%28S%29%20%E3%80%8D%E3%82%92%E9%81%B8%E6%8A%9E%E3%81%99%E3%82%8B%E3%81%A8%E5%B7%A6%E5%81%B4%E3%81%AB%20%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%E8%A8%AD%E5%AE%9A%E3%83%AA%E3%82%B9%E3%83%88%20%E3%80%81%E5%8F%B3%E5%81%B4%E3%81%AB%20Settings.json%20%E3%81%8C%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82

https://www.techscore.com/blog/2019/09/10/visual-studio-code%e3%81%ae%e3%83%95%e3%82%a9%e3%83%bc%e3%83%9e%e3%83%83%e3%82%bf%e3%82%92%e8%87%aa%e5%88%86%e5%a5%bd%e3%81%bf%e3%81%ab%e8%a8%ad%e5%ae%9a%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b%e3%80%82/

https://stackoverflow.com/questions/45823734/visual-studio-code-formatting-for

https://qiita.com/myy/items/6b16252491d510cff759

https://qiita.com/ryo8000/items/60714fa9c5ce261c1798

https://access.redhat.com/documentation/ja-jp/red_hat_developer_tools/2019.3/html/using_rust_toolset/sect-rustfmt-usage-cargo

https://qiita.com/wordijp/items/6860e27643ba9d06a987