2

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

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

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

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

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

4

2 回答 2

4

您的自定义规则对我有用。这些是我遵循的步骤:

在与我的文件.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

建筑给了我预期的警告

于 2016-05-12T06:57:46.960 回答
0

使用 SwiftLint 创建自定义规则很困难,因为没有验证级别,就像对“正常”规则的测试一样。试试AnyLint,它是专门为解决这个问题而编写的。它是用 Swift 编写的,但适用于任何语言,因为它是基于 Regex 的。

您的用例在 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)"],
    ]
)

我希望这有帮助。

于 2020-04-24T18:03:46.280 回答