Skip to content

Commit a662842

Browse files
committed
1 parent 45a979a commit a662842

36 files changed

+115
-81
lines changed

Package.resolved

Lines changed: 1 addition & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Package.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ let package = Package(
1111
],
1212
dependencies: [
1313
.package(url: "https://github.com/apple/swift-argument-parser.git", .upToNextMinor(from: "1.2.1")),
14-
.package(url: "https://github.com/apple/swift-syntax.git", exact: "509.0.0-swift-5.9-DEVELOPMENT-SNAPSHOT-2023-04-10-a"),
14+
.package(url: "https://github.com/apple/swift-syntax.git", revision: "277498735e15bdd61f0094fc1896abe0edd6bba0"),
1515
.package(url: "https://github.com/jpsim/SourceKitten.git", .upToNextMinor(from: "0.34.1")),
1616
.package(url: "https://github.com/jpsim/Yams.git", from: "5.0.5"),
1717
.package(url: "https://github.com/scottrhoyt/SwiftyTextTable.git", from: "0.9.0"),

Source/SwiftLintFramework/Rules/Idiomatic/ConvenienceTypeRule.swift

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,13 +125,21 @@ private extension ConvenienceTypeRule {
125125
override var skippableDeclarations: [DeclSyntaxProtocol.Type] { [ProtocolDeclSyntax.self] }
126126

127127
override func visitPost(_ node: StructDeclSyntax) {
128-
if hasViolation(inheritance: node.inheritanceClause, attributes: node.attributes, members: node.members) {
128+
if hasViolation(
129+
inheritance: node.inheritanceClause,
130+
attributes: node.attributes,
131+
members: node.memberBlock
132+
) {
129133
violations.append(node.structKeyword.positionAfterSkippingLeadingTrivia)
130134
}
131135
}
132136

133137
override func visitPost(_ node: ClassDeclSyntax) {
134-
if hasViolation(inheritance: node.inheritanceClause, attributes: node.attributes, members: node.members) {
138+
if hasViolation(
139+
inheritance: node.inheritanceClause,
140+
attributes: node.attributes,
141+
members: node.memberBlock
142+
) {
135143
violations.append(node.classKeyword.positionAfterSkippingLeadingTrivia)
136144
}
137145
}

Source/SwiftLintFramework/Rules/Idiomatic/LegacyConstructorRule.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,9 +165,9 @@ private extension LegacyConstructorRule {
165165

166166
correctionPositions.append(node.positionAfterSkippingLeadingTrivia)
167167

168-
let arguments = TupleExprElementListSyntax(node.argumentList.map { elem in
168+
let arguments = TupleExprElementListSyntax(node.argumentList.enumerated().map { index, elem in
169169
elem
170-
.with(\.label, .identifier(args[elem.indexInParent]))
170+
.with(\.label, .identifier(args[index]))
171171
.with(\.colon, .colonToken(trailingTrivia: .space))
172172
})
173173
let newExpression = identifierExpr.with(

Source/SwiftLintFramework/Rules/Idiomatic/PrivateOverFilePrivateRule.swift

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -148,104 +148,117 @@ private extension PrivateOverFilePrivateRule {
148148
// don't call super in any of the `visit` methods to avoid digging into the children
149149
override func visit(_ node: ExtensionDeclSyntax) -> DeclSyntax {
150150
guard validateExtensions, let modifier = node.modifiers.fileprivateModifier,
151+
let modifierIndex = node.modifiers.fileprivateModifierIndex,
151152
!node.isContainedIn(regions: disabledRegions, locationConverter: locationConverter) else {
152153
return DeclSyntax(node)
153154
}
154155

155156
correctionPositions.append(modifier.positionAfterSkippingLeadingTrivia)
156-
let newNode = node.with(\.modifiers, node.modifiers?.replacing(fileprivateModifier: modifier))
157+
let newNode = node.with(\.modifiers, node.modifiers?.replacing(fileprivateModifierIndex: modifierIndex))
157158
return DeclSyntax(newNode)
158159
}
159160

160161
override func visit(_ node: ClassDeclSyntax) -> DeclSyntax {
161162
guard let modifier = node.modifiers.fileprivateModifier,
163+
let modifierIndex = node.modifiers.fileprivateModifierIndex,
162164
!node.isContainedIn(regions: disabledRegions, locationConverter: locationConverter) else {
163165
return DeclSyntax(node)
164166
}
165167

166168
correctionPositions.append(modifier.positionAfterSkippingLeadingTrivia)
167-
let newNode = node.with(\.modifiers, node.modifiers?.replacing(fileprivateModifier: modifier))
169+
let newNode = node.with(\.modifiers, node.modifiers?.replacing(fileprivateModifierIndex: modifierIndex))
168170
return DeclSyntax(newNode)
169171
}
170172

171173
override func visit(_ node: StructDeclSyntax) -> DeclSyntax {
172174
guard let modifier = node.modifiers.fileprivateModifier,
175+
let modifierIndex = node.modifiers.fileprivateModifierIndex,
173176
!node.isContainedIn(regions: disabledRegions, locationConverter: locationConverter) else {
174177
return DeclSyntax(node)
175178
}
176179

177180
correctionPositions.append(modifier.positionAfterSkippingLeadingTrivia)
178-
let newNode = node.with(\.modifiers, node.modifiers?.replacing(fileprivateModifier: modifier))
181+
let newNode = node.with(\.modifiers, node.modifiers?.replacing(fileprivateModifierIndex: modifierIndex))
179182
return DeclSyntax(newNode)
180183
}
181184

182185
override func visit(_ node: EnumDeclSyntax) -> DeclSyntax {
183186
guard let modifier = node.modifiers.fileprivateModifier,
187+
let modifierIndex = node.modifiers.fileprivateModifierIndex,
184188
!node.isContainedIn(regions: disabledRegions, locationConverter: locationConverter) else {
185189
return DeclSyntax(node)
186190
}
187191

188192
correctionPositions.append(modifier.positionAfterSkippingLeadingTrivia)
189-
let newNode = node.with(\.modifiers, node.modifiers?.replacing(fileprivateModifier: modifier))
193+
let newNode = node.with(\.modifiers, node.modifiers?.replacing(fileprivateModifierIndex: modifierIndex))
190194
return DeclSyntax(newNode)
191195
}
192196

193197
override func visit(_ node: ProtocolDeclSyntax) -> DeclSyntax {
194198
guard let modifier = node.modifiers.fileprivateModifier,
199+
let modifierIndex = node.modifiers.fileprivateModifierIndex,
195200
!node.isContainedIn(regions: disabledRegions, locationConverter: locationConverter) else {
196201
return DeclSyntax(node)
197202
}
198203

199204
correctionPositions.append(modifier.positionAfterSkippingLeadingTrivia)
200-
let newNode = node.with(\.modifiers, node.modifiers?.replacing(fileprivateModifier: modifier))
205+
let newNode = node.with(\.modifiers, node.modifiers?.replacing(fileprivateModifierIndex: modifierIndex))
201206
return DeclSyntax(newNode)
202207
}
203208

204209
override func visit(_ node: FunctionDeclSyntax) -> DeclSyntax {
205210
guard let modifier = node.modifiers.fileprivateModifier,
211+
let modifierIndex = node.modifiers.fileprivateModifierIndex,
206212
!node.isContainedIn(regions: disabledRegions, locationConverter: locationConverter) else {
207213
return DeclSyntax(node)
208214
}
209215

210216
correctionPositions.append(modifier.positionAfterSkippingLeadingTrivia)
211-
let newNode = node.with(\.modifiers, node.modifiers?.replacing(fileprivateModifier: modifier))
217+
let newNode = node.with(\.modifiers, node.modifiers?.replacing(fileprivateModifierIndex: modifierIndex))
212218
return DeclSyntax(newNode)
213219
}
214220

215221
override func visit(_ node: VariableDeclSyntax) -> DeclSyntax {
216222
guard let modifier = node.modifiers.fileprivateModifier,
223+
let modifierIndex = node.modifiers.fileprivateModifierIndex,
217224
!node.isContainedIn(regions: disabledRegions, locationConverter: locationConverter) else {
218225
return DeclSyntax(node)
219226
}
220227

221228
correctionPositions.append(modifier.positionAfterSkippingLeadingTrivia)
222-
let newNode = node.with(\.modifiers, node.modifiers?.replacing(fileprivateModifier: modifier))
229+
let newNode = node.with(\.modifiers, node.modifiers?.replacing(fileprivateModifierIndex: modifierIndex))
223230
return DeclSyntax(newNode)
224231
}
225232

226233
override func visit(_ node: TypealiasDeclSyntax) -> DeclSyntax {
227234
guard let modifier = node.modifiers.fileprivateModifier,
235+
let modifierIndex = node.modifiers.fileprivateModifierIndex,
228236
!node.isContainedIn(regions: disabledRegions, locationConverter: locationConverter) else {
229237
return DeclSyntax(node)
230238
}
231239

232240
correctionPositions.append(modifier.positionAfterSkippingLeadingTrivia)
233-
let newNode = node.with(\.modifiers, node.modifiers?.replacing(fileprivateModifier: modifier))
241+
let newNode = node.with(\.modifiers, node.modifiers?.replacing(fileprivateModifierIndex: modifierIndex))
234242
return DeclSyntax(newNode)
235243
}
236244
}
237245
}
238246

239247
private extension ModifierListSyntax? {
248+
var fileprivateModifierIndex: ModifierListSyntax.Index? {
249+
self?.firstIndex(where: { $0.name.tokenKind == .keyword(.fileprivate) })
250+
}
251+
240252
var fileprivateModifier: DeclModifierSyntax? {
241-
self?.first { $0.name.tokenKind == .keyword(.fileprivate) }
253+
fileprivateModifierIndex.flatMap { self?[$0] }
242254
}
243255
}
244256

245257
private extension ModifierListSyntax {
246-
func replacing(fileprivateModifier: DeclModifierSyntax) -> ModifierListSyntax? {
247-
replacing(
248-
childAt: fileprivateModifier.indexInParent,
258+
func replacing(fileprivateModifierIndex: ModifierListSyntax.Index) -> ModifierListSyntax? {
259+
let fileprivateModifier = self[fileprivateModifierIndex]
260+
return replacing(
261+
childAt: self.distance(from: self.startIndex, to: fileprivateModifierIndex),
249262
with: fileprivateModifier.with(
250263
\.name,
251264
.keyword(

Source/SwiftLintFramework/Rules/Idiomatic/RedundantNilCoalescingRule.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ struct RedundantNilCoalescingRule: OptInRule, SwiftSyntaxCorrectableRule, Config
3636
private extension RedundantNilCoalescingRule {
3737
final class Visitor: ViolationsSyntaxVisitor {
3838
override func visitPost(_ node: TokenSyntax) {
39-
if node.tokenKind.isNilCoalescingOperator && node.nextToken?.tokenKind == .keyword(.nil) {
39+
if node.tokenKind.isNilCoalescingOperator,
40+
node.nextToken(viewMode: .sourceAccurate)?.tokenKind == .keyword(.nil) {
4041
violations.append(node.position)
4142
}
4243
}

Source/SwiftLintFramework/Rules/Idiomatic/RedundantSetAccessControlRule.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ private extension DeclSyntax {
142142

143143
private extension ModifierListSyntax {
144144
var setAccessor: DeclModifierSyntax? {
145-
first { $0.detail?.detail.tokenKind == .keyword(.set) }
145+
first { $0.detail?.detail.tokenKind == .identifier("set") }
146146
}
147147

148148
var getAccessor: DeclModifierSyntax? {

Source/SwiftLintFramework/Rules/Idiomatic/RedundantStringEnumValueRule.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ private extension RedundantStringEnumValueRule {
7171
return
7272
}
7373

74-
let enumsWithExplicitValues = node.members.members
74+
let enumsWithExplicitValues = node.memberBlock.members
7575
.flatMap { member -> EnumCaseElementListSyntax in
7676
guard let enumCaseDecl = member.decl.as(EnumCaseDeclSyntax.self) else {
7777
return EnumCaseElementListSyntax([])

Source/SwiftLintFramework/Rules/Idiomatic/StrictFilePrivateRule.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ private extension StrictFilePrivateRule {
194194
return
195195
}
196196
if let varDecl = grandparent.as(VariableDeclSyntax.self) {
197-
let isSpecificForSetter = node.detail?.detail.tokenKind == .keyword(.set)
197+
let isSpecificForSetter = node.detail?.detail.tokenKind == .identifier("set")
198198
let firstImplementingProtocol = varDecl.bindings
199199
.flatMap { binding in
200200
let pattern = binding.pattern

Source/SwiftLintFramework/Rules/Idiomatic/SyntacticSugarRule.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,7 @@ extension SimpleTypeIdentifierSyntax: SyntaxWithGenericClause {
332332

333333
extension SpecializeExprSyntax: SyntaxWithGenericClause {
334334
var typeName: String? {
335-
expression.as(IdentifierExprSyntax.self)?.firstToken?.text ??
335+
expression.as(IdentifierExprSyntax.self)?.firstToken(viewMode: .sourceAccurate)?.text ??
336336
expression.as(MemberAccessExprSyntax.self)?.name.text
337337
}
338338
var genericArguments: GenericArgumentClauseSyntax? { genericArgumentClause }

0 commit comments

Comments
 (0)