wsift

Xcode代码规范之SwiftLint配置

2018-02-07  本文已影响208人  TitanCoder

Xcode代码规范之SwiftLint配置

前言

一. 安装SwiftLint

1. 安装全局配置(Homebrew 安装)

Homebrew

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

译注:在Max OS X 10.11(El Capitan)版本中,homebrew在安装软件时可能会碰到/usr/local目录不可写的权限问题。可以使用下面的命令修复:

sudo chown -R `whoami` /usr/local
brew install swiftlint

安装成功,如下图所示:

Homebrew 安装

2. 使用 CocoaPods 安装

pod 'SwiftLint'

3. 使用安装包

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

二. 查看SwiftLint的全部命令

SwiftLint的所有命令

各个命令注释

//查看所有命令
swiftlint help

//忽略空格导致的警告和错误
swiftlint autocorrect

//输出所有的警告和错误
swiftlint lint

//查看所有可获得的规则以及对应的 ID
swiftlint rules

//产看当前版本号
swiftlint version
swiftlint autocorrect

然后我们就会发现,所有的空格符Warning都消失了。这都得益于我们刚刚所进行的命令行操作,它会将已知的能够自动修复的Error和Warning都自动修复,大大的减轻了我们的工作量。

三. SwiftLint的使用

安装完成后,需要在Xcode中配置相关设置,才能使 SwiftLint 在 Xcode 中自动检测代码规范。配置也很简单,只需要在 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"
echo "warning: ..."

之后添加一行代码:

exit 1

3. 配置完成后,command+B编译

测试项目

四. 自定义配置

1. 创建配置文件

disabled_rules: # 禁用指定的规则
  - colon
  - comma
  - control_statement
opt_in_rules: # 启用指定的规则
  - empty_count
  - missing_docs
  # 可以通过执行如下指令来查找所有可用的规则:
  # swiftlint rules
included: # 执行 linting 时包含的路径。如果出现这个 `--path` 会被忽略。
  - Source
excluded: # 执行 linting 时忽略的路径。 优先级比 `included` 更高。
  - Carthage
  - Pods
  - Source/ExcludedFolder
  - Source/ExcludedFile.swift

2. 在代码中关闭某个规则

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

// 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)
        }
    }

规则关闭之前

Snip20180207_1.png

规则关闭之后


Snip20180207_2.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

3. 忽略引入的第三方库

excluded: 
  - Pods
excluded: 
  - Pods
  - Carthage
excluded: # 执行 linting 时忽略的路径。 优先级比 `included` 更高。
  - Source/ExcludedFolder
  - Source/ExcludedFile.swift

4. 嵌套配置

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

5. 自动更正

五. 最后贴上官方示例

disabled_rules: # 执行时排除掉的规则
  - colon
  - comma
  - control_statement
opt_in_rules: # 一些规则仅仅是可选的
  - empty_count
  - missing_docs
  # 可以通过执行如下指令来查找所有可用的规则:
  # swiftlint rules
included: # 执行 linting 时包含的路径。如果出现这个 `--path` 会被忽略。
  - Source
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 # 排除某个名字
variable_name:
  min_length: # 只有最小长度
    error: 4 # 只有错误
  excluded: # 排除某些名字
    - id
    - URL
    - GlobalAPIKey
reporter: "xcode" # 报告类型 (xcode, json, csv, checkstyle)

附录:

原文链接:https://github.com/realm/SwiftLint/blob/master/README.md
译文链接:https://github.com/realm/SwiftLint/blob/master/README_CN.md

上一篇下一篇

猜你喜欢

热点阅读