SwiftLint 自动规范代码工具(上)

简介: SwiftLint 自动规范代码工具(上)

技术选型


Infer vs SwiftLint:有什么区别?


什么是 Infer?

Facebook 可以在发布 Android 和 iOS 应用程序之前检测错误的工具。 Facebook Infer 是一个静态分析工具,如果您为 Infer 提供一些 Objective-C,Java 或 C 代码,它将产生一系列潜在的错误。任何人都可以使用 Infer 拦截重大错误,然后再将其发布到人们的手机中,并帮助防止崩溃或性能下降。(访问:fbinfer.com

Infer 效率高,支持增量分析,可小范围分析,但是可定制性不算最强,不支持 Swift。


什么是 SwiftLint?

实施 Swift 样式和约定的工具。它是一个基于 GitHub 的 Swift Style Guide 松散地实施 Swift 样式和约定的工具,它与 Clang 和 SourceKit 挂钩,可以使用源文件的 AST 表示获得更准确的结果。(访问:github.com/realm/Swift…

SwiftLint 使用简单,与 Xcode 紧密结合,更适用于包含 ObjC 和 Swift 代码的大型混合项目中。


image.png


使用场景


熟悉 Python 的同学一定对 Pylint 不会陌生,Pylint 是一个 Python 代码分析工具,它分析 Python 代码中的错误,查找不符合代码风格标准(Pylint 默认使用的代码风格是 PEP 8,具体信息,请参阅参考资料)和有潜在问题的代码。


Python 是一门很强调格式的语言,毕竟人家连大括号都没有,反观 Swift,似乎不按照严格的规范编码也没有太大的问题?错!写出良好代码风格的代码,可能比能否写出高效的代码更为重要。于是,SwiftLint 就诞生了。


SwiftLint 是一个强制使用者按照 Github 的 Swift 编码规范指南来开发的一种工具,它会将所有不符合 Swift 规范的代码全部用 warning 标注出来,一些严重的违背规则的代码甚至让它无法通过编译(江山一片红),想想是不是就很刺激呢?


image.png


CodeReview 一般做这样几件事情:

  1. 代码风格规范统一
  2. 防止低效代码、冗余代码
  3. 防止出现可见的明显BUG

第一点,实在属于机械操作,就好像第一次工业革命的人工织布,是处在必然被淘汰的行列。 第二、三点富含了大量人脑的思考,属于暂时还无法替代的操作(AI时代应该可以)。


常用安装


版本要求

SwiftLint 工作于 SourceKit 这一层,所以 Swift 版本发生变化时它也能继续工作! 这也是 SwiftLint 轻量化的原因,因为它不需要一个完整的 Swift 编译器,它只是与已经安装在你的电脑上的官方编译器进行通信。

Swift 版本 最后一个 SwiftLint 支持版本
Swift 1.x SwiftLint 0.1.2
Swift 2.x SwiftLint 0.18.1
Swift 3.x SwiftLint 0.25.1
Swift 4.0-4.1.x SwiftLint 0.28.2
Swift 4.2.x SwiftLint 0.35.0
Swift 5.x 最新的


(1) 全局安装

全局安装就不得不提到我们的老朋友HomeBrew了,如果你没有安装,那么请看这里。 全局安装非常简单,首先我们需要通过 brew 命令安装 SwiftLint:

brew install swiftlint

然后添加编译脚本:

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

最后在脚本框中添加后:


image.png


OK,大功告成,就可以编译啦


(2) 局部安装

除了全局安装,我们也可以通过CocoaPods进行安装。在Podfile上添加相关的依赖:

pod 'SwiftLint'

然后跟全局方法一样,在 Run Script 中添加命令,但是内容有些许的不同:

# Swiftlint Pods
"${PODS_ROOT}/SwiftLint/swiftlint"


image.png


OK,接下来就让我们来试试看SwiftLint吧!


(3) fastlane 安装

你可以用fastlane官方的SwiftLint功能来运行SwiftLint作为你的Fastlane程序的一部分

swiftlint(
    mode: :lint,                            # SwiftLint模式: :lint (默认) 或者 :autocorrect
    executable: "Pods/SwiftLint/swiftlint", # SwiftLint的程序路径 (可选的). 对于用CocoaPods集成SwiftLint时很重要
    path: "/path/to/lint",                  # 特殊的检查路径 (可选的)
    output_file: "swiftlint.result.json",   # 检查结果输出路径 (可选的)
    reporter: "json",                       # 输出格式 (可选的)
    config_file: ".swiftlint-ci.yml",       # 配置文件的路径 (可选的)
    files: [                                # 指定检查文件列表 (可选的)
        "AppDelegate.swift",
        "path/to/project/Model.swift"
    ],
    ignore_exit_status: true,               # 允许fastlane可以继续执行甚至是Swiftlint返回一个非0的退出状态(默认值: false)
    quiet: true,                            # 不输出像‘Linting’和‘Done Linting’的状态日志 (默认值: false)
    strict: true                            # 发现警告时报错? (默认值: false)
)

官方还介绍 Mint 等安装方法,用得到自己去看吧~


使用方法


命令行

$ swiftlint help
Available commands:
   autocorrect  Automatically correct warnings and errors
   help         Display general or command-specific help
   lint         Print lint warnings and errors for the Swift files in the current directory (default command)
   rules        Display the list of rules and their identifiers
   version      Display the current version of SwiftLint


项目集成

在给项目初次接入SwiftLint的时候,你可能会被下面这样的情景给吓到:


image.png


但是呢,不用慌,我们可以看一下这是什么情况。仔细观察一番之后,我们会发现,绝大多数的Warning都是这个原因:


image.png


WTF?我这一行哪里有空格符?简直就是冤枉啊!但其实是这样的,虽然看起来好像没有空格符,但是在换行符之间不应该掺杂制表符,也就是说你实际的代码是这样的:

\n \tab \n

所以呢,人家的Warning也不是没有道理的嘛。那么我们该怎么来消除这些Warning呢? 首先,我们要确保,以后我们所码的代码不再出现这样的格式,所以我们需要把 Text Editing 里面的 Including whitespace-only lines 勾选上:



image.png


这样可以保证我们今后的换行不再出现制表符的警告,然后,我们就需要处理现有的代码。现有的代码,少说也有几万行,手动改不是要累死人?这个时候就轮到 SwiftLint 的命令行出场了。

我们将目录切换到工程的根目录之下,然后敲击如下命令:

swiftlint autocorrect

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


目录
相关文章
|
6月前
|
敏捷开发 API
【sgCreateAPI】自定义小工具:敏捷开发→自动化生成API接口脚本(接口代码生成工具)
【sgCreateAPI】自定义小工具:敏捷开发→自动化生成API接口脚本(接口代码生成工具)
|
6月前
|
SQL 设计模式 Java
Java编码规范与最佳实践
Java编码规范与最佳实践
148 0
|
6月前
项目管理工具计划模板解析:项目管理工具的双重功能与创建方法
本文介绍了项目计划模板的含义和重要性。项目计划模板是用于规划项目结构的可编辑文档,帮助团队明确任务、分配责任和管理时间。模板有助于跟踪项目进度、避免任务冲突,并简化会议安排。创建模板通常涉及选择合适的项目管理工具,如Zoho Projects或Microsoft Excel,然后分解任务、定义日期并持续调整。在Zoho Projects中,用户可以按步骤创建模板,包括命名、添加任务和设置相关细节。
74 0
|
6月前
【突破常规:让函数规范成为注目的亮点】(下)
【突破常规:让函数规范成为注目的亮点】
|
6月前
【突破常规:让函数规范成为注目的亮点】(上)
【突破常规:让函数规范成为注目的亮点】
|
6月前
|
安全 前端开发 测试技术
【测开方法论】当老功能代码命名不规范的时候...如何安全增加新功能
【测开方法论】当老功能代码命名不规范的时候...如何安全增加新功能
|
运维 测试技术 数据库
测试思想-流程规范 关于预发布环境的一些看法
测试思想-流程规范 关于预发布环境的一些看法
521 0
|
SQL XML 存储
安全开发规范:开发人员必须了解开发安全规范(一)(涉及安全问题,以及解决方法和代码实现)
安全问题其实是很多程序员想了解又容易忽略的问题,但需要我们重视起来,提高应用程序的安全性。常出现的安全问题包括,程序接受数据可能来源于未经验证的用户,网络连接和其他不受信任的来源,如果未对程序接受数据进行校验,则可能会引发安全问题等等
6087 0
安全开发规范:开发人员必须了解开发安全规范(一)(涉及安全问题,以及解决方法和代码实现)
|
IDE 前端开发 开发工具
如何方便的为团队所有项目统一 ESLint 配置
近期给团队项目 CLI 做重构,其中涉及到 ESLint 的部分,这部分之前的方式是通过开发和编译时调用 ESLint 的 CLI 去检查项目代码,虽然不会出什么问题,但是各种 IDE 的提示就废掉了,所以打算换一种比较通用的方式。
|
Swift iOS开发
SwiftLint 自动规范代码工具(下)
SwiftLint 自动规范代码工具(下)
606 0
SwiftLint 自动规范代码工具(下)