nicklockwood / SwiftFormat

A command-line tool and Xcode Extension for formatting Swift code
MIT License
7.87k stars 638 forks source link

Unexpected false-positive in unusedArguments rule #1627

Closed calda closed 7 months ago

calda commented 7 months ago

When using a build from top-of-tree develop, the unusedArguments rule unexpectedly removes the argument in this method:

Before

public func flagMessage(_ message: DBMessage, asFlagged: Bool) {
  model.withState { [weak self] state in
    guard
      let self,
      let flagMessageFeature,
      flagMessageFeature.shouldAllowFlaggingMessage(
        message,
        thread: state.thread,
        asFlagged: asFlagged),
      !(state.messageKeyToFlagMessageLoadingStateMap[message.key]?.isLoading ?? false)
    else { return }

    model.execute(
      flagMessageFeature.flagMessageRxSwift(
        message: message,
        asFlagged: asFlagged,
        thread: state.thread,
        scheduler: schedulerRxSwift).asObservable(),
      loadingReducer: { state in
        state.messageKeyToFlagMessageLoadingStateMap[message.key] = .loading
      },
      errorReducer: { state, _ in
        let error = ThreadRetryableError.flagMessage(
          message: message,
          asFlagged: asFlagged)
        state.messageKeyToFlagMessageLoadingStateMap[message.key] = .fail(error: error)
      },
      payloadReducer: { state, payload in
        state.update(with: payload)
        state.messageKeyToFlagMessageLoadingStateMap[message.key] = .success(value: payload)
      })
  }
}

After

The message argument is unexpectedly removed, causing a build failure

public func flagMessage(_: DBMessage, asFlagged: Bool) {
  model.withState { [weak self] state in
    guard
      let self,
      let flagMessageFeature,
      flagMessageFeature.shouldAllowFlaggingMessage(
        message,
        thread: state.thread,
        asFlagged: asFlagged),
      !(state.messageKeyToFlagMessageLoadingStateMap[message.key]?.isLoading ?? false)
    else { return }

    model.execute(
      flagMessageFeature.flagMessageRxSwift(
        message: message,
        asFlagged: asFlagged,
        thread: state.thread,
        scheduler: schedulerRxSwift).asObservable(),
      loadingReducer: { state in
        state.messageKeyToFlagMessageLoadingStateMap[message.key] = .loading
      },
      errorReducer: { state, _ in
        let error = ThreadRetryableError.flagMessage(
          message: message,
          asFlagged: asFlagged)
        state.messageKeyToFlagMessageLoadingStateMap[message.key] = .fail(error: error)
      },
      payloadReducer: { state, payload in
        state.update(with: payload)
        state.messageKeyToFlagMessageLoadingStateMap[message.key] = .success(value: payload)
      })
  }
}
nicklockwood commented 7 months ago

@calda fixed in 0.53.2

calda commented 7 months ago

thanks!