LINT.SKIPPED.MISSING_TOOL — an optional external tool is not installed
- Category: safety
- Level: 0
- Stability: stable
- Suites: lint
An external tool the run wanted is not installed, or does not run on this platform. The rules that depend on it did not run — and the finding names which ones, because "these three checks did not happen" is actionable and "no findings" is not.
External tools are amplifiers, never requirements
This is a design commitment rather than a convenience. SQLens' own rules run with nothing installed beyond PHP; an external tool adds coverage on top. A missing tool therefore degrades the run, and degrading honestly means saying what was lost.
The alternative — quietly running the remaining rules and reporting clean — would make the value of the tool invisible and its absence indistinguishable from a healthy run.
Strict mode turns it into a failure
By default this is an undetermined finding: the run continues, reports what it could check, and
names what it could not. In a pipeline where the tool is supposed to be present, that is too soft —
so --strict-tools turns a missing tool into a misconfiguration exit instead:
php artisan sqlens:lint --strict-tools
Use it in CI, where the toolchain is installed on purpose and its absence is a broken image rather than a local convenience. Leave it off for developers, whose machines are allowed to differ.
Finding out what is available
php artisan sqlens:doctor
The doctor command reports each known tool: whether it was found, where, which version, and what it adds. That is also where a version outside the supported window shows up — a tool that is present but too old is reported as unusable rather than used and trusted.
Configuring a path
A tool installed somewhere unusual can be pointed at directly, and the configured path wins over
$PATH:
'tools' => ['squawk' => ['path' => '/opt/homebrew/bin/squawk']],
An unknown key in that block is a configuration error, not an ignored line.
Related
LINT.SKIPPED— the other ways a run can end having linted nothing