Files
SwiftFormat/Sources/Rules/StrongOutlets.swift
T
2024-11-09 11:26:22 +00:00

36 lines
1.3 KiB
Swift

//
// StrongOutlets.swift
// SwiftFormat
//
// Created by Nick Lockwood on 11/24/17.
// Copyright © 2024 Nick Lockwood. All rights reserved.
//
import Foundation
public extension FormatRule {
/// Strip unnecessary `weak` from @IBOutlet properties (except delegates and datasources)
static let strongOutlets = FormatRule(
help: "Remove `weak` modifier from `@IBOutlet` properties."
) { formatter in
formatter.forEach(.keyword("@IBOutlet")) { i, _ in
guard let varIndex = formatter.index(of: .keyword("var"), after: i),
let weakIndex = (i ..< varIndex).first(where: { formatter.tokens[$0] == .identifier("weak") }),
case let .identifier(name)? = formatter.next(.identifier, after: varIndex)
else {
return
}
let lowercased = name.lowercased()
if lowercased.hasSuffix("delegate") || lowercased.hasSuffix("datasource") {
return
}
if formatter.tokens[weakIndex + 1].isSpace {
formatter.removeToken(at: weakIndex + 1)
} else if formatter.tokens[weakIndex - 1].isSpace {
formatter.removeToken(at: weakIndex - 1)
}
formatter.removeToken(at: weakIndex)
}
}
}