Skip to content

Releases

v1.1.0

Choose a tag to compare

@github-actions github-actions released this 06 Nov 06:06
55fdda3
  • Support Psalm 7: TKeyedArray's constructor is private there, so shapes are
    built through TKeyedArray::make() (which Psalm 6 has from 6.19). The
    vimeo/psalm constraint widens to ^6.19 || ^7.0. The Returns integration
    fixture now accepts InvalidScalarArgument, which is what Psalm 7 calls the
    wrong-callback-return case Psalm 6 filed as InvalidArgument.

v1.0.0

Choose a tag to compare

@github-actions github-actions released this 27 Sep 12:55
94a16bb

The stability release, following rasuvaeff/understudy 1.0.0. The plugin's
diagnostic contract is unchanged from 0.8.5; a project on the 0.x bridge
upgrades by changing its engine constraint to ^1.0.

  • Requires rasuvaeff/understudy ^1.0, following the family policy: the
    engine is released first and satellites follow it on the same major.

v0.8.5

Choose a tag to compare

@github-actions github-actions released this 19 Sep 20:53
c6ee952
  • Changed. Accepts rasuvaeff/understudy ^0.12 alongside ^0.9 || ^0.10 || ^0.11: the engine's 0.12.0 runs a specification closure exactly once (the nested-call probe that re-ran it is gone) and refuses two calls side by side as it does a nested pair; this package reads neither, so the bridge is widened, not moved.

v0.8.4

Choose a tag to compare

@github-actions github-actions released this 18 Sep 06:59
aedebb8
  • Changed. Accepts rasuvaeff/understudy ^0.11 alongside ^0.9 || ^0.10: the engine's 0.11.0 adds a refusal where there was a fatal, a nested-call check and a returns() type check, none of which this package reads; the bridge is widened, not moved.

v0.8.3

Choose a tag to compare

@github-actions github-actions released this 06 Sep 09:47
adfcb77
  • Requires rasuvaeff/understudy ^0.9 || ^0.10. The engine's 0.10 closes six
    defects of the 1.0 review, the widest of them being that an optional
    parameter no longer has to be spelled in a specification: when(fn () => $repository->find(1)) now matches a contract whose remaining parameters
    carry defaults, and an unspelled position is rendered as … in reports so
    it is never mistaken for a written any(). Nothing this plugin does changes
    — the arity suppression it carries is about Arg::rest(), which still
    covers the contract's required parameters and only those.
  • Drops the ^0.8 term, as 0.8.2 said it would in the release that
    follows the engine's.

v0.8.2

Choose a tag to compare

@github-actions github-actions released this 05 Sep 17:53
f4c7afe
  • Guards the plugin's load list with a regression test and completes the
    plugin's public summary in the generated family reference.
  • Removes the stale 1.0 wording from llms.txt while the engine family remains
    on its 0.x compatibility line.

v0.8.1

Choose a tag to compare

@github-actions github-actions released this 05 Sep 13:18
a5371cb
  • Allows rasuvaeff/understudy ^0.8 || ^0.9. A bridge, not a widening for
    its own sake: the engine's 0.9 is the 1.0 candidate — every contract decision
    of the 1.0 review lands there, and 1.0 follows once it has been driven by real
    packages — and a project taking it must be able to keep this plugin without a
    window in which composer require silently installs the 0.8 engine beside
    it. The ^0.8 term is dropped in the release that follows the engine's.
  • Rector is green again, which it had not been since 0.5.0: rector.php
    skips the fixture projects — they are the test input, and
    SortCallLikeNamedArgsRector would have rewritten the Misuse fixture
    that pins named bounds in either order into the order that never showed the
    bug — and the remaining suggestions are applied. composer release-check
    is what gates a tag, and it had been red under green builds.
  • infection/infection moves to ^0.35, the monorepo's single-major form.
  • Documentation no longer dates the Arg::rest() and Arg::captor() idioms to
    «understudy 0.4»: with a floor of ^0.8 every engine this plugin installs
    beside has them. AGENTS.md no longer cites a section of the retired plan.

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 05 Sep 11:02
6b6c1c8
  • Requires rasuvaeff/understudy ^0.8, and requires it as a single term. The
    accumulating union it carried (^0.4 || ^0.5 || …) had to be widened by hand
    on every core release, and a package that misses one becomes uninstallable
    beside its own engine.
  • The plugin no longer crashes Psalm on foo(...). A first-class callable
    carries a VariadicPlaceholder where its arguments would be, and php-parser
    asserts against reading them; the before hook read them on every call it
    saw, so a single strlen(...) anywhere in the analysed code took the whole
    run down — no diagnostics, on any file, at any level. That is PHP 8.1 syntax
    and this package declares 8.3–8.5.
  • ->returns(...)->times(5, 2) is reported as impossible again. The
    cardinality rule read only the immediate receiver of times(), so it fired
    on expect(...)->times(5, 2) and stayed silent on every spelling with a
    link in between — including the one the engine's own README recommends for a
    repeated call.
  • times(maximum: 5, minimum: 1) is no longer reported as impossible. The
    bounds were read positionally, so a named call with the arguments in the
    other order looked like (5, 1). Correct code turned red, with no way around
    it but removing the plugin.
  • A specification that reaches its double through a helper is silent.
    when(fn () => $this->gate()->find(1)), $double->find($this->id()) and
    $this->passThrough($double->find(1)) were all reported as "the closure
    makes 2 calls". The engine throws on the first call that lands on a double
    and never sees the rest, so a call that is the receiver of another, or one
    made on $this, is not a second specified call. The total is still what
    answers "no call at all", so a specification that only reaches its double
    through a helper is not accused of specifying nothing either.
  • A matcher whose kind cannot fit is described as matching "a value of type
    int" rather than "a int" — the wording understudy-phpstan already used.
  • README ×2 and llms.txt now say that a leaked matcher is reported by Psalm's
    own MixedArgument and therefore only at errorLevel="1", and why this
    plugin has no rule of its own for it.

v0.7.0

Choose a tag to compare

@github-actions github-actions released this 04 Sep 20:36
964ca3d
  • Matcher argument suppression is now scoped to real matcher calls.
    Arg::captor() builds a captor and is no longer mistaken for a matcher, so
    Psalm keeps reporting an invalid captor value passed directly to a typed
    parameter.
  • TooFewArguments suppression now uses file offsets for every scope. A
    valid Arg::rest() specification and a real under-arity call on the same
    source line are distinguished, so the real call keeps Psalm's diagnostics.
  • Added control-run integration coverage for both boundaries.

v0.6.1

Choose a tag to compare

@github-actions github-actions released this 04 Sep 10:04
14b96c3
  • Documentation review fixes. Added the missing make test-integration
    target — README and AGENTS referenced it, the Makefile did not define it.
    Both READMEs gained the Security and Examples sections; the make build
    comment now lists everything the script runs.