我正在swiftlint程序中创建自定义规则 这是我的参考:https://github.com/realm/SwiftLint
我想添加一个自定义规则,我必须在','之后检测2个或更多空格。所以我添加了这条规则。
comma_space_rule:
regex: ",[ ]{2,}"
message: "Expected only one space after ',"
但这不起作用。 swiftlint的帮助并没有多大帮助。 github也没有提到正则表达式规则。
所以我研究了Swift正则表达式格式,这看起来很好。我在这里错过了什么吗?
答案 0 :(得分:2)
您的自定义规则适合我。这些是我遵循的步骤:
在.swiftlint.yml
文件所在的目录中添加了.xcodeproj
,其中包含以下内容:
custom_rules:
comma_space_rule:
regex: ",[ ]{2,}"
message: "Expected only one space after ',"
添加了一个新的"运行脚本阶段"到Xcode项目:
if which swiftlint >/dev/null; then
swiftlint
else
echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
fi
建筑物给我expected warning。
答案 1 :(得分:1)
使用SwiftLint创建自定义规则很困难,因为没有验证级别,就像对“正常”规则的测试一样。尝试使用AnyLint来解决此问题。它是用Swift编写的,但由于基于正则表达式,因此可用于任何语言。
您的用例在AnyLint中将如下所示:
// MARK: CommaSpace
try Lint.checkFileContents(
checkInfo: "CommaSpace: Expected only one space after a comma.",
regex: #", {2,}"#,
matchingExamples: ["[1, 2]", "obj.foo(x, y)"],
nonMatchingExamples: ["[1, 2]", "obj.foo(x, y)"],
includeFilters: [#".*\.swift"#]
)
使用AnyLint,您甚至可以像这样提供autocorrectReplacement
进行自动校正:
// MARK: CommaSpace
try Lint.checkFileContents(
checkInfo: ... // same parameters as above, plus:
autoCorrectReplacement: ", ",
autoCorrectExamples: [
["before": "[1, 2]", "after": "[1, 2]"],
["before": "obj.foo(x, y)", "after": "obj.foo(x, y)"],
]
)
我希望这会有所帮助。