現在アーカイブされているGithub Swiftスタイルガイドに基づいて、迅速なスタイルとコンベンションを実施するためのツール。 Swiftlintは、Swiftコミュニティが一般的に受け入れられるスタイルガイドルールを実施します。これらのルールは、KodecoのSwiftスタイルガイドのような人気のあるスタイルガイドでよく説明されています。
SwiftlintはClangとSourceKitに接続して、ソースファイルのAST表現を使用して、より正確な結果を得ています。
Swiftlintは、コマンドプラグインまたはビルドツールプラグインとして使用できます。
追加
. package ( url : " https://github.com/SimplyDanny/SwiftLintPlugins " , from : " <version> " )
swiftlintの最新リリースを自動的に消費するか、依存関係を特定のバージョンに固定するためPackage.swift
ファイルへ:
. package ( url : " https://github.com/SimplyDanny/SwiftLintPlugins " , exact : " <version> " )
そこで、 <version>
目的の最小バージョンまたは正確なバージョンに置き換えます。
注記
Swiftlintリポジトリからプラグインを直接消費するには、いくつかの欠点があります。それらを回避し、課されるオーバーヘッドを減らすために、Swiftlintリポジトリのプラグインも完全に機能しているにもかかわらず、専用のswiftlintpluginsリポジトリからプラグインを消費することを強くお勧めします。 Swiftlintのプラグインが優先される場合は、上記のパッケージ宣言でURL https://github.com/realm/SwiftLint
を使用してください。
ただし、SwiftLintPluginsはプラグインの採用を大幅に促進します。 Swiftlint自体が提供するプラグインを非常に厄介なものにする理由のいくつかをリストしています。プラグインコードとリリースは同期しているため、2つの機能に違いはありませんが、専用のプラグインリポジトリを使用して多くの時間と問題を免れます。
このドキュメントは、SwiftLintPluginsに依存していると仮定しています。
次のリンクを使用して、Xcodeプロジェクトへのパッケージ依存関係としてSwiftlintを追加します。
https://github.com/SimplyDanny/SwiftLintPlugins
brew install swiftlint
Podfile
に以下を追加します。
pod 'SwiftLint'
これにより、次のpod install
実行中にPods/
依存関係をダウンロードし、スクリプトビルドフェーズで${PODS_ROOT}/SwiftLint/swiftlint
介してそれを呼び出すことができます。
ココアポッド経由でインストールすると、単に最新のものではなく、特定のバージョンのSwiftlintにピン留めすることができます(HomeBrewの場合)。
これにより、Swiftlintバイナリ、その依存関係のバイナリ、およびPods/
ディレクトリへのSwiftバイナリライブラリの分布が追加されるため、GITなどのSCMにこのディレクトリをチェックすることが推奨されます。
mint install realm/SwiftLint
これをMODULE.bazel
に入れてください:
bazel_dep ( name = "swiftlint" , version = "0.52.4" , repo_name = "SwiftLint" )
または、これをWORKSPACE
に入れます:
load ( "@bazel_tools//tools/build_defs/repo:http.bzl" , "http_archive" )
http_archive (
name = "build_bazel_rules_apple" ,
sha256 = "390841dd5f8a85fc25776684f4793d56e21b098dfd7243cd145b9831e6ef8be6" ,
url = "https://github.com/bazelbuild/rules_apple/releases/download/2.4.1/rules_apple.2.4.1.tar.gz" ,
)
load (
"@build_bazel_rules_apple//apple:repositories.bzl" ,
"apple_rules_dependencies" ,
)
apple_rules_dependencies ()
load (
"@build_bazel_rules_swift//swift:repositories.bzl" ,
"swift_rules_dependencies" ,
)
swift_rules_dependencies ()
load (
"@build_bazel_rules_swift//swift:extras.bzl" ,
"swift_rules_extra_dependencies" ,
)
swift_rules_extra_dependencies ()
http_archive (
name = "SwiftLint" ,
sha256 = "c6ea58b9c72082cdc1ada4a2d48273ecc355896ed72204cedcc586b6ccb8aca6" ,
url = "https://github.com/realm/SwiftLint/releases/download/0.52.4/bazel.tar.gz" ,
)
load ( "@SwiftLint//bazel:repos.bzl" , "swiftlint_repos" )
swiftlint_repos ()
load ( "@SwiftLint//bazel:deps.bzl" , "swiftlint_deps" )
swiftlint_deps ()
次に、このコマンドを使用して、現在のディレクトリでSwiftlintを実行できます。
bazel run -c opt @SwiftLint//:swiftlint
最新のGitHubリリースからSwiftLint.pkg
ダウンロードして実行します。
ビルドツールバゼルと最近のSwiftツールチェーンがインストールされており、すべてのツールがPATH
で発見できることを確認してください。
swiftlintを構築するには、このリポジトリをクローンし、 make install
実行します。
重要
Swiftソースファイルをコンパイルしてリント違反があるときに早期にビルドを終了することは直感的に思えるかもしれませんが、Swiftlintは編集可能な有効なソースコードを分析するように設計されていることを理解することが重要です。非コンパイルコードは、特に--fix
/ --autocorrect
コマンドライン引数で実行する場合、予期しない混乱のある結果に非常に簡単につながる可能性があります。
Swiftlintは、SwiftパッケージプロジェクトとXcodeプロジェクトの両方のビルドツールプラグインとして使用できます。
ビルドツールプラグインは、パッケージ/プロジェクトディレクトリ内に最上位の構成ファイルを見つけて、Swiftlintワーキングディレクトリを決定します。構成ファイルがそこに見つからない場合、パッケージ/プロジェクトディレクトリは作業ディレクトリとして使用されます。
プラグインは、Swiftlintワーキングディレクトリを解決できない場合にエラーをスローします。たとえば、これはターゲットのSwiftファイルがプロジェクトディレクトリ内にないXcodeプロジェクトで発生します。
プラグインとの互換性を最大化するには、 --config
オプションを使用する必要があるプロジェクト構造を避けてください。
注記
Swiftパッケージマネージャー経由でインストールする必要があります。
各ターゲットを構築するときにツールプラグインを実行します。プロジェクトに複数のターゲットがある場合、プラグインを個別に目的のターゲットに追加する必要があります。
これを行うには、ターゲットにプラグインを追加して、次のように並ぶようにします。
. target (
...
plugins : [ . plugin ( name : " SwiftLintBuildToolPlugin " , package : " SwiftLintPlugins " ) ]
) ,
注記
Swiftパッケージマネージャー経由でインストールする必要があります。
コマンドプラグインは、次のようにコマンドラインからswiftlintを実行できます。
swift package plugin swiftlint
注記
Xcodeパッケージの依存関係を介してインストールする必要があります。
ビルドツールプラグインは、各ターゲットのビルドフェーズとして実行されます。プロジェクトに複数のターゲットがある場合、プラグインを個別に目的のターゲットに追加する必要があります。
これを行うには、 SwiftLintBuildToolPlugin
並べるターゲットのRun Build Tool Plug-ins
Build Phases
に追加します。
ヒント
プラグインを初めて使用するときは、プロンプトが表示されたら、必ず信頼して有効にしてください。マクロのビルド警告が存在する場合は、マクロを信頼して有効にするためにそれを選択します。
無人の使用(CIなど)の場合、パッケージプラグインとマクロ検証は、次のいずれかで無効にできます。
xcodebuild
オプションを使用してください:
-skipPackagePluginValidation
-skipMacroValidation
Xcodeの設定デフォルト:
defaults write com.apple.dt.Xcode IDESkipPackagePluginFingerprintValidatation -bool YES
defaults write com.apple.dt.Xcode IDESkipMacroFingerprintValidation -bool YES
重要
無人の使用オプションは、Xcodeの検証ダイアログをバイパスし、すべてのプラグインとマクロを暗黙的に信頼しています。
Swiftlintの構成ファイルがパッケージ/プロジェクトディレクトリの外側にあるプロジェクト構造は、ビルドツールプラグインによって直接サポートされていません。これは、引数を渡してツールプラグインを構築することができないためです(たとえば、構成ファイルパスを渡す)。
プロジェクト構造がビルドツールプラグインで直接動作しない場合は、次のオプションのいずれかを検討してください。
parent_config: path/to/.swiftlint.yml
追加して、他の構成ファイルへの親構成パスを指定することができます。注記
使用したインストール方法に基づいて、実行スクリプトビルドフェーズのシェルコマンド構文が異なる場合があるか、追加の構成が必要になる場合があります。詳細については、インストール手順を参照してください。
ビルドツールプラグインがプロジェクトのセットアップで機能しない場合、または追加のカスタムセットアップが必要な場合、SwiftLintを実行スクリプトビルドフェーズとして追加できます。これは、プロジェクトのセットアップが--config
swiftlintオプションに依存している場合に役立ちます。または、すべてのターゲットを単一のswiftlint
呼び出しで一緒にリントすること。ファイルの包含物と除外は、 .swiftlint.yml
構成で構成できます。
これを行うには、 Compile Sources
フェーズの後に、プライマリアプリターゲットのBuild Phases
のRun Script
フェーズにカスタムスクリプトを追加します。次のスクリプト実装を使用します。
if command -v swiftlint > /dev/null 2>&1
then
swiftlint
else
echo " warning: ` swiftlint ` command not found - See https://github.com/realm/SwiftLint#installation for installation instructions. "
fi
swiftパッケージでswiftlintpluginを使用している場合は、次の方法でswiftlint
実行可能ファイルを参照できます。
SWIFT_PACKAGE_DIR= " ${BUILD_DIR % Build /* } SourcePackages/artifacts "
SWIFTLINT_CMD= $( ls " $SWIFT_PACKAGE_DIR " /swiftlintplugins/SwiftLintBinary/SwiftLintBinary.artifactbundle/swiftlint- * /bin/swiftlint | head -n 1 )
if test -f " $SWIFTLINT_CMD " 2>&1
then
" $SWIFTLINT_CMD "
else
echo " warning: ` swiftlint ` command not found - See https://github.com/realm/SwiftLint#installation for installation instructions. "
fi
注記
SWIFTLINT_CMD
パスは、デフォルトのxcode構成を使用し、xcode 15/16でテストされています。別の構成の場合(例:カスタムスウィフトパッケージパスなど)、それに応じて値を調整してください。
ヒント
Based on dependency analysis
チェックを解除して、すべての増分ビルドでswiftlint
を実行し、不特定の出力警告を抑制します。
Xcode 15は、 ENABLE_USER_SCRIPT_SANDBOXING
ビルド設定のデフォルト値をNO
からYES
に設定することにより、大きな変更を加えました。その結果、Swiftlintは、ファイル許可の欠落に関連するエラーに遭遇します。これは通常error: Sandbox: swiftlint(19427) deny(1) file-read-data.
この問題を解決するには、Swiftlintが設定されている特定のターゲットに対して、 ENABLE_USER_SCRIPT_SANDBOXING
設定をNO
で設定する必要があります。
AppleシリコンのHomebrewを介してSwiftlintをインストールした場合、この警告が発生する可能性があります。
warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint
これは、Apple SiliconのHomebrewがデフォルトで/opt/homebrew/bin
フォルダーにバイナリをインストールするためです。 XcodeにSwiftlintを見つける場所に指示するには、ビルドフェーズのPATH
環境変数に追加/opt/homebrew/bin
追加できます。
if [[ " $( uname -m ) " == arm64 ]]
then
export PATH= " /opt/homebrew/bin: $PATH "
fi
if command -v swiftlint > /dev/null 2>&1
then
swiftlint
else
echo " warning: ` swiftlint ` command not found - See https://github.com/realm/SwiftLint#installation for installation instructions. "
fi
または、実際のバイナリを指す/usr/local/bin
でシンボリックリンクを作成できます。
ln -s /opt/homebrew/bin/swiftlint /usr/local/bin/swiftlint
違反を修正したい場合は、スクリプトがSwiftlintを実行することができます - swiftlint
の代わりにswiftlint --fix && swiftlint
。これは、すべての正しい違反が修正され、残りの違反についてプロジェクトに警告が表示されることを意味します。
cocoapodsを介してSwiftlintをインストールした場合、スクリプトは次のようになります。
" ${PODS_ROOT} /SwiftLint/swiftlint "
SwiftlintをVisual Studioコードと統合するには、 vscode-swiftlint
拡張機能をMarketPlaceからインストールします。
公式のswiftlint
Fastlaneアクションを使用して、FastLaneプロセスの一部としてSwiftlintを実行できます。
swiftlint (
mode : :lint , # SwiftLint mode: :lint (default) or :autocorrect
executable : "Pods/SwiftLint/swiftlint" , # The SwiftLint binary path (optional). Important if you've installed it via CocoaPods
path : "/path/to/lint" , # Specify path to lint (optional)
output_file : "swiftlint.result.json" , # The path of the output file (optional)
reporter : "json" , # The custom reporter to use (optional)
config_file : ".swiftlint-ci.yml" , # The path of the configuration file (optional)
files : [ # List of files to process (optional)
"AppDelegate.swift" ,
"path/to/project/Model.swift"
] ,
ignore_exit_status : true , # Allow fastlane to continue even if SwiftLint returns a non-zero exit status (Default: false)
quiet : true , # Don't print status logs like 'Linting ' & 'Done linting' (Default: false)
strict : true # Fail on warnings? (Default: false)
)
Swiftlintは、 Ubuntu
を使用したDocker画像としても利用できます。したがって、次のコマンドを使用してDocker画像をプルする必要があるのは初めてです。
docker pull ghcr.io/realm/swiftlint:latest
その後、次に、次のようにdocker内でswiftlint
を実行するだけです。
docker run -it -v ` pwd ` : ` pwd ` -w ` pwd ` ghcr.io/realm/swiftlint:latest
これにより、現在のフォルダー( pwd
)でswiftlint
が実行され、次のような出力が表示されます。
$ docker run -it -v ` pwd ` : ` pwd ` -w ` pwd ` ghcr.io/realm/swiftlint:latest
Linting Swift files in current working directory
Linting ' RuleDocumentation.swift ' (1/490)
...
Linting ' YamlSwiftLintTests.swift ' (490/490)
Done linting ! Found 0 violations, 0 serious in 490 files.
ここでは、Docker画像の使用に関する詳細なドキュメントがあります。
$ swiftlint help
OVERVIEW: A tool to enforce Swift style and conventions.
USAGE: swiftlint <subcommand>
OPTIONS:
--version Show the version.
-h, --help Show help information.
SUBCOMMANDS:
analyze Run analysis rules
docs Open SwiftLint documentation website in the default web browser
generate-docs Generates markdown documentation for selected group of rules
lint (default) Print lint warnings and errors
baseline Operations on existing baselines
reporters Display the list of reporters and their identifiers
rules Display the list of rules and their identifiers
version Display the current version of SwiftLint
See 'swiftlint help <subcommand>' for detailed help.
Swift Filesを含むswiftlint
ディレクトリで実行します。ディレクトリは再帰的に検索されます。
lint
またはanalyze
使用するときにファイルのリストを指定するには( ExtraBuildPhase
xcodeプラグインによって指定されたxcodeによって変更されたファイルのリスト、またはgit ls-files -m
に基づいて作業ツリーの変更されたファイルのように)。 Option --use-script-input-files
、次のインスタンス変数を設定します: SCRIPT_INPUT_FILE_COUNT
およびSCRIPT_INPUT_FILE_0
、 SCRIPT_INPUT_FILE_1
、...、 SCRIPT_INPUT_FILE_{SCRIPT_INPUT_FILE_COUNT - 1}
。同様に、ファイルは--use-script-input-file-lists
して、次のインスタンス変数を設定し、 SCRIPT_INPUT_FILE_LIST_COUNT
とSCRIPT_INPUT_FILE_LIST_0
、 SCRIPT_INPUT_FILE_LIST_1
、...、 SCRIPT_INPUT_FILE_LIST_{SCRIPT_INPUT_FILE_LIST_COUNT - 1}
これらは、カスタムXcodeスクリプトフェーズへの入力ファイルに設定された同じ環境変数です。
swiftlintはsourcekitにフックするので、Swiftが進化するにつれて機能し続けます!
また、Swiftlintはリーンを維持します。完全なSwiftコンパイラと一緒に出荷する必要はないため、すでにマシンにインストールしている公式のコンパイラと通信します。
コードをコンパイルするために使用するのと同じツールチェーンで、常にSwiftlintを実行する必要があります。
複数のツールチェーンまたはXcodeがインストールされている場合、SwiftlintのデフォルトのSwiftツールチェーンをオーバーライドすることをお勧めします。
Swiftlintが使用するSwiftツールチェーンを決定する順序は次のとおりです。
$XCODE_DEFAULT_TOOLCHAIN_OVERRIDE
$TOOLCHAIN_DIR
または$TOOLCHAINS
xcrun -find swift
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain
/Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain
~/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain
~/Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain
sourcekitd.framework
、上記のパスで渡された値のusr/lib/
サブディレクトリにあると予想されます。
また、Swift ToolChainバージョンを識別するTOOLCHAINS
Environment変数を逆DNS表記に設定することもできます。
TOOLCHAINS=com.apple.dt.toolchain.Swift_2_3 swiftlint --fix
Linuxでは、SourceKitは/usr/lib/libsourcekitdInProc.so
に配置されるか、 LINUX_SOURCEKIT_LIB_PATH
環境変数によって指定される予定です。
pre-commit
フックSwiftlintは、コミット前のフックとして実行できます。インストールしたら、リポジトリのルートにある.pre-commit-config.yaml
にこれを追加します。
repos :
- repo : https://github.com/realm/SwiftLint
rev : 0.50.3
hooks :
- id : swiftlint
rev
選択したSwiftlintバージョンに調整します。 pre-commit autoupdate
を使用して、現在のバージョンに更新できます。
swiftlintは、 entry
使用して修正を適用し、エラーで失敗することができます。
- repo : https://github.com/realm/SwiftLint
rev : 0.50.3
hooks :
- id : swiftlint
entry : swiftlint --fix --strict
Swiftlintには200以上のルールが含まれており、Swiftコミュニティ(あなたです!)は、時間の経過とともにさらに貢献し続けています。プルリクエストをお勧めします。
ルールの更新リストとそれらの詳細については、こちらをご覧ください。
また、ソース/swiftlintbuiltinrules/ルールディレクトリを確認して、実装を確認することもできます。
opt_in_rules
はデフォルトで無効になります(つまり、構成ファイルでそれらを明示的に有効にする必要があります)。
ルールをオプトインとしてマークするタイミングに関するガイドライン:
empty_count
)force_unwrapping
など)ルールは、次の形式を備えたソースファイル内のコメントで無効にできます。
// swiftlint:disable <rule1> [<rule2> <rule3>...]
ルールは、ファイルの終了まで、またはリナーが一致する有効なコメントを見るまで無効になります。
// swiftlint:enable <rule1> [<rule2> <rule3>...]
例えば:
// swiftlint:disable colon
let noWarning : String = " " // No warning about colons immediately after variable names!
// swiftlint:enable colon
let hasWarning : String = " " // Warning generated about colons immediately after variable names
all
キーワードを含めると、リナーが一致する有効なコメントが表示されるまで、すべてのルールが無効になります。
// swiftlint:disable all
// swiftlint:enable all
例えば:
// swiftlint:disable all
let noWarning : String = " " // No warning about colons immediately after variable names!
let i = " " // Also no warning about short identifier names
// swiftlint:enable all
let hasWarning : String = " " // Warning generated about colons immediately after variable names
let y = " " // Warning generated about short identifier names
また、Applind :previous
、 :this
または:next
コマンドのみをそれぞれ適用するために、それぞれ(現在)または次の行にコマンドを適用することにより、コマンドdisable
またはenable
コマンドを変更することもできます。
例えば:
// swiftlint:disable:next force_cast
let noWarning = NSNumber ( ) as! Int
let hasWarning = NSNumber ( ) as! Int
let noWarning2 = NSNumber ( ) as! Int // swiftlint:disable:this force_cast
let noWarning3 = NSNumber ( ) as! Int
// swiftlint:disable:previous force_cast
swiftlint rules
実行して、利用可能なすべてのルールとその識別子のリストを印刷します。
.swiftlint.yml
ファイルをディレクトリから追加してSwiftlintを追加して構成します。次のパラメーターを構成できます。
ルールインクルージョン:
disabled_rules
:デフォルトの有効なセットからルールを無効にします。opt_in_rules
:デフォルトセットの一部ではないルールを有効にします。 Special all
Identifierは、 disabled_rules
にリストされているものを除き、すべてのオプトインリンタールールを有効にします。only_rules
:このリストで指定されたルールのみが有効になります。 disabled_rules
またはopt_in_rules
と一緒に指定することはできません。analyzer_rules
:これは、 analyze
コマンドによってのみ実行されるルールの完全に個別のリストです。すべてのアナライザールールはオプトインであるため、これが唯一の構成可能なルールリストであり、 disabled_rules
とonly_rules
に相当するものはありません。ここでは、 disabled_rules
にリストされているものを除き、すべてのアナライザールールを有効にするために、特別なall
識別子を使用することもできます。 # By default, SwiftLint uses a set of sensible default rules you can adjust:
disabled_rules : # rule identifiers turned on by default to exclude from running
- colon
- comma
- control_statement
opt_in_rules : # some rules are turned off by default, so you need to opt-in
- empty_count # find all the available rules by running: `swiftlint rules`
# Alternatively, specify all rules explicitly by uncommenting this option:
# only_rules: # delete `disabled_rules` & `opt_in_rules` if using this
# - empty_parameters
# - vertical_whitespace
analyzer_rules : # rules run by `swiftlint analyze`
- explicit_self
# Case-sensitive paths to include during linting. Directory paths supplied on the
# command line will be ignored.
included :
- Sources
excluded : # case-sensitive paths to ignore during linting. Takes precedence over `included`
- Carthage
- Pods
- Sources/ExcludedFolder
- Sources/ExcludedFile.swift
- Sources/*/ExcludedFile.swift # exclude files with a wildcard
# If true, SwiftLint will not fail if no lintable files are found.
allow_zero_lintable_files : false
# If true, SwiftLint will treat all warnings as errors.
strict : false
# If true, SwiftLint will treat all errors as warnings.
lenient : false
# The path to a baseline file, which will be used to filter out detected violations.
baseline : Baseline.json
# The path to save detected violations to as a new baseline.
write_baseline : Baseline.json
# If true, SwiftLint will check for updates after linting or analyzing.
check_for_updates : true
# configurable rules can be customized from this configuration file
# binary rules can set their severity level
force_cast : warning # implicitly
force_try :
severity : warning # explicitly
# rules that have both warning and error levels, can set just the warning level
# implicitly
line_length : 110
# they can set both implicitly with an array
type_body_length :
- 300 # warning
- 400 # error
# or they can set both explicitly
file_length :
warning : 500
error : 1200
# naming rules can set warnings/errors for min_length and max_length
# additionally they can set excluded names
type_name :
min_length : 4 # only warning
max_length : # warning and error
warning : 40
error : 50
excluded : iPhone # excluded via string
allowed_symbols : ["_"] # these are allowed in type names
identifier_name :
min_length : # only min_length
error : 4 # only error
excluded : # excluded via string array
- id
- URL
- GlobalAPIKey
reporter : " xcode " # reporter type (xcode, json, csv, checkstyle, codeclimate, junit, html, emoji, sonarqube, markdown, github-actions-logging, summary)
文字列に${SOME_VARIABLE}
を使用して、構成ファイルの環境変数を使用することもできます。
メインのSwiftlintプロジェクトが登場するルールに加えて、Swiftlintは自分のプロジェクトで自分自身を定義できる2種類のカスタムルールを実行することもできます。
これらのルールは、Swiftlintで出荷されるSwiftベースのルールと同じ方法で記述されているため、高速で正確で、SwiftSyntaxを活用し、単体テストを行うことができます。
これらを使用するには、github.com/jpsim/swiftlint-bazel-exampleでこのビデオまたはそれに関連するコードに記載されているように、バゼルでSwiftlintを構築する必要があります。
次の構文を使用して、構成ファイルでカスタムの正規表現ベースのルールを定義できます。
custom_rules :
pirates_beat_ninjas : # rule identifier
included :
- " .* \ .swift " # regex that defines paths to include during linting. optional.
excluded :
- " .*Test \ .swift " # regex that defines paths to exclude during linting. optional
name : " Pirates Beat Ninjas " # rule name. optional.
regex : " ([nN]inja) " # matching pattern
capture_group : 0 # number of regex capture group to highlight the rule violation at. optional.
match_kinds : # SyntaxKinds to match. optional.
- comment
- identifier
message : " Pirates are better than ninjas. " # violation message. optional.
severity : error # violation severity. optional.
no_hiding_in_strings :
regex : " ([nN]inja) "
match_kinds : string
これが出力がどのようになるかです:
正規表現パターンは、フラグs
とm
有効化とともに使用されることに注意することが重要です.
Newlinesと^
/ $
は、それぞれ行の開始と終了を一致させます。持ちたくない場合.
たとえば、Newlinesを一致させると、正規表現は(?-s)
で処理できます。
1つ以上のmatch_kinds
提供することで一致をフィルタリングできます。これは、このリストに存在しない構文の種類を含む一致を拒否します。可能なすべての構文の種類は次のとおりです。
argument
attribute.builtin
attribute.id
buildconfig.id
buildconfig.keyword
comment
comment.mark
comment.url
doccomment
doccomment.field
identifier
keyword
number
objectliteral
parameter
placeholder
string
string_interpolation_anchor
typeidentifier
Swiftコードのスニペットで使用されるすべての構文の種類は、sourcekittenを尋ねることを抽出できます。たとえば、 sourcekitten syntax --text "struct S {}"
が配信します
source.lang.swift.syntaxtype.keyword
for the struct
keyword andsource.lang.swift.syntaxtype.identifier
S
の名前上記のリストのkeyword
とidentifier
に一致します。
only_rules
と組み合わせてカスタムルールを使用する場合は、 only_rules
リストにリテラル文字列custom_rules
を含める必要があります。
only_rules :
- custom_rules
custom_rules :
no_hiding_in_strings :
regex : " ([nN]inja) "
match_kinds : string
Swiftカスタムルールとは異なり、公式のSwiftlintビルド(HomeBrewから)を使用してRegexカスタムルールを実行できます。
Swiftlintは、特定の違反を自動的に修正できます。ディスク上のファイルは、修正されたバージョンで上書きされます。
swiftlint --fix
、それ以外の場合は重要なデータが失われる可能性があります。
修正中にファイルを変更した後、違反(またはそのオフセット)が正しくない可能性が高いため、修正中は標準の糸くずが無効になります。
swiftlint analyze
コマンドは、完全なタイプチェックされたASTを使用してSwiftファイルを覆うことができます。クリーンswiftc
ビルドコマンドの呼び出し(インクリメンタルビルドが失敗する)を含むanalyze
--compiler-log-path
パスを渡す必要があります。 EG --compiler-log-path /path/to/xcodebuild.log
これはによって取得できます
xcodebuild -workspace {WORKSPACE}.xcworkspace -scheme {SCHEME} > xcodebuild.log
を実行していますswiftlint analyze --compiler-log-path xcodebuild.log
アナライザーのルールは、LINTルールよりもかなり遅くなる傾向があります。
Swiftlintは、複数の構成ファイルを含めるさまざまな方法を提供します。複数の構成ファイルが1つの構成にマージされ、単一の構成ファイルが適用されるように適用されます。
複数の構成ファイルを使用することが役立つ可能性のあるユースケースは非常に多くあります。
たとえば、子供の構成ファイルを介して各プロジェクトのオーバーライドを許可しながら、チーム全体の共有Swiftlint構成を使用できます。
チーム全体の構成:
disabled_rules :
- force_cast
プロジェクト固有の構成:
opt_in_rules :
- force_cast
構成ファイル内のchild_config
および/またはparent_config
リファレンスを指定できます。これらの参照は、指定された構成ファイルのフォルダーに関連するローカルパスである必要があります。これは、サイクルがなく曖昧さがない限り、再帰的に機能することもあります。
子の構成は洗練として扱われるため、優先度が高くなりますが、親の構成は競合の場合に優先度が低いベースと見なされます。
次のファイル構造があると仮定して、これが例です。
ProjectRoot
|_ .swiftlint.yml
|_ .swiftlint_refinement.yml
|_ Base
|_ .swiftlint_base.yml
洗練とベースファイルの両方を含めるには、 .swiftlint.yml
は次のようになります。
child_config : .swiftlint_refinement.yml
parent_config : Base/.swiftlint_base.yml
親と子の構成をマージするとき、 included
およびexcluded
構成を慎重に処理して、含有構成ファイルのディレクトリの位置の違いを説明します。
ローカルchild_config
/ parent_config
参照を提供できるように、ローカルパスを参照する代わりに、構成ファイルにつながるURLを配置できます。 Swiftlintがこれらのリモート参照を検出するには、 http://
またはhttps://
で開始する必要があります。
参照されているリモート構成ファイルは、他のリモート構成ファイルを再帰的に参照することもできますが、ローカル参照を含めることは許可されていません。
リモートリファレンスを使用して、 .swiftlint.yml
次のようになります。
parent_config : https://myteamserver.com/our-base-swiftlint-config.yml
Swiftlintを実行してインターネット接続を実行するたびに、Swiftlintは参照されるすべてのリモート構成の新しいバージョンを取得しようとします。このリクエストが廃止された場合、利用可能な場合はキャッシュされたバージョンが使用されます。利用可能なキャッシュバージョンがない場合、Swiftlintは失敗しますが、心配はありません。Swiftlintが少なくとも1回正常に実行されたら、キャッシュバージョンがそこにあるはずです。
必要に応じて、リモート構成フェッチのタイムアウトは、 remote_timeout
/ remote_timeout_if_cached
仕様を使用して、構成ファイルを介して手動で指定できます。これらの値は、それぞれデフォルトで2秒または1秒になります。
コマンドラインを介してSwiftlintを実行するときに1つの構成ファイルを提供する代わりに、最初の構成が親として扱われる階層を渡すこともできます。
2つの構成ファイルのみを含む簡単な例は次のようになります。
swiftlint --config .swiftlint.yml --config .swiftlint_child.yml
メイン構成(ルートフォルダーの.swiftlint.yml
ファイル)に加えて、 .swiftlint.yml
という名前の他の構成ファイルをディレクトリ構造に配置することができます。構成と同じディレクトリ内にあるファイル、または別の構成ファイルがないディレクトリ内のファイル。言い換えれば、ネストされた構成は再帰的に機能しません。メイン構成に加えて適用できるファイルごとに最大数のネストされた構成があります。
.swiftlint.yml
ファイルは、既にメイン構成の構築に使用されていない場合にのみネストされた構成と見なされます(たとえば、 child_config: Folder/.swiftlint.yml
のようなものを介して参照されたことにより)。また、ネストされた構成のparent_config
/ child_config
仕様は無視されています。
1つの(またはそれ以上の)Swiftlintファイルが--config
パラメーターを介して明示的に指定されている場合、その構成は、他の.swiftlint.yml
ファイルがディレクトリ内に存在するかどうかに関係なく、オーバーライドとして扱われます。したがって、ネストされた構成を使用する場合は、 --config
パラメーターを使用できません。
MITライセンス。
SwiftlintはRealm Incによって維持および資金提供されています。レルムの名前とロゴは、Realm Inc.の商標です。
オープンソースソフトウェア!他のオープンソースプロジェクトを参照したり、ブログを読んだり、Twitterでこんにちは(@Realm)。
Mac Miniを提供してパフォーマンステストを実行してくれたMacStadiumに感謝します。