Swift-lint 的安装和使用

1 Swift 代码风格规范简介

首先要了解如下这三个文档:

  • Github 代码风格规范: star 4000+ (截至2017年4月)

    暂命名为 github 规范.

  • Raywenderlich 代码风格规范: star 7000+ (截至2017年4月)

    暂命名为 温德里奇规范.

  • 苹果API设计原则(API Design Guidelines)

    苹果这个设计原则是许多规范的根源, 需要深入了解.

写作本文时, swift刚发布到 3.1 版本. 流行的 Swift 代码风格规范也只更新到对应 3.1, 后续需要不断完善补充.

不过这些规范都是基于苹果的 API 设计原则 再进行总结给出的, 故需要首先了解苹果的 API 设计原则.

2 swift-lint插件的安装和使用

swift-lint 是针对 swift 的代码风格检查工具. 它可以内置到工程中, 也可以全局安装到系统. 具有使用简单, 配置灵活的特点. 下面就来介绍它的安装, 配置和使用方法.

swift-lint 插件Github地址.

由于全世界都在逐步过渡到 swift, 基于 OC 的代码风格检查工具不再引入, 新项目争取也不再使用 OC 作为主要开发语言, 后续新模块也将使用 Swift 进行开发.

2.1 通过命令行安装

通过命令行安装的话, 首先首先安装 homebrew. 之后在命令行运行:

brew install swiftlint

之后需要在工程根目录或子目录中添加 swift-lint 配置文件(见 2.3 节) .

如果是通过命令行方式安装, 则需要进入到工程目录, 然后再运行:

swiftlint   # 当然也可以在工程添加 run script 脚本实现

2.2 通过pod方式安装和使用

推荐采用这个方式安装, 这样在多人协作的时候不用重复进行安装和配置, 直接执行 pod install 就可以使用了.

  1. 在 Podfile 中添加如下代码:

    pod 'SwiftLint'
    
  2. 打开工程并找到对应 target 的 Build Phases:

添加一个 Run Script 脚本, 脚本内容为:

添加 Run Script 过程
${PODS_ROOT}/SwiftLint/swiftlint

添加后如下图所示(实际使用时请修改进入的目录和选择是否使用 autocorrect 功能):

脚本内容

之后需要在工程根目录或子目录中添加 swift-lint 配置文件(见 2.3 节) .

至此就可以正常使用了, 每次编译工程的时候都会自动进行代码风格检查.

2.3 配置文件

虽然 swift-lint 不需要配置也可以正常使用(此时使用的是默认的规则), 但对于生产环境下的复杂场景, 就需要根据不同的任务目标来相应进行配置.

swift-lint 使用 .swiftlint.yml 文件进行配置, 并且可以在同一工程中不同文件夹下使用不同的配置文件, 这样可以达到对不同模块进行区别控制.

本文档提供的两个针对不同用途的配置文件.

适用于一般工程的配置文件:

# 要查看 swiftlint 的所有内置规则, 请在终端执行: swiftlint rules
disabled_rules: # 需要关闭的强制性规则
#  - colon
#  - comma
#  - control_statement
   - for_where
opt_in_rules: # 需要打开的可选规则
  - empty_count
  - missing_docs
  - closure_end_indentation
  - closure_spacing
  - force_unwrapping
  - implicitly_unwrapped_optional
  - operator_usage_whitespace
  - redundant_nil_coalescing
included: # 需要进行语法检查的文件夹列表, 每个文件夹都以 - 开头
  - Sources   # 演示
excluded: # 需要在语法检查时候排除掉的文件夹. 比如 Pod 或 Carthage 等第三方源代码文件夹.
  - Carthage
  - Pods

# 以下是规则参数配置:
force_cast: warning # implicitly
force_try:
  severity: warning # explicitly

line_length: 120   # 单行字符个数限制

type_body_length:  # 类型体行数限制
  - 300 # warning
  - 400 # error

function_body_length: 100   # 函数或方法的内容行数限制
function_parameter_count: 6  # 函数或方法的参数个数限制
file_length:    # 文件行数限制
  warning: 500
  error: 1200

type_name:    # 类型命名时字符个数限制
  min_length: 2 # warning
  max_length: # warning and error
    warning: 40
    error: 50
  excluded: iPhone # 排除
identifier_name:   # 标识符命名时字符个数限制
  min_length: # only min_length
    error: 4 # only error
  excluded: # excluded via string array
    - id
    - URL
    - GlobalAPIKey
reporter: "xcode" # reporter type (xcode, json, csv, checkstyle, junit, html, emoji)

适用于算法工程的配置文件:

cyclomatic_complexity: 12
file_length: 550
function_body_length: 80
function_parameter_count: 8
line_length: 150
type_body_length: 300
variable_name:
  min_length:
    error: 1
    warning: 1
  excluded:
    - N
disabled_rules:
  - valid_docs

custom_rules:
  smiley_face:
    name: "Smiley Face"
    regex: "(\:\))"
    match_kinds: 
      - comment
      - string
    message: "A closing parenthesis smiley :) creates a half-hearted smile, and thus is not preferred. Use :]"
    severity: warning

上述配置文件在使用时需要结合实际规范做小范围修改(主要是包含文件夹等配置内容).

其他配置细节详见 swift-lint 插件的 ReadMe.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,117评论 25 707
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,103评论 4 62
  • 前天难得休息,就急急忙忙赶回家去。我知道不管我在那里,家里始终都有父母的牵挂,古稀之年的他们越来越渴望儿孙膝下的团...
    幸福D苏眉阅读 711评论 4 6
  • 在一堆琐碎杂物中一眼看到它,心里就是要定了的。主人即将离开学校,这盆养了两年的观音莲辗转到了我手里。肉嘟嘟的嫩绿叶...
    王幽舒阅读 444评论 3 3
  • 所有学生将在这里进行无限期的共同生活2.发生了案件要进行学级裁判3.夜晚会响起铃声通知进行睡觉,不去也没关系4.每...
    黎明卿_吉恩阅读 230评论 0 0