diff --git a/Sources/EnumeratorMacroImpl/EnumeratorMacroType.swift b/Sources/EnumeratorMacroImpl/EnumeratorMacroType.swift index 42f0763..ddcd694 100644 --- a/Sources/EnumeratorMacroImpl/EnumeratorMacroType.swift +++ b/Sources/EnumeratorMacroImpl/EnumeratorMacroType.swift @@ -169,8 +169,8 @@ extension EnumeratorMacroType: MemberMacro { } let postProcessedSyntaxes = syntaxes.compactMap { (syntax, codeSyntax) -> DeclSyntax? in - let rewriter = Rewriter() - let newSyntax = rewriter.rewrite(syntax) + let postProcessor = PostProcessor() + let newSyntax = postProcessor.rewrite(syntax) guard let declSyntax = DeclSyntax(newSyntax) else { context.diagnose( Diagnostic( diff --git a/Sources/EnumeratorMacroImpl/Rewriter.swift b/Sources/EnumeratorMacroImpl/PostProcessor.swift similarity index 75% rename from Sources/EnumeratorMacroImpl/Rewriter.swift rename to Sources/EnumeratorMacroImpl/PostProcessor.swift index 1d4b9be..8befe98 100644 --- a/Sources/EnumeratorMacroImpl/Rewriter.swift +++ b/Sources/EnumeratorMacroImpl/PostProcessor.swift @@ -1,6 +1,6 @@ import SwiftSyntax -final class Rewriter: SyntaxRewriter { +final class PostProcessor: SyntaxRewriter { override func visit(_ node: SwitchCaseSyntax) -> SwitchCaseSyntax { self.removeUnusedLet( self.removeUnusedArguments( @@ -45,34 +45,42 @@ final class Rewriter: SyntaxRewriter { let identifier = patternExpr.pattern.as(IdentifierPatternSyntax.self) else { continue } - /// The arg is already a wildcard so no need to modify - if identifier.identifier.tokenKind == .wildcard { - allArgsAreWildcards = allArgsAreWildcards && true + /// Only try to do something if the `tokenKind` is `.identifier`. + guard case .identifier = identifier.identifier.tokenKind else { + let isWildCard = identifier.identifier.tokenKind == .wildcard + allArgsAreWildcards = allArgsAreWildcards && isWildCard continue - } else { - let presenceDetector = PresenceDetector(toDetect: identifier.identifier.tokenKind) - presenceDetector.walk(node) - if presenceDetector.detectCount < 2 { - didModify = true - allArgsAreWildcards = allArgsAreWildcards && true - let idx = arguments.index(at: idx) - arguments[idx] = arguments[idx].with( - \.expression, - ExprSyntax( - patternExpr.with( - \.pattern, - PatternSyntax( - identifier.with( - \.identifier, - .wildcardToken() - ) - ) - ) - ) - ) - } else { - allArgsAreWildcards = false - } + } + + let presenceDetector = PresenceDetector( + toDetect: identifier.identifier.tokenKind + ) + presenceDetector.walk(node) + guard presenceDetector.detectCount < 2 else { + allArgsAreWildcards = false + continue + } + + if presenceDetector.detectCount < 2 { + /// Doesn't logically do anything, so commented out. + /* allArgsAreWildcards = allArgsAreWildcards && true */ + + didModify = true + let idx = arguments.index(at: idx) + arguments[idx] = arguments[idx].with( + \.expression, + ExprSyntax( + patternExpr.with( + \.pattern, + PatternSyntax( + identifier.with( + \.identifier, + .wildcardToken() + ) + ) + ) + ) + ) } }