Skip to content

Commit fb416b7

Browse files
LaurenWhiteallevato
authored andcommitted
Clean up DontRepeatTypeInStaticProperties (swiftlang#92)
1 parent 1e861d9 commit fb416b7

File tree

1 file changed

+15
-26
lines changed

1 file changed

+15
-26
lines changed

tools/swift-format/Sources/Rules/DontRepeatTypeInStaticProperties.swift

+15-26
Original file line numberDiff line numberDiff line change
@@ -12,62 +12,51 @@ import SwiftSyntax
1212
///
1313
/// - SeeAlso: https://google.github.io/swift#static-and-class-properties
1414
public final class DontRepeatTypeInStaticProperties: SyntaxLintRule {
15-
15+
1616
public override func visit(_ node: ClassDeclSyntax) {
1717
determinePropertyNameViolations(members: node.members.members, nodeId: node.identifier.text)
1818
}
19-
19+
2020
public override func visit(_ node: EnumDeclSyntax) {
2121
determinePropertyNameViolations(members: node.members.members, nodeId: node.identifier.text)
2222
}
23-
23+
2424
public override func visit(_ node: ProtocolDeclSyntax) {
2525
determinePropertyNameViolations(members: node.members.members, nodeId: node.identifier.text)
2626
}
27-
27+
2828
public override func visit(_ node: StructDeclSyntax) {
2929
determinePropertyNameViolations(members: node.members.members, nodeId: node.identifier.text)
3030
}
31-
31+
3232
public override func visit(_ node: ExtensionDeclSyntax) {
33-
determinePropertyNameViolations(members: node.members.members, nodeId: node.extendedType.description)
33+
determinePropertyNameViolations(members: node.members.members,
34+
nodeId: node.extendedType.description)
3435
}
3536

3637
func determinePropertyNameViolations(members: MemberDeclListSyntax, nodeId: String) {
3738
for member in members {
3839
guard let decl = member.decl as? VariableDeclSyntax else { continue }
3940
guard let modifiers = decl.modifiers else { continue }
40-
guard containsClassOrStatic(modifiers: modifiers) else { continue }
41-
41+
guard modifiers.has(modifier: "static") || modifiers.has(modifier: "class") else { continue }
42+
4243
let typeName = withoutPrefix(name: nodeId)
43-
var varName = ""
44-
45-
for binding in decl.bindings {
46-
guard let exp = binding.pattern as? IdentifierPatternSyntax else { continue }
47-
varName = exp.identifier.text
48-
}
49-
50-
if varName.contains(typeName) {
44+
45+
for id in decl.identifiers {
46+
let varName = id.identifier.text
47+
guard varName.contains(typeName) else { continue }
5148
diagnose(.removeTypeFromName(name: varName, type: typeName), on: decl)
5249
}
5350
}
5451
}
5552

56-
func containsClassOrStatic(modifiers: ModifierListSyntax) -> Bool {
57-
for modifier in modifiers {
58-
let name = modifier.name.text
59-
if name == "class" || name == "static" { return true }
60-
}
61-
return false
62-
}
63-
6453
// Returns the given string without capitalized prefix in the beginning
6554
func withoutPrefix(name: String) -> String {
6655
let formattedName = name.trimmingCharacters(in: CharacterSet.whitespaces)
6756
let upperCase = Array(formattedName.uppercased())
6857
let original = Array(formattedName)
6958
guard original[0] == upperCase[0] else { return name }
70-
59+
7160
var prefixEndsAt = 0
7261
var idx = 0
7362
while idx <= name.count - 2 {
@@ -83,6 +72,6 @@ public final class DontRepeatTypeInStaticProperties: SyntaxLintRule {
8372

8473
extension Diagnostic.Message {
8574
static func removeTypeFromName(name: String, type: String) -> Diagnostic.Message {
86-
return .init(.warning, "Remove '\(type)' from '\(name)'")
75+
return .init(.warning, "remove '\(type)' from '\(name)'")
8776
}
8877
}

0 commit comments

Comments
 (0)