Skip to content

Commit 0e488b2

Browse files
committed
Adjust the CodingKey exception logic
Essentially this changes the logic so that coding keys do still COUNT towards the depth. But they don't cause violations themselves
1 parent f590982 commit 0e488b2

File tree

1 file changed

+16
-12
lines changed

1 file changed

+16
-12
lines changed

Source/SwiftLintBuiltInRules/Rules/Metrics/NestingRule.swift

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ private extension NestingRule {
4646
private var levels = Levels()
4747

4848
override func visit(_ node: ActorDeclSyntax) -> SyntaxVisitorContinueKind {
49-
validate(forFunction: false, triggeringToken: node.actorKeyword)
49+
validate(forFunction: false, definesCodingKeys: false, triggeringToken: node.actorKeyword)
5050
return .visitChildren
5151
}
5252

@@ -55,7 +55,7 @@ private extension NestingRule {
5555
}
5656

5757
override func visit(_ node: ClassDeclSyntax) -> SyntaxVisitorContinueKind {
58-
validate(forFunction: false, triggeringToken: node.classKeyword)
58+
validate(forFunction: false, definesCodingKeys: false, triggeringToken: node.classKeyword)
5959
return .visitChildren
6060
}
6161

@@ -64,9 +64,7 @@ private extension NestingRule {
6464
}
6565

6666
override func visit(_ node: EnumDeclSyntax) -> SyntaxVisitorContinueKind {
67-
if !configuration.ignoreCodingKeys || !node.definesCodingKeys {
68-
validate(forFunction: false, triggeringToken: node.enumKeyword)
69-
}
67+
validate(forFunction: false, definesCodingKeys: node.definesCodingKeys, triggeringToken: node.enumKeyword)
7068
return .visitChildren
7169
}
7270

@@ -75,7 +73,7 @@ private extension NestingRule {
7573
}
7674

7775
override func visit(_ node: ExtensionDeclSyntax) -> SyntaxVisitorContinueKind {
78-
validate(forFunction: false, triggeringToken: node.extensionKeyword)
76+
validate(forFunction: false, definesCodingKeys: false, triggeringToken: node.extensionKeyword)
7977
return .visitChildren
8078
}
8179

@@ -84,7 +82,7 @@ private extension NestingRule {
8482
}
8583

8684
override func visit(_ node: FunctionDeclSyntax) -> SyntaxVisitorContinueKind {
87-
validate(forFunction: true, triggeringToken: node.funcKeyword)
85+
validate(forFunction: true, definesCodingKeys: false, triggeringToken: node.funcKeyword)
8886
return .visitChildren
8987
}
9088

@@ -93,7 +91,7 @@ private extension NestingRule {
9391
}
9492

9593
override func visit(_ node: ProtocolDeclSyntax) -> SyntaxVisitorContinueKind {
96-
validate(forFunction: false, triggeringToken: node.protocolKeyword)
94+
validate(forFunction: false, definesCodingKeys: false, triggeringToken: node.protocolKeyword)
9795
return .visitChildren
9896
}
9997

@@ -102,7 +100,7 @@ private extension NestingRule {
102100
}
103101

104102
override func visit(_ node: StructDeclSyntax) -> SyntaxVisitorContinueKind {
105-
validate(forFunction: false, triggeringToken: node.structKeyword)
103+
validate(forFunction: false, definesCodingKeys: false, triggeringToken: node.structKeyword)
106104
return .visitChildren
107105
}
108106

@@ -115,15 +113,15 @@ private extension NestingRule {
115113
if configuration.ignoreTypealiasesAndAssociatedtypes {
116114
return
117115
}
118-
validate(forFunction: false, triggeringToken: node.typealiasKeyword)
116+
validate(forFunction: false, definesCodingKeys: false, triggeringToken: node.typealiasKeyword)
119117
levels.pop()
120118
}
121119

122120
override func visitPost(_ node: AssociatedTypeDeclSyntax) {
123121
if configuration.ignoreTypealiasesAndAssociatedtypes {
124122
return
125123
}
126-
validate(forFunction: false, triggeringToken: node.associatedtypeKeyword)
124+
validate(forFunction: false, definesCodingKeys: false, triggeringToken: node.associatedtypeKeyword)
127125
levels.pop()
128126
}
129127

@@ -143,7 +141,7 @@ private extension NestingRule {
143141
}
144142

145143
// MARK: -
146-
private func validate(forFunction: Bool, triggeringToken: TokenSyntax) {
144+
private func validate(forFunction: Bool, definesCodingKeys: Bool, triggeringToken: TokenSyntax) {
147145
let inFunction = levels.lastIsFunction
148146
levels.push(forFunction)
149147

@@ -154,6 +152,12 @@ private extension NestingRule {
154152
if configuration.alwaysAllowOneTypeInFunctions && inFunction && !forFunction {
155153
return
156154
}
155+
156+
// if current defines coding keys and we're ignoring coding keys, then skip nesting rule
157+
if configuration.ignoreCodingKeys && definesCodingKeys {
158+
return
159+
}
160+
157161
guard let severity = configuration.severity(with: targetLevel, for: level) else { return }
158162

159163
let targetName = forFunction ? "Functions" : "Types"

0 commit comments

Comments
 (0)