interaction-design-foundation/psalm-laravel-nova
Psalm plugin for Laravel Nova that improves static analysis by providing accurate type information and stubs for Nova resources, fields, actions, and filters. Helps catch errors earlier and reduces false positives in Psalm checks.
Architecture fit
psalm-plugin Composer type) targeting Laravel Nova. It slots into Psalm's plugin event system (PluginEntryPointInterface, AfterCodebasePopulated, AfterClassLikeVisit) and/or ships stub files to teach Psalm about Nova's magic methods, fluent field chains, and dynamic resource/action/filter APIs.require-dev only, zero runtime footprint, no production coupling. That is the lowest-risk integration profile a package can have.Text::make()->sortable()->rules(...), public function fields(Request $request)) is exactly the surface static analysis struggles with. A plugin here plausibly converts a class of runtime admin-panel errors into compile-time errors — real value, if coverage is real.canSee() on Actions, Filters and Lenses accepting a NovaRequest callback, and Field::make()'s resolve callback accepting a typed resource/attribute. These are precisely the "closure or scalar, magic-typed arguments" patterns Psalm cannot infer alone, which is the package's entire reason to exist.Integration feasibility
composer require --dev interaction-design-foundation/psalm-laravel-nova, add <pluginClass> to psalm.xml, run vendor/bin/psalm.nova.laravel.com behind licensed Composer credentials. Any CI job that resolves the plugin against a real Nova install must hold NOVA_USERNAME/NOVA_PASSWORD (or a license key) as secrets. That is a procurement/security/ops dependency, not a code dependency.Technical risk
Key questions
alies-dev a funded maintainer or a volunteer?Stack fit
MixedAssignment/UndefinedMethod/PossiblyInvalidArgument issues. That is the measurable pain this package addresses.canSee() and Field::make() callback complaints specifically should see a measurable delta from v0.2.3 alone — that makes it a good first spike target.Migration path
^0.2), run psalm --set-baseline before and after to isolate the plugin's delta.Compatibility
composer.json constraints against your Nova pin before adopting; an over-broad constraint is a red flag.Sequencing
canSee() closures and Field::make() resolve callbacks, to exercise the v0.2.3 fixes — measure issue delta, inspect stub coverage, read the plugin source.Maintenance
Support
Scaling
--threads, incremental cache, and scoping (analyze changed packages only).app/Nova and adjacent service classes to keep cost proportionate.Failure modes
canSee() callback misuse and a mistyped Field::make() resolve callback as explicit regression cases, since upstream now covers them.Ramp-up
How can I help you explore Laravel packages today?