/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
复制代码
译注:在Max OS X 10.11(El Capitan)版本中,homebrew在安装软件时可能会碰到/usr/local目录不可写的权限问题。可使用下面的命令修复:git
sudo chown -R `whoami` /usr/local
复制代码
brew install swiftlint
复制代码
SwiftLint
版本,这是一种很好的解决方案SwiftLint
以及他的依赖包的完整资源文件都安装到 Pods/ 目录中去,因此在使用版本管理工具好比 git/svn
时要注意设置忽略相关目录Podfile
pod 'SwiftLint'
复制代码
SwiftLint
还支持使用 pkg
安装包进行安装,在官方的 Github 页面能够找到最新发布的安装包github
swiftlint help
能够查看全部可用的命令:各个命令注释json
//查看全部命令
swiftlint help
//忽略空格致使的警告和错误
swiftlint autocorrect
//输出全部的警告和错误
swiftlint lint
//查看全部可得到的规则以及对应的 ID
swiftlint rules
//产看当前版本号
swiftlint version
复制代码
swiftlint autocorrect
复制代码
而后咱们就会发现,全部的空格符Warning都消失了。这都得益于咱们刚刚所进行的命令行操做,它会将已知的可以自动修复的Error和Warning都自动修复,大大的减轻了咱们的工做量。swift
安装完成后,须要在Xcode中配置相关设置,才能使 SwiftLint 在 Xcode 中自动检测代码规范。配置也很简单,只须要在 Xcode 的 Build Phases 中新建一个 Run Script Phase 配置项,在里面添加相关代码后,编译便可!api
1. 全局安装脚本添加方式数组
if which swiftlint >/dev/null; then
swiftlint
else
echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
fi
复制代码
2. CocoaPods安装脚本添加xcode
"${PODS_ROOT}/SwiftLint/swiftlint"
复制代码
echo "warning: ..."
复制代码
以后添加一行代码:ruby
exit 1
复制代码
3. 配置完成后,command+B
编译bash
SwiftLint
默认方法名或者注释不得超过120个字符SwiftLint
在作代码规范检查的时候自动忽略 CocoaPods
、Carthage
等包管理器引入的第三方库(固然,手动导入的第三方库也能设置忽略)touch .swiftlint.yml
command + shift + .
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
复制代码
能够经过在一个源文件中定义一个以下格式的注释来关闭某个规则:框架
// 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)
}
}
复制代码
规则关闭以前
规则关闭以后
也能够经过添加 :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
复制代码
CocoaPods
导入的第三方库excluded:
- Pods
复制代码
excluded:
- Pods
- Carthage
复制代码
excluded: # 执行 linting 时忽略的路径。 优先级比 `included` 更高。
- Source/ExcludedFolder
- Source/ExcludedFile.swift
复制代码
SwiftLint
支持经过嵌套配置文件的方式来对代码分析过程进行更加细致的控制。
.swiftlint.yml
文件里设置 use_nested_configs: true
值。.swiftlint.yml
文件。excluded
,included
,和 use_nested_configs
在嵌套结构中会被忽略。SwiftLint
能够自动修正某些错误,磁盘上的文件会被一个修正后的版本覆盖。swiftlint autocorrect
以前有对它们作过备份,不然的话有可能致使重要数据的丢失。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