正则表达式swiftlint自定义规则

时间:2016-04-03 07:20:24

标签: regex swiftlint

我正在swiftlint程序中创建自定义规则 这是我的参考:https://github.com/realm/SwiftLint

我想添加一个自定义规则,我必须在','之后检测2个或更多空格。所以我添加了这条规则。

comma_space_rule:
  regex: ",[ ]{2,}"
  message: "Expected only one space after ',"

但这不起作用。 swiftlint的帮助并没有多大帮助。 github也没有提到正则表达式规则。

所以我研究了Swift正则表达式格式,这看起来很好。我在这里错过了什么吗?

2 个答案:

答案 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)"],
    ]
)

我希望这会有所帮助。