Skip to content

Commit 3c20ec4

Browse files
committed
make the SignatureSyntax code less reliant on Swift operator overloading
1 parent ebb084e commit 3c20ec4

File tree

2 files changed

+49
-47
lines changed

2 files changed

+49
-47
lines changed

Sources/MarkdownPluginSwift/Signatures/SignatureSyntax.Encoder.swift

Lines changed: 47 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,8 @@ extension SignatureSyntax.Encoder
125125

126126
extension SignatureSyntax.Encoder<SignatureSyntax.ExpandedParameter>
127127
{
128-
static
129-
func += (self:inout Self, decl:DeclSyntax)
128+
mutating
129+
func encode(decl:DeclSyntax)
130130
{
131131
for region:Syntax in decl.children(viewMode: .sourceAccurate)
132132
{
@@ -150,7 +150,7 @@ extension SignatureSyntax.Encoder<SignatureSyntax.ExpandedParameter>
150150
let clause:GenericParameterClauseSyntax =
151151
region.as(GenericParameterClauseSyntax.self)
152152
{
153-
self += clause
153+
self.encode(clause)
154154
}
155155
else if
156156
let region:FunctionSignatureSyntax = region.as(FunctionSignatureSyntax.self)
@@ -187,8 +187,8 @@ extension SignatureSyntax.Encoder<SignatureSyntax.ExpandedParameter>
187187
}
188188
}
189189

190-
static
191-
func += (self:inout Self, clause:GenericParameterClauseSyntax)
190+
private mutating
191+
func encode(_ clause:GenericParameterClauseSyntax)
192192
{
193193
for region:Syntax in clause.children(viewMode: .sourceAccurate)
194194
{
@@ -221,110 +221,110 @@ extension SignatureSyntax.Encoder<SignatureSyntax.ExpandedParameter>
221221

222222
extension SignatureSyntax.Encoder<SignatureSyntax.AbridgedParameter>
223223
{
224-
static
225-
func += (self:inout Self, decl:DeclSyntax)
224+
mutating
225+
func encode(decl:DeclSyntax)
226226
{
227227
if let decl:ActorDeclSyntax = decl.as(ActorDeclSyntax.self)
228228
{
229-
self += decl.modifiers
229+
self.encode(decl.modifiers)
230230
self += decl.actorKeyword
231231
self[at: .toplevel] += decl.name.trimmed
232-
self ?= decl.genericParameterClause?.trimmed
232+
self.encode(decl.genericParameterClause?.trimmed)
233233
}
234234
else if
235235
let decl:AssociatedTypeDeclSyntax = decl.as(AssociatedTypeDeclSyntax.self)
236236
{
237-
self += decl.modifiers
237+
self.encode(decl.modifiers)
238238
self += decl.associatedtypeKeyword
239239
self[at: .toplevel] += decl.name.trimmed
240240
}
241241
else if
242242
let decl:ClassDeclSyntax = decl.as(ClassDeclSyntax.self)
243243
{
244-
self += decl.modifiers
244+
self.encode(decl.modifiers)
245245
self += decl.classKeyword
246246
self[at: .toplevel] += decl.name.trimmed
247-
self ?= decl.genericParameterClause?.trimmed
247+
self.encode(decl.genericParameterClause?.trimmed)
248248
}
249249
else if
250250
let decl:EnumDeclSyntax = decl.as(EnumDeclSyntax.self)
251251
{
252-
self += decl.modifiers
252+
self.encode(decl.modifiers)
253253
self += decl.enumKeyword
254254
self[at: .toplevel] += decl.name.trimmed
255-
self ?= decl.genericParameterClause?.trimmed
255+
self.encode(decl.genericParameterClause?.trimmed)
256256
}
257257
else if
258258
let decl:ProtocolDeclSyntax = decl.as(ProtocolDeclSyntax.self)
259259
{
260-
self += decl.modifiers
260+
self.encode(decl.modifiers)
261261
self += decl.protocolKeyword
262262
self[at: .toplevel] += decl.name.trimmed
263263
self ?= decl.primaryAssociatedTypeClause?.trimmed
264264
}
265265
else if
266266
let decl:StructDeclSyntax = decl.as(StructDeclSyntax.self)
267267
{
268-
self += decl.modifiers
268+
self.encode(decl.modifiers)
269269
self += decl.structKeyword
270270
self[at: .toplevel] += decl.name.trimmed
271-
self ?= decl.genericParameterClause?.trimmed
271+
self.encode(decl.genericParameterClause?.trimmed)
272272
}
273273
else if
274274
let decl:DeinitializerDeclSyntax = decl.as(DeinitializerDeclSyntax.self)
275275
{
276-
self += decl.modifiers
276+
self.encode(decl.modifiers)
277277
self[at: .toplevel] += decl.deinitKeyword
278278
self ?= decl.effectSpecifiers?.trimmed
279279
}
280280
else if
281281
let decl:FunctionDeclSyntax = decl.as(FunctionDeclSyntax.self)
282282
{
283-
self += decl.modifiers
283+
self.encode(decl.modifiers)
284284
self += decl.funcKeyword
285285
self[at: .toplevel] += decl.name
286-
self ?= decl.genericParameterClause
287-
self += decl.signature
286+
self.encode(decl.genericParameterClause?.trimmed)
287+
self.encode(decl.signature)
288288
}
289289
else if
290290
let decl:InitializerDeclSyntax = decl.as(InitializerDeclSyntax.self)
291291
{
292-
self += decl.modifiers
292+
self.encode(decl.modifiers)
293293
self[at: .toplevel] += decl.initKeyword
294294
self ?= decl.optionalMark
295-
self ?= decl.genericParameterClause
296-
self += decl.signature
295+
self.encode(decl.genericParameterClause?.trimmed)
296+
self.encode(decl.signature)
297297
}
298298
else if
299299
let decl:MacroDeclSyntax = decl.as(MacroDeclSyntax.self)
300300
{
301-
self += decl.modifiers
301+
self.encode(decl.modifiers)
302302
self += decl.macroKeyword
303303
self[at: .toplevel] += decl.name
304-
self ?= decl.genericParameterClause
305-
self += decl.signature
304+
self.encode(decl.genericParameterClause?.trimmed)
305+
self.encode(decl.signature)
306306
}
307307
else if
308308
let decl:SubscriptDeclSyntax = decl.as(SubscriptDeclSyntax.self)
309309
{
310-
self += decl.modifiers
310+
self.encode(decl.modifiers)
311311
self[at: .toplevel] += decl.subscriptKeyword
312-
self ?= decl.genericParameterClause
312+
self.encode(decl.genericParameterClause?.trimmed)
313313
self += (decl.parameterClause, func: false)
314314
self ?= decl.returnClause.trimmed
315315
}
316316
else if
317317
let decl:TypeAliasDeclSyntax = decl.as(TypeAliasDeclSyntax.self)
318318
{
319-
self += decl.modifiers
319+
self.encode(decl.modifiers)
320320
self += decl.typealiasKeyword
321321
self[at: .toplevel] += decl.name.trimmed
322-
self ?= decl.genericParameterClause?.trimmed
322+
self.encode(decl.genericParameterClause?.trimmed)
323323
}
324324
else if
325325
let decl:VariableDeclSyntax = decl.as(VariableDeclSyntax.self)
326326
{
327-
self += decl.modifiers
327+
self.encode(decl.modifiers)
328328
self += decl.bindingSpecifier
329329
for binding:PatternBindingSyntax in decl.bindings
330330
{
@@ -336,7 +336,7 @@ extension SignatureSyntax.Encoder<SignatureSyntax.AbridgedParameter>
336336
else if
337337
let decl:EnumCaseDeclSyntax = decl.as(EnumCaseDeclSyntax.self)
338338
{
339-
self += decl.modifiers
339+
self.encode(decl.modifiers)
340340
self += decl.caseKeyword
341341
for element:EnumCaseElementSyntax in decl.elements
342342
{
@@ -347,7 +347,7 @@ extension SignatureSyntax.Encoder<SignatureSyntax.AbridgedParameter>
347347
self += payload.leftParen
348348
for parameter:EnumCaseParameterSyntax in payload.parameters
349349
{
350-
self += parameter.modifiers
350+
self.encode(parameter.modifiers)
351351
if let label:TokenSyntax = parameter.firstName,
352352
label.tokenKind != .wildcard
353353
{
@@ -368,8 +368,8 @@ extension SignatureSyntax.Encoder<SignatureSyntax.AbridgedParameter>
368368
}
369369
}
370370

371-
static
372-
func += (self:inout Self, function:FunctionSignatureSyntax)
371+
private mutating
372+
func encode(_ function:FunctionSignatureSyntax)
373373
{
374374
if let returns:ReturnClauseSyntax = function.returnClause
375375
{
@@ -389,8 +389,8 @@ extension SignatureSyntax.Encoder<SignatureSyntax.AbridgedParameter>
389389
}
390390
}
391391

392-
static
393-
func += (self:inout Self, modifiers:DeclModifierListSyntax)
392+
private mutating
393+
func encode(_ modifiers:DeclModifierListSyntax)
394394
{
395395
for modifier:DeclModifierSyntax in modifiers
396396
{
@@ -409,14 +409,16 @@ extension SignatureSyntax.Encoder<SignatureSyntax.AbridgedParameter>
409409
}
410410
}
411411

412-
static
413-
func ?= (self:inout Self, clause:GenericParameterClauseSyntax?)
414-
{
415-
clause.map { self += $0 }
416-
}
417-
static
418-
func += (self:inout Self, clause:GenericParameterClauseSyntax)
412+
private mutating
413+
func encode(_ clause:GenericParameterClauseSyntax?)
419414
{
415+
guard
416+
let clause:GenericParameterClauseSyntax
417+
else
418+
{
419+
return
420+
}
421+
420422
self += clause.leftAngle
421423
for parameter:GenericParameterSyntax in clause.parameters
422424
{

Sources/MarkdownPluginSwift/Signatures/SignatureSyntax.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ extension SignatureSyntax
8787
var encoder:Encoder<AbridgedParameter> = .init()
8888
var parser:Parser = .init(utf8)
8989

90-
encoder += DeclSyntax.parse(from: &parser)
90+
encoder.encode(decl: .parse(from: &parser))
9191

9292
return .init(elements: encoder.move())
9393
}
@@ -97,7 +97,7 @@ extension SignatureSyntax
9797
var encoder:Encoder<ExpandedParameter> = .init()
9898
var parser:Parser = .init(utf8)
9999

100-
encoder += DeclSyntax.parse(from: &parser)
100+
encoder.encode(decl: .parse(from: &parser))
101101

102102
return .init(elements: encoder.move())
103103
}

0 commit comments

Comments
 (0)