Skip to main content

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.

  • LINT.SKIPPED — the other ways a run can end having linted nothing