SwiftLint - swift代码规范工具

目的:

  iOS APP在下一个版本会用swift开发,在多人开发中,即使有官网的规范模板.但每个人的代码风格和规范难以做到完全一致,对后期项目维护会增加一定的困难,这里主要是对一个规范代码风格工具swiftlint使用的一个评估.

介绍:

SwiftLint是Realm公司开发的一个插件,专门用于管理Swift代码的规范,能够对原有的代码自动格式化,在 Xcode 中执行编译时,SwiftLint 会自动运行检查,不符合规范的代码会通过警告或者报错的形式指示出来,并且拥有丰富的配置项,可以进行大量的自定义规范操作,是一个很方便的工具.

 安装使用:

安装:

1:可以使用homebrew进行全局安装:

需要在已经安装了homebrew 前提下:

打开终端输入:

brew install SwiftLint 

2:使用cocoaPods安装: 

pod ’SwiftLint’,这个方式可以安装不同版本的SwiftLint但是只能针对单个项目.

3:SwiftLint支持pkg安装包安装.

使用:

安装完成后,需要在Xcode中的Build Phases新建一个 Run Script Phase 配置项添加脚本,

 1:全局安装添加脚本

if which swiftlint >/dev/null; then

  swiftlint

else

  echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"

fi

2:CocoaPods安装添加脚本

"${PODS_ROOT}/SwiftLint/swiftlint"

这个脚本在安装了swiftlint后每次运行都会执行,如果没有安装swiftlint,会警告异常或者报错.


3:.swiftlint.yml:

这是一个配置文件,可以通过这个配置文件来自定义规则或者修改默认规则.

这里是自用的一个.swiftlint.yml  配置内容


excluded:  # 执行 linting 时忽略的路径。 优先级比 `included` 更高。

  - Carthage

  - Pods

  - Source/ExcludedFolder

  - Source/ExcludedFile.swift

disabled_rules:# 执行时排除掉的规则

  - identifier_name    # 命名规则必须按照驼峰原则,与后台传的Json字段命名冲突,建议排除掉

  - trailing_whitespace  # 每一个空行不能有空格,会与Xcode换行后自动对齐生成的空格冲突,建议排除掉

  - vertical_whitespace#垂直方向上的空格行,限制为一行(注释除外)

  - trailing_newline#末尾空行

  - unused_closure_parameter#函数的参数必须被使用

  - class_delegate_protocol#delegate protocol 应该被设定为 class-only,才能被弱引用

  - weak_delegate#代理要设置为弱引用和上面的

  - control_statement#if while 等判断条件不要用括号 括起来

  - leading_whitespace#文件末尾不应该存在空格符

  - statement_position#else and catch 应该与 } 在同一行,以空格间隔

  - orphaned_doc_comment#注释要写在声明中

  - type_body_length#类型体长度。类型体长度不应该跨越太多行,超过200行给warning,超过350行给error,可自定义

  - notification_center_detachment#移除通知要在 'deinit'中

  - implicit_getter# read-only参数不应该有getter方法

  - multiple_closures_with_trailing_closure#当函数有多个闭包时, 不建议使用尾随闭包语法

  - trailing_comma# 数组最后一个元素后面有逗号

  - shorthand_operator# 使用+= , -=, *=, /=  代替 a = a + 1

  - file_length#文件长度

  - unneeded_break_in_switch# 在switch-case语句中, 有方法调用或操作时,避免使用break语句

  - large_tuple#元祖成员

  - redundant_string_enum_value#在定义字符串枚举的时候, 当字符串枚举值等于枚举名称时,可以不用赋值

  - implicitly_unwrapped_optional#避免隐式解析可选类型的使用

  - syntactic_sugar#语法糖[Int] 代替Array

  - line_length# 行的字符长度

  - function_parameter_count#函数参数个数 默认5warning 8error

  - cyclomatic_complexity#代码复杂度,默认为10,循环复杂度。函数体的复杂度的限制,这个属性主要约束条件句、循环句中的循环嵌套问题, 当嵌套太多的循环时,则会触发swiftlint中的warning和error,当达到10个循环嵌套时就会报warning,达到20个循环嵌套时就会报error

  - function_body_length#函数体长度 默认超过40行warning

  - closure_parameter_position

  - unused_optional_binding

opt_in_rules: # some rules are only opt-in

  - opening_brace# 右括号之前应有一个空格,并与声明在同一行

  - unused_import# import 的文件要被使用 All imported modules should be required to make the file compile.

#unused_capture_list: error #闭包中没有被使用的参数应该删除

#redundant_void_return: error #在不必要的时候, 不需要写 ->() and -> Void

operator_whitespace: error #当定义空格操作符的时候,被定义的名字或类型两边应该各有一个单行空格操作符

closure_parameter_position: error#闭包参数位置, 闭包参数应该和大括号左边在同一行

mark: error# //MARK: -

#redundant_optional_initialization: error # 默认值赋值为nil

return_arrow_whitespace: error# -> 前后要有空格

#unused_optional_binding: error #在使用if判断某变量是否为nil的时候, 不建议使用下划线(_)

force_unwrapping: error#避免强制解包

force_cast: warning # 类型判断,这里表示强解类型警告 as! Int

force_try: warning # 对会抛出异常(throws)的方法,不建议try,强解

trailing_semicolon: error#末尾跟逗号

legacy_constructor: error #使用 swift 提供的 struct 构造函数, 避免使用 遗留的构造函数 比如 CGPointMake(10, 10)

no_space_in_method_call: error#不要在方法名称和括号之间添加空格

empty_count: error #建议使用isEmpty判断,而不是使用count==0判断

opening_brace: error #大括号之前应该有一个空格,且与声明在同一行

statement_position: error #这里主要指的是 else 和 catch 前面要加一个空格, 也不能大于1个空格

colon: error #冒号右侧 有且只有一个空格

comma: error #逗号  [a, b, c, d] 后面必须有一个空格, 前面不要空格

prohibited_interface_builder: error#禁止用interface Builder 创建视图

protocol_property_accessors_order: error#在协议中声明属性  要按顺序先写 get set方法

type_name:  #类型名应该只包含字母数字字符, 并且以大写字母开头,长度在3-40个字符

 min_length:4# 只是警告

 max_length:# 警告和错误

  warning:60

  error:80

  excluded:#排除 不某些名字不受该规则控制

#cyclomatic_complexity:

#  warning: 15

#  error: 100 #代码复杂度,默认为10,循环复杂度。函数体的复杂度的限制,这个属性主要约束条件句、循环句中的循环嵌套问题, 当嵌套太多的循环时,则会触发swiftlint中的warning和error,当达到10个循环嵌套时就会报warning,达到20个循环嵌套时就会报error

#line_length:  # 单行代码长度,默认error 120

#  warning: 300

#  error: 500

#file_length:  # 文件长度

#  warning: 1000

#  error: 2000

#function_body_length: # 函数体长度

#  warning: 100

#  error: 200

#large_tuple : #元组成员

#  warning: 6

#  error: 8

可去官方自定查找对应属性说明:

  (GitHub 链接:https://github.com/realm/SwiftLint)

4.swiftlint.yml配置文件的嵌套

在我们使用.swift.yml配置文件的时候,如果在系统扫描的过程中发现了一个新的配置文件,那么子目录下的规则就会改为新的配置规则。

  总的来说,swiftlint对于代码规范管理是利远大于弊的,只要在前期需要一些时间建立一个规范体系.在后期由于代码整体的规范性,能利于项目的维护,以及可以节省代码Review的时间.

你可能感兴趣的:(SwiftLint - swift代码规范工具)