当前位置: 首页 > 工具软件 > SwiftLint > 使用案例 >

iOS- 工程配置SwiftLint

惠洛华
2023-12-01

代码规范工具SwiftLint

Github公布的Swift代码规范

Homebrew安装SwiftLint

brew install swiftlint

在Xcode中添加运行脚本

在Xcode中选择Build Phase-Add Build Phase-New Run Script Phase,添加如下脚本

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

添加配置文件.swiftlint.yml

1>cd到主工程目录下,创建文件

touch .swiftlint.yml

2>打开文件(Command+Shift+.可显示隐藏文件)并编译,以下规则筛选过不可用规则

excluded: 
  - Carthage
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
    - variable_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

文件说明:

  • disabled_rules:禁用指定的规则
  • opt_in_rules:启动指定的规则
  • whitelist_rules:白名单规则,不能和上面两项混用
  • included:希望Lint检索的路径,SwiftLint会扫描该路径下的所有.swift后缀的文件
  • excluded: 希望不要检索的路径,SwiftLint会无视掉该路径下的文件,一般比如Pods、Carthage或者一些三方库

Swift规则说明

SwiftLint命令行

   autocorrect     Automatically correct warnings and errors(将已知的能够自动修复的Error和Warning都自动修复,一般旧的项目配置SwiftLint之后会出现大量的报错和警告,此命令可减少大部分工作量)
   generate-docs   Generates markdown documentation for all rules
   help            Display general or command-specific help
   lint            Print lint warnings and errors (default command)
   rules           Display the list of rules and their identifiers
   version         Display the current version of SwiftLint

更新SwiftLint

brew upgrade swiftlint

 

 类似资料: