概要
swiftlint:disable:
でも SwiftLint は部分的に無視できます。
しかし、「特定の単語」を例外として許可したいときは:
inclusive_language:
override_allowed_terms:
- master
のようにして、 rule に対して override_allowed_terms
を設定することでプロジェクト全体で許可することが可能になります。
…っていう話をします。
モチベーション
とあるプロジェクトで、 HogeMasterRepository
というクラスがあり、 “master” という単語が差別的であるとして SwiftLint のルールに引っかかっていました。
参考: SwiftLint Docs, Inclusive Language
GitHub のデフォルトブランチが master
から main
になったように、根本的には master
という単語を避けた命名をするべきなのですが、
影響範囲が大きかったので、一度以下のようにして無視することとしました。
// SwiftLint では以下のようにして部分的に無効化することができる
// swiftlint:disable:next inclusive_language
class HogeMasterRepository { }
これで修正したところ PR レビューで「inclusive_language
の許可リストに master
を加えたほうが良いです。」と教えてもらい、調べた結果を自分用にまとめました。
特定の単語を許可する方法
SwiftLint Docs, Inclusive Language のページを見てみてください。
“Default configuration:” という欄があります。
そこにはデフォルト設定が書いてあるのですが、 override_allowed_terms
の項目があります。
ここに冒頭のように設定してやればいいのです。
inclusive_language:
override_allowed_terms:
- ${無効化したい単語}
って感じになります。
最初は identifier_name:excluded:
の所に書いてたのですが、反映されずハマりました。。。
逆に特定の単語を有効にしたい場合
先程の Doc を注意深く見ればわかるのですが、 additional_terms
と override_terms
ってのがあります。
これはそれぞれ、
additional_terms
:- デフォルトに追加で警告を出したい単語を登録する
override_terms
:- デフォルトの単語は破棄して、新しい単語リストを定義する
という違いがあります。
例えば、それぞれに daichi
を追加した場合を考えると、
additional_terms
:- “whitelist”, “blacklist”, “master”, “slave” に追加して “daichi” にも警告を出す
override_terms
:- “daichi” だけに警告を出す
という動作になります。
これに関しては SwiftLint のソースコードを読むと確実に理解できると思いますが、以下のように処理されているので、このような動作になります。
allTerms = overrideTerms ?? defaultTerms
// override_terms が与えられていればそれを allTerm として、無ければ default を使用する
allTerms.formUnion(additionalTerms ?? [])
// additional_terms があれば追加する
allAllowedTerms = overrideAllowedTerms ?? defaultAllowedTerms
// override_allowed_terms が与えられていればそれを allAllowedTerms として、無ければ default を使用する
参考: GitHub, InclusiveLanguageConfiguration.swift
おわり
PR のし的からまさか SwiftLint のソースコードを読むことになるとは思いませんでしたが、 inclusive_language
の設定については詳しくなれました。