Skip to content
  • Sam Ford's avatar
    Handle variable strategy block arguments · 085827f6
    Sam Ford authored
    There are times where a regex isn't needed in a `strategy` block and
    these changes explicitly handle that situation.
    
    This allows the Symbol Proc format used in some `Sparkle` `livecheck`
    blocks (e.g., `strategy :sparkle, &:version`) to continue working
    instead of failing with a "wrong number of arguments (given 1,
    expected 0)" error. This error would occur because a Symbol Proc only
    only expects one argument (e.g., an `Item`, not an `Item` and a
    regex/nil).
    
    There's an argument to be made for avoiding the Symbol Proc format
    for `strategy` blocks but I haven't found a way of selectively
    disabling the Style/SymbolProc cop only for a `strategy` DSL method
    call. That is to say, if we don't use the Symbol Proc format, `brew
    style` will give a "Pass &:version as an argument to strategy instead
    of a block." offense.
    
    Besides that, this also replaces the `block` type signatures in
    livecheck strategies with `T.untyped`. Sorbet doesn't know how to
    handle a `Proc` with a variable number of arguments and can't be
    taught how (i.e., `T.any` with a `Proc` signature for each variation
    doesn't work). The aforementioned changes cause Sorbet to complain
    about there being both too many and too few arguments, so the only
    way to win is not to play the game. Hopefully we can restore the
    `block` type signatures in the future (if upstream resolves this
    years-old issue) but `T.untyped` seems to be our only option for now.
    085827f6