使用 SwiftLint 创建自定义规则很困难,因为没有验证级别,就像对“正常”规则的测试一样。试试AnyLint,它是专门为解决这个问题而编写的。它是用 Swift 编写的,但适用于任何语言,因为它是基于 Regex 的。
您的用例在 AnyLint 中看起来像这样(我修复了您的正则表达式):
// MARK: SpaceAfterClass
try Lint.checkFileContents(
checkInfo: "SpaceAfterClass: Empty line required after class declarations.",
regex: #"^((?:open |internal |private |public )?(?:final )?class (?!func)[^\n]+\{\n)(?!\s*\n)"#,
matchingExamples: ["class MyClass {\n let", "public final class MyClass {\n let"],
nonMatchingExamples: ["class MyClass {\n\n let", "public final class MyClass {\n\n let"],
includeFilters: [#".*\.swift"#]
)
使用 AnyLint,您甚至可以autocorrectReplacement
像这样提供自动更正:
// MARK: SpaceAfterClass
try Lint.checkFileContents(
checkInfo: ... // same parameters as above, plus:
autoCorrectReplacement: "$1\n",
autoCorrectExamples: [
["before": "class MyClass {\n let", "class MyClass {\n let"],
["before": "class MyClass {\n let", "class MyClass {\n\n let"],
]
)
我希望这有帮助。