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…
A full analysis on a large codebase takes long enough that nobody runs it before committing, so every finding arrives from CI after the context has been lost.…
Frameworks built on __call and facades produce hundreds of findings that are all the same false positive, and putting them in the baseline hides real errors of the…
A generated file recording every existing error is the thing that makes static analysis adoptable on a codebase that has never had any. Reading it once by directory…