8.1, and a keyword that removes a getter per property. Forty value objects, each with private fields and public accessors that existed only to prevent writes.
After five years of 0.x, 1.0 in November is a commitment that a level will not start reporting new errors in a patch release. The practical difference is…
Level 8 checks calls on values that may be null, and it is the level where most projects discover how much of their code assumes otherwise. The temptation…
Ignoring an error by matching its message couples the configuration to wording that changes between releases. reportUnmatchedIgnoredErrors is on by default and worth keeping on, because it turns…
PHP has no generics, so @return list<Order> is a promise to the analyser and a comment to the engine. The annotations are genuinely useful and are genuinely unenforced:…
The two analysers have different defaults and different opinions about the same code, and running both is rarely worth it. Psalm’s taint analysis is the one genuinely differentiating…