krzysztofzablocki / Sourcery

Meta-programming for Swift, stop writing boilerplate code.
http://merowing.info
MIT License
7.65k stars 616 forks source link

AutoMockable does not generate valid swift code for static protocol extensions methods #1335

Closed MontakOleg closed 3 months ago

MontakOleg commented 4 months ago

Given

// sourcery: AutoMockable
protocol SomeProtocol {
    static func thisIsOk()
}

extension SomeProtocol {
    static func thisIsDoesNotCompile() {}
}

Generates:

class SomeProtocolMock: SomeProtocol {

    static func reset()
    {
         //MARK: - thisIsOk
        thisIsOkVoidCallsCount = 0
        thisIsOkVoidClosure = nil

         //MARK: - thisIsDoesNotCompile
        thisIsDoesNotCompileVoidCallsCount = 0 //  ❌ Cannot find 'thisIsDoesNotCompileVoidCallsCount' in scope
        thisIsDoesNotCompileVoidClosure = nil //  ❌ Cannot find 'thisIsDoesNotCompileVoidClosure' in scope

    }

    //MARK: - thisIsOk

    static var thisIsOkVoidCallsCount = 0
    static var thisIsOkVoidCalled: Bool {
        return thisIsOkVoidCallsCount > 0
    }
    static var thisIsOkVoidClosure: (() -> Void)?

    static func thisIsOk() {
        thisIsOkVoidCallsCount += 1
        thisIsOkVoidClosure?()
    }

}