SwiftLint 自动规范代码工具(下)

简介: SwiftLint 自动规范代码工具(下)

配置 .swiftlint.yml 文件


但是又出现了一个问题,在项目的根目录之下执行自动纠正,SwiftLint 会将 Pods 文件夹中的 Swift 文件也一起纠正了,第三方的框架原则上能不动就不动,那么我们该怎么办呢?


先给规则文档,用到自取:github.com/realm/Swift…

这个时候就需要 .swiftlint.yml 文件了。那么这是一个什么文件呢?在使用SwiftLint的时候,很多时候我们会碰到一些自定义的规则需求,这个时候就需要 .swiftlint.yml 来解决问题了。


  1. 打开终端, cd 到项目根目录下
  2. 输入: touch .swiftlint.yml
  3. 执行完该命令后, 在文件夹中你可能找不到该yml格式文件,那是因为文件被隐藏了
  4. 关于隐藏/显示隐藏文件(命令一样): command + shift + .

下面我们来认识一下主要的几个配置选项,其实看注释就基本明白了。

disabled_rules: # 执行时排除掉的规则
  - colon
  - comma
  - control_statement
opt_in_rules: # 一些规则仅仅是可选的
  - empty_count
  - missing_docs
  # 可以通过执行如下指令来查找所有可用的规则:
  # swiftlint rules
included: # 执行 linting 时包含的路径。如果出现这个 `--path` 会被忽略。
  - DemoPro
excluded: # 执行 linting 时忽略的路径。 优先级比 `included` 更高。
  - Carthage
  - Pods
  - Source/ExcludedFolder
  - Source/ExcludedFile.swift
# 可配置的规则可以通过这个配置文件来自定义
# 二进制规则可以设置他们的严格程度
force_cast: warning # 隐式
force_try:
  severity: warning # 显式
# 同时有警告和错误等级的规则,可以只设置它的警告等级
# 隐式
line_length: 110
# 可以通过一个数组同时进行隐式设置
type_body_length:
  - 300 # warning
  - 400 # error
# 或者也可以同时进行显式设置
file_length:
  warning: 500
  error: 1200
# 命名规则可以设置最小长度和最大程度的警告/错误
# 此外它们也可以设置排除在外的名字
type_name:
  min_length: 4 # 只是警告
  max_length: # 警告和错误
    warning: 40
    error: 50
  excluded: iPhone # 排除某个名字
identifier_name:
  min_length: # 只有最小长度
    error: 4 # 只有错误
  excluded: # 排除某些名字
    - id
    - URL
    - GlobalAPIKey
reporter: "xcode" # 报告类型 (xcode, json, csv, checkstyle)


源码注释


可以通过在一个源文件中定义一个如下格式的注释来关闭某个规则:

// swiftlint:disable <rule>


在该文件结束之前或者在定义如下格式的匹配注释之前,这条规则都会被禁用:

// swiftlint:enable <rule>

例如:

// swiftlint:disable opening_brace
func initTakeScreenshot(launchOptions: [AnyHashable: Any]?){
    // swiftlint:enable opening_brace
    if let options = launchOptions {
        let userInfo = options[UIApplicationLaunchOptionsKey.remoteNotification]
        NotificationCenter.default.post(name: Notification.Name.UIApplicationUserDidTakeScreenshot, object: userInfo)
    }
}

规则关闭之前


image.png


规则关闭之后


image.png


也可以通过添加 :previous, :this 或者 :next 来使关闭或者打开某条规则的命令分别应用于前一行,当前或者后一行代码。

例如:

// swiftlint:disable:next force_cast
let noWarning = NSNumber() as! Int
let hasWarning = NSNumber() as! Int
let noWarning2 = NSNumber() as! Int // swiftlint:disable:this force_cast
let noWarning3 = NSNumber() as! Int
// swiftlint:disable:previous force_cast

建议使用代码块来简化操作吧~


嵌套配置


SwiftLint 支持通过嵌套配置文件的方式来对代码分析过程进行更加细致的控制。

  • 在你的根 .swiftlint.yml 文件里设置 use_nested_configs: true 值。
  • 在目录结构必要的地方引入额外的 .swiftlint.yml 文件。
  • 每个文件被检查时会使用在文件所在目录下的或者父目录的更深层目录下的配置文件。否则根配置文件将会生效。
  • excluded,included,和 use_nested_configs 在嵌套结构中会被忽略。


