我已经创建了正则表达式来确定一个类后面是否有一个空行。在xcode中搜索时,这非常有效。但是,swiftlint似乎不能正常工作。
规则是:
custom_rules:
space_after_class:
name: "No Space After Class"
message: "Empty line required after class declarations"
regex: '(^(open|internal|private|public)*class\s(?!func).*\{$\n(?!^\s*$))'
severity: error
在xcode / sublime / whatever中搜索时工作正常,但由于某种原因,在swiftlint中返回所有类声明(即使是那些带有新行的声明)
规则示例(注意空白行 - 使用ctrl + f找不到相同的正则表达式):
导致这种情况的swiftlint正则表达式有何不同?
答案 0 :(得分:0)
您的yml文件需要正确格式化。尝试使用任何Yaml验证器在线验证它。 似乎您的正则表达式需要用引号“代替`。
答案 1 :(得分:0)
使用SwiftLint创建自定义规则很困难,因为没有验证级别,就像对“正常”规则的测试一样。尝试使用AnyLint来解决此问题。它是用Swift编写的,但由于基于正则表达式,因此可用于任何语言。
您的用例在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"],
]
)
我希望这会有所帮助。