加载中...

SwiftLint安装与使用


SwiftLintRealm 推出的一款 Swift 代码规范检查工具(Realm推出过一款跨平台的移动端数据库)。
SwiftLint 基于 Github 公布的 Swift 代码规范进行代码检查,并且能够很好的和 Xcode 整合。配置好所有的设置之后,在 Xcode 中执行编译时,SwiftLint 会自动运行检查,不符合规范的代码会通过警告或者 error 的形式指示出来,并且拥有丰富的配置项,可以进行大量的自定义,相当方便。

安装:

  1. 使用 Homebrew 安装

    brew install SwiftLint

    升级swiftlint版本

    brew upgrade swiftlint
  2. 通过 CocoaPods 安装同样很简单,只需要在 Podfile 中添加依赖:

    pod 'SwiftLint'

    之后执行 pod install 就可以自动安装了,这种方式会将 SwiftLint 安装到项目的 Pods/ 目录下。如果你想要针对不同的项 目使用不同的 SwiftLint 版本,这是一种很好的解决方案(Homebrew 会自动安装最新版本)。需要注意的是使用这种方案会将整个 ** SwiftLint** 以及他的依赖包的完整资源文件都安装到 Pods/ 目录中去,所以在使用版本管理工具比如 git 时要注意设置忽略相关目录。

  3. 使用安装包

    SwiftLint 还支持使用 pkg 安装包进行安装,在官方的 Github 页面可以找到最新发布的安装包

使用:

接下来需要在工程中配置相关编译选项,才能使 SwiftLint 在 Xcode 中运行起来。配置也很简单,只需要在 Xcode 的 Build Phases 中新建一个 Run Script Phase 配置项,在里面添加如下代码:

if which swiftlint >/dev/null; then
  swiftlint
else
  echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
fi

如果是通过 CocoaPods 安装的 SwiftLint ,脚本替换为 CocoaPods 中的路径:

"${PODS_ROOT}/SwiftLint/swiftlint"

.swiftlint.yml配置:

included:
  - XXXX/Classes
excluded: 
  # - Pods
  # - Carthage
  # - Resources
  - R.generated.swift
disabled_rules:
    - colon # 冒号的使用, swiftlint的这个colon属性规则很简单,要求“ :”紧靠所定义的常量或变量等,必须没有空格,与所指定的类型之间必须只有一个空格,多一个或少一个都不行,如果是用在Dictionary中,则要求紧靠Key,与Value之间必须有且仅有一个空格。这个规则我觉得应该强制推荐使用
    # - force_cast # 强制转换, 强制转换应该被避免,否则直接报 error。
    # - type_name # 类型名, 类型名应该只包含字母数字字符, 并且以大写字母开头,长度在3-40个字符。这个属性没什么好说的,强烈推荐使用。
    # - function_body_length #函数体长度, 函数体不应该跨越太多行, 超过40行给warning, 超过100行直接报错。推荐使用。
    # - control_statement #控制语句, if、for、while、do语句不应该将 条件 写在 圆括号 中, 另外注意条件出的空格。
    - type_body_length #类型体长度。类型体长度不应该跨越太多行, 超过200行给warning,超过350行给error。一般是大括号或者括号内, 比如定义一个enum或struct。
    - nesting
    - identifier_name # 变量名应该只包含字符数字字符, 并且只能以小写字母开头或者应该只包含大写字母。此外,当变量名被声明为static(静态)变量时或者immutable不可变的时候,这时或许可以以一个大写字母开头。最后,变量名不应该太长或者太短(应该在3-40个字符间,否则会触发警告!!!)。注意:目前变量名只适用于自己写的方法的参数和自己写的class中的全局常量或变量, 对于系统自带的方法里面和自己写的方法里面没有作用
    - line_length # 行的字符长度属性。这个强烈不推荐使用。官方的规定是超过120字符就给warning,
    - trailing_whitespace # 尾部空白行强烈不推荐使用
    # - todo # TODO 和 FIXME 应该避免使用, 使用“notaTODO 和 notaFIXME”代替。另外, 和 MARK 标记不同的是, “notaTODO 和 notaFIXME”没有空格要求,但是我建议如果要使用这个 todo 属性, 尽量写成和 MARK 一样的规范。
    # - legacy_constructor
    - valid_docs # 有效文件 。 文件声明应该有效 。这个属性和属性62有冲突, 而且重复, 官网文档写得有问题。另外在swift 3.0上测试并不会发生warning。暂时不举例,这个属性禁用!!!后期等官方完善之后再追加。
    - missing_docs # 缺失说明注释, 官方解释:”Public declarations should be documented.”, 公共声明应该被注释/标记。 在函数声明的时候, 一般情况下, 带public关键字的函数的注释只能用 “///”和 “/* /”来注释, 如果不带public关键字的函数只能用 “//”和 “/* */” 。这个属性应该禁用,没必要!!!
    - file_length # 文件行长度违规:文件应包含400行或以下
    - cyclomatic_complexity # 函数命名的复杂度应该为10或以下,尽量简单比如参数不要过多,修饰符不要过多不然会报错 循环复杂度。函数体的复杂度应该要限制,这个属性主要约束条件句、循环句中的循环嵌套问题, 当嵌套太多的循环时,则会触发swiftlint中的warning和error,当达到10个循环嵌套时就会报warning,达到20个循环嵌套时就会报error,强烈推荐这个属性。嵌套太多,可读性差!
    - large_tuple # 元组冲突:元组应该最多有2个成员,多余两个会报错
    - function_parameter_count # 函数参数计数违例:函数应该有5个参数,多余会报错 函数参数个数, 函数参数数量(init方法除外)应该少点, 不要太多,swiftlint规定函数参数数量超过5个给warning, 超过8个直接报error。这个属性推荐使用, 由于简单就不举例了。注:function_parameter_count: error 这样并不能改变它的警告或错误,该属性不允许修改,但是可以禁用
    - multiple_closures_with_trailing_closure # 多个闭包与尾随闭包冲突:在传递多个闭包参数时不应该使用尾随关闭语法。
identifier_name:
    excluded: id # 允许命名为id

type_name:
  min_length: 3
  max_length: 
    warning: 40
    error: 50
  allowed_symbols: ["_"] #允许包含符号

文章作者: km
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 km !
  目录