跳转至

Swift 语言指南

linthis 使用 swiftlint 进行代码检查,使用 swift-format 进行代码格式化。

支持的文件扩展名

  • .swift

必需工具

代码检查:swiftlint

# macOS(推荐)
brew install swiftlint

# 或通过 Mint
mint install realm/SwiftLint

# 验证安装
swiftlint version

格式化:swift-format

# macOS
brew install swift-format

# 或从源码构建
git clone https://github.com/apple/swift-format.git
cd swift-format
swift build -c release

# 验证安装
swift-format --version

配置

基本示例

# .linthis/config.toml

[swift]
max_complexity = 15
excludes = ["Pods/**", "Carthage/**", ".build/**"]

禁用特定规则

[swift.rules]
disable = [
    "line_length",
    "trailing_whitespace"
]

自定义规则

[[rules.custom]]
code = "swift/no-print"
pattern = "\\bprint\\s*\\("
message = "Use os_log or Logger instead of print()"
severity = "warning"
languages = ["swift"]

[[rules.custom]]
code = "swift/force-unwrap"
pattern = "\\!(?![=])"
message = "Avoid force unwrapping"
severity = "warning"
suggestion = "Use optional binding or nil coalescing"
languages = ["swift"]

CLI 用法

# 仅检查 Swift 文件
linthis -c --lang swift

# 仅格式化 Swift 文件
linthis -f --lang swift

SwiftLint 配置

创建 .swiftlint.yml

disabled_rules:
  - trailing_whitespace
  - line_length

opt_in_rules:
  - empty_count
  - closure_spacing

line_length:
  warning: 120
  error: 150

excluded:
  - Pods
  - Carthage
  - .build

Swift-Format 配置

创建 .swift-format

{
  "version": 1,
  "lineLength": 120,
  "indentation": {
    "spaces": 4
  },
  "lineBreakBeforeControlFlowKeywords": false,
  "lineBreakBeforeEachArgument": true
}

常见问题

SwiftLint 未找到

Warning: No swift linter available for swift files
  Install: brew install swiftlint

注意:SwiftLint 主要只支持 macOS。

SPM 包被检查

添加到排除项:

[swift]
excludes = [".build/**", "Package.resolved"]

Xcode 管理的文件

将生成的文件添加到排除项:

[swift]
excludes = ["*.generated.swift", "R.generated.swift"]

最佳实践

  1. 使用 .swiftlint.yml:按项目配置规则
  2. 强制解包检测:对 ! 使用发出警告
  3. SPM 排除:排除 .build 目录
  4. 行长度:120 字符对 Swift 项目较为常见