自动更正


  • SwiftLint 可以自动修正某些错误,磁盘上的文件会被一个修正后的版本覆盖。
  • 请确保在对文件执行 swiftlint autocorrect 之前有对它们做过备份,否则的话有可能导致重要数据的丢失。
  • 因为在执行自动更正修改某个文件后很有可能导致之前生成的代码检查信息无效或者不正确,所以当在执行代码更正时标准的检查是无法使用的。


Maker


在实际的使用中,.swiftlint.yml 的创建也是非常频繁的,尤其是如果你是通过模块化的开发,那么每当新建一个模块或者给一个模块添加 Lint 的时候,你就需要创建至少一个 .yml 文件,所以个人建议可以给 SwiftLint 添加一个辅助的命令行。

我使用 Swift 简单实现了一个 Maker,将其编译之后的二进制可执行文件拷贝到 /usr/local/bin 之后就可以使用了。



image.png


之后我们通过下面的命令就可以快速的创建一个YML文件,我们只需要在模板文件的基础上进行修改就可以了:

maker -y

image.png


1)Xcode编译方案


首先我们打开Maker工程,然后点击 Archive(签名的事情自己搞定啊):


image.png


稍等片刻,我们的程序就编译完成了,导出到指定文件路径,只需要两句命令:


image.png


2)命令行编译方案

第二种方法直接通过纯命令的方式,更加简单:

cd path # 这里的path是指main.swift所在的文件目录之下
swiftc main.swift Maker.swift -o Maker # 编译生成二进制文件
cp Maker /usr/local/bin # 复制到目标目录之下

OK! 大功告成! 快试试Maker吧!


整理参考



目录
相关文章
|
10月前
|
API
api一键自动合约跟单模式 | 程序化交易系统开发讲解【附样板源码实例分析】
“量化交易”有着两层含义:一是从狭义上来讲,是指量化交易的内容,将交易条件转变成为程序,自动下单;二是从广义上来讲,是指系统交易方法,就是一个整合的交易系统。
|
2月前
【突破常规:让函数规范成为注目的亮点】(下)
【突破常规:让函数规范成为注目的亮点】
|
2月前
【突破常规:让函数规范成为注目的亮点】(上)
【突破常规:让函数规范成为注目的亮点】
|
2月前
|
安全 前端开发 测试技术
【测开方法论】当老功能代码命名不规范的时候...如何安全增加新功能
【测开方法论】当老功能代码命名不规范的时候...如何安全增加新功能
|
10月前
|
缓存 运维 jenkins
上线操作规范——基础版本
最近团队成员的上线操作让人头疼。几个特别突出的问题: 1、上线准备不足,设计文档中没有体现、也没有考虑到可能的资源依赖,导致临操作了才想起来做资源申请; 2、暗箱操作... 一再要求上线时需要在群内周知,以便前后端、测试、产品共同配合完成,但依然不加理会,总是要主动询问才回复已操作; 3、发布完成就认为上线完成,有时甚至不做基本的校验...
184 0
|
12月前
|
开发工具 git
代码统一风格、代码规范和提交规范
1、安装模块 全局安装 eslint、commitlint 、 check-prettier npm install eslint commitlint check-prettier -g 本地安装 npm install eslint-config-prettier  stylelint  stylelint-config-prettier stylelint-config-standard husky  @commitlint/config-conventional -D VSCode 安装 Eslint和Prettier插件
128 0
|
运维 测试技术 数据库
测试思想-流程规范 关于预发布环境的一些看法
测试思想-流程规范 关于预发布环境的一些看法
460 0
|
测试技术 BI Android开发
测试思想-流程规范 软件测试版本管理与版本发布
测试思想-流程规范 软件测试版本管理与版本发布
200 0
|
SQL XML 存储
安全开发规范:开发人员必须了解开发安全规范(一)(涉及安全问题,以及解决方法和代码实现)
安全问题其实是很多程序员想了解又容易忽略的问题,但需要我们重视起来,提高应用程序的安全性。常出现的安全问题包括,程序接受数据可能来源于未经验证的用户,网络连接和其他不受信任的来源,如果未对程序接受数据进行校验,则可能会引发安全问题等等
5276 0
安全开发规范:开发人员必须了解开发安全规范(一)(涉及安全问题,以及解决方法和代码实现)
|
IDE 前端开发 开发工具
如何方便的为团队所有项目统一 ESLint 配置
近期给团队项目 CLI 做重构,其中涉及到 ESLint 的部分,这部分之前的方式是通过开发和编译时调用 ESLint 的 CLI 去检查项目代码,虽然不会出什么问题,但是各种 IDE 的提示就废掉了,所以打算换一种比较通用的方式。