Skip to content

Commit

Permalink
Merge pull request #1 from Matejkob/resolves-conflicts
Browse files Browse the repository at this point in the history
Resolves conflicts
  • Loading branch information
dafurman authored Dec 31, 2023
2 parents cfb3c1c + a649109 commit 25dac33
Show file tree
Hide file tree
Showing 7 changed files with 134 additions and 207 deletions.
48 changes: 34 additions & 14 deletions Sources/SpyableMacro/Factories/ClosureFactory.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,13 @@ import SwiftSyntaxBuilder
///
/// The following code:
/// ```swift
/// var fooClosure: ((String, Int) async throws -> Data)?
/// var fooClosure: ((inout String, Int) async throws -> Data)?
///
/// try await fooClosure!(text, count)
/// try await fooClosure!(&text, count)
/// ```
/// would be generated for a function like this:
/// ```swift
/// func foo(text: String, count: Int) async throws -> Data
/// func foo(text: inout String, count: Int) async throws -> Data
/// ```
/// and an argument `variablePrefix` equal to `foo`.
///
Expand Down Expand Up @@ -81,20 +81,28 @@ struct ClosureFactory {
)
}

var expression: ExprSyntaxProtocol = FunctionCallExprSyntax(
calledExpression: calledExpression,
leftParen: .leftParenToken(),
arguments: LabeledExprListSyntax {
for parameter in functionSignature.parameterClause.parameters {
let trailingTrivia: Trivia? = parameter.usesAutoclosure ? "()" : nil
let arguments = LabeledExprListSyntax {
for parameter in functionSignature.parameterClause.parameters {
let baseName = parameter.secondName ?? parameter.firstName

if parameter.isInoutParameter {
LabeledExprSyntax(
expression: DeclReferenceExprSyntax(
baseName: parameter.secondName ?? parameter.firstName
),
trailingTrivia: trailingTrivia
expression: InOutExprSyntax(
expression: DeclReferenceExprSyntax(baseName: baseName)
)
)
} else {
let trailingTrivia: Trivia? = parameter.usesAutoclosure ? "()" : nil

LabeledExprSyntax(expression: DeclReferenceExprSyntax(baseName: baseName), trailingTrivia: trailingTrivia)
}
},
}
}

var expression: ExprSyntaxProtocol = FunctionCallExprSyntax(
calledExpression: calledExpression,
leftParen: .leftParenToken(),
arguments: arguments,
rightParen: .rightParenToken()
)

Expand All @@ -113,3 +121,15 @@ struct ClosureFactory {
TokenSyntax.identifier(variablePrefix + "Closure")
}
}

extension FunctionParameterListSyntax.Element {
fileprivate var isInoutParameter: Bool {
if let attributedType = self.type.as(AttributedTypeSyntax.self),
attributedType.specifier?.text == TokenSyntax.keyword(.inout).text
{
return true
} else {
return false
}
}
}
2 changes: 1 addition & 1 deletion Sources/SpyableMacro/Factories/SpyFactory.swift
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ import SwiftSyntaxBuilder
/// }
/// var fetchTextCountReceivedArguments: (text: String, count: Int)?
/// var fetchTextCountReceivedInvocations: [(text: String, count: Int)] = []
/// var fetchTextCountThrowableError: Error?
/// var fetchTextCountThrowableError: (any Error)?
/// var fetchTextCountReturnValue: Decimal!
/// var fetchTextCountClosure: ((String, Int) async throws -> Decimal)?
///
Expand Down
4 changes: 2 additions & 2 deletions Sources/SpyableMacro/Factories/ThrowableErrorFactory.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import SwiftSyntaxBuilder
///
/// The following code:
/// ```swift
/// var fooThrowableError: Error?
/// var fooThrowableError: (any Error)?
///
/// if let fooThrowableError {
/// throw fooThrowableError
Expand All @@ -32,7 +32,7 @@ struct ThrowableErrorFactory {
func variableDeclaration(variablePrefix: String) throws -> VariableDeclSyntax {
try VariableDeclSyntax(
"""
var \(variableIdentifier(variablePrefix: variablePrefix)): Error?
var \(variableIdentifier(variablePrefix: variablePrefix)): (any Error)?
"""
)
}
Expand Down
Loading

0 comments on commit 25dac33

Please sign in to comment.