弃用通知:此仓库已被弃用,因为 SwiftLint 集成现在已作为一等功能集成到 Danger Swift 中。 您可以阅读 此问题 以了解更多背景信息。 此仓库将继续可用作旧版使用,但新项目不应使用此仓库。
用于 SwiftLint 的 Danger Swift 插件。 这样您就可以在您的 pull request 上获得 SwiftLint 警告!
(注意:如果您正在寻找此 Danger 插件的 *Ruby* 版本,它已被移动到这里。)
像往常一样 安装和运行 Danger Swift,并在您的 CI 配置文件中安装 SwiftLint。 像这样:
dependencies:
override:
- npm install -g danger # This installs Danger
- brew install danger/tap/danger-swift # This installs Danger-Swift
- brew install swiftlint # This is for the Danger SwiftLint plugin.
然后使用以下 Dangerfile.swift
。
// Dangerfile.swift
import Danger
import DangerSwiftLint // package: https://github.com/ashfurrow/danger-swiftlint.git
SwiftLint.lint()
这将检查已创建和修改的文件
如果您希望 lint 结果显示在 diff 中而不是评论中,您可以使用 inline_mode 选项。 diff 之外的违规行为将显示在 danger 的 fail 或 warn 部分。
SwiftLint.lint(inline: true)
您还可以使用 configFile
参数指定配置文件的路径,并使用 directory
参数指定要 lint 的目录的路径。 这在你想要为不同的目录使用不同的配置文件时很有用。 例如,Harvey 想要以不同于源文件的方式检查测试文件,因此他们有以下设置
SwiftLint.lint(directory: "Sources", configFile: ".swiftlint.yml")
SwiftLint.lint(directory: "Tests", configFile: "Tests/HarveyTests/.swiftlint.yml")
默认情况下,只检查已添加或修改的文件。
在这种情况下,无法使用 嵌套配置,因为 Danger SwiftLint 会单独检查每个文件,这样做会禁用嵌套配置。 如果你想了解更多细节,请阅读整个问题这里。
但是,您可以使用 lintAllFiles
选项来检查所有文件。 在这种情况下,Danger SwiftLint 不会单独检查文件,这使得嵌套配置可以工作。 这与您在根文件夹上运行 swiftlint
相同
SwiftLint.lint(lintAllFiles: true)
默认情况下,Danger SwiftLint 运行 swiftlint
,假设它是全局安装的。 但是,在某些情况下,使用不同的路径是有意义的。 一个例子是您使用 CocoaPods 安装了 SwiftLint。
要使用另一个二进制文件,您可以使用 swiftlintPath
选项
SwiftLint.lint(swiftlintPath: "Pods/SwiftLint/swiftlint")
如果您发现错误,请打开一个 issue! 或者一个 pull request 😉
不,我是认真的。
这是我写的第一个命令行 Swift,也是任何人写的第一个 Danger Swift 插件,所以如果有什么不工作,我真的很需要你的帮助来找出问题。
一个好的开始是编写一个失败的单元测试。 然后您可以尝试修复错误。 首先,您需要 fork 该 repo 并在本地克隆您的 fork。 构建它并运行单元测试。
git clone https://github.com/YOUR_USERNAME/danger-swiftlint.git
cd danger-swiftlint
swift build
swift test
好吧,在继续之前,验证到目前为止一切正常。 要编写您的测试并修改插件文件,请运行 swift package generate-xcodeproj
。 打开生成的 Xcode 项目,并享受代码自动完成和内联文档的现代性。 您甚至可以从 Xcode 运行单元测试(有时结果与运行 swift test
不一致)。
单元测试难以覆盖的一个地方是与 swiftlint
命令行工具的集成。 如果您在那里更改代码,请打开一个 pull request(像这个)来测试一切是否正常工作。
有无数种方法可以为个人用例自定义此插件。 在构建 此插件的 Ruby 版本之后,我意识到很难扩展一个适用于所有人的工具。 因此,我将此项目视为一个模板,您可以 fork 并根据您的喜好进行自定义!
import DangerSwiftLint
包 URL 以指向您的 fork。因为您需要标记一个新版本,所以测试您的插件可能很棘手。 我构建了一些基本的单元测试,所以您应该能够对大多数更改使用测试驱动开发。
如果您认为您有一个真正通用的功能,此插件的大多数用户都会从中受益,我将感谢您的 pull request。