swift-formatの設定を整理した

公開

Swiftのソースコードのフォーマットにswift-formatを使っている。

swift-formatの設定ファイルを作ってから一度も整理してこなかったので整理することにした。

swift-formatの設定

整理した設定ファイルは以下のgistに置いておく。swift-format はJSON5形式に対応しているみたいなので、コメントも追加した。

デフォルト値との乖離

デフォルトの設定と違うところは以下の通り。

lineLength: 120

ディスプレイも大きくなったので、100はさすがに少なすぎるので。150ぐらいにしたいけど、Diffで見るときにちょっとつらいので120。

lineBreakBeforeEachArgument: true

複数行の引数リストで各引数の前に改行するか (規定値: false)
以下のように引数を改行して縦に並べた方が個人的に見やすいので。

func arguments(
  arg1: String,
  arg2: String,
  arg3: String,
)

lineBreakBeforeEachGenericRequirement

複数行のジェネリック制約で各制約の前に改行するか (規定値: false)
複数行のジェネリックを定義することはないに等しいけど、書くとしたら引数のように縦に並べたい。

prioritizeKeepingFunctionOutputTogether

関数の throws や戻り値型を右括弧と同じ行へ保つことを優先するか (規定値: false)
関数の戻り値の定義は閉じ括弧と同じ行に書きたい。

indentConditionalCompilationBlocks

#if#elseif#else の本体をインデントするか (規定値: true)
#if などのマクロで内部のコードのインデントは変えたくない。

lineBreakAroundMultilineExpressionChainComponents

ドットチェーンの一部が複数行の場合、その要素の前後にも改行を入れるか (規定値: false)
RxSwiftでチェーンメソッドが長い時に改行で揃えていたくせが残っている。もしくはObjective-Cでもメソッドチェーンをしていたかも。

ReturnVoidInsteadOfEmptyTuple (Rules)

関数宣言以外の型シグネチャで空タプル () より Void を使用する (規定値: true)
var foo: Int -> Void より var foo: Int -> () の方が好み。

UseExplicitNilCheckInConditions

if let _ = value より if value != nil を使う (規定値: true)
昔から if let _ = value を使っているので、手癖でこっちを使ってしまう。

参考

https://zenn.dev/kyome/articles/a2dad672c0a65c