首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SwiftLint -允许一行警卫

SwiftLint -允许一行警卫
EN

Stack Overflow用户
提问于 2020-05-15 09:45:07
回答 3查看 1.5K关注 0票数 0

SwiftLint --如何允许这样的一行保护条件:

代码语言:javascript
复制
guard let x = true else { return false }

并在其他情况下保留conditional_returns_on_newline功能?

编辑:

据我所知,SwiftLint定义了违规规则,因此我必须编写正则表达式,扫描行以搜索:

代码语言:javascript
复制
if[...]{[...]}

还请注意以下情况:

代码语言:javascript
复制
if array1.sorted(by: { $0 > $1 }).first! > 0, array2.isEmpty { x = 1 }
EN

回答 3

Stack Overflow用户

发布于 2020-09-11 14:44:03

默认情况下禁用SwifLint规则conditional_returns_on_newline。所以,

  1. 首先,启用conditional_returns_on_newline规则。
  2. if_only设置为true

不需要写任何自定义规则

.swiftlint.yml配置:

代码语言:javascript
复制
opt_in_rules: # some rules are only opt-in
    - conditional_returns_on_newline

conditional_returns_on_newline:
    if_only: true  

这里是规则链接:

newline.html

票数 2
EN

Stack Overflow用户

发布于 2020-05-15 11:30:24

实现这一目标有两种方法。

  1. 您可以禁用conditional_returns_on_newline规则。通过更新保存在项目代码文件夹中的规则文件,可以在代码块级别、源文件级别或项目级别禁用它。这样做将禁用每个这样的语句的规则(取决于禁用范围),如if true { return }if true { return "YES" } else { return "NO" }等,这是解释,我认为您不想这样做。
  2. 第二种方法是编写自己的正则表达式规则。可以在配置这是详细的解释中定义基于自定义regex的规则。

编辑

第2点的高级别实现,遵循以下步骤.

  1. 打开.swiftlint.yml并在项目级别禁用给定的规则conditional_returns_on_newline
  2. 编写您自己的自定义规则,该规则将只验证新行上的每个条件返回,但一行保护返回除外。
  3. 将自定义规则(我命名为ks_conditional_returns_on_newline)添加到.swiftlint.yml文件中,您可以根据需要决定rule namemessageseverityincluded等参数。

示例

代码语言:javascript
复制
custom_rules:
  ks_conditional_returns_on_newline:
    included: ".*\\.swift"
    name: "Custom Conditional Returns On New Line"
    regex: "(if)[^\n]*return"
    message: "Hey look at the the conditional returns on newline for if else"
    severity: error

我已经用Xcode验证了规则正则表达式,它运行得很好。不过,我还没有验证将它添加到.swiftlint.yml中。但我希望它能奏效。

票数 1
EN

Stack Overflow用户

发布于 2020-05-16 21:17:00

我想我能找到一个令人满意的解决办法:

  1. 禁用内置规则- conditional_returns_on_newline
  2. 为条件定义新的自定义规则:
代码语言:javascript
复制
custom_rules:
  custom_conditional_returns_on_newline:
    name: "Conditional returns on new line"
    regex: '^[\h]*(if|else|while)[^\n]*\}$'
    message: "If/else and while constructions should not be defined in one line"
    severity: warning
  1. custom_rules添加到whitelist_rules
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61816307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档