diff --git a/pkg/lint/adapter.go b/pkg/lint/adapter.go index 5cf2b49..812bd59 100644 --- a/pkg/lint/adapter.go +++ b/pkg/lint/adapter.go @@ -5,6 +5,7 @@ import ( "context" "encoding/json" "errors" + "fmt" "io" "os/exec" "path/filepath" @@ -166,6 +167,18 @@ func (adapter CommandAdapter) Run(ctx context.Context, input RunInput, files []s if !ok { result.Tool.Status = "skipped" result.Tool.Duration = "0s" + missingName := firstNonEmpty(adapter.Command(), adapter.name) + if missingName == "" { + missingName = adapter.name + } + result.Findings = []Finding{{ + Tool: adapter.name, + Severity: "info", + Code: "missing-tool", + Message: fmt.Sprintf("%s is not installed", missingName), + Category: adapter.category, + }} + result.Tool.Findings = len(result.Findings) return result } diff --git a/pkg/lint/service_test.go b/pkg/lint/service_test.go index fe8ea91..df33c14 100644 --- a/pkg/lint/service_test.go +++ b/pkg/lint/service_test.go @@ -501,6 +501,32 @@ exit 0 assert.Equal(t, "prettier 3.2.1", report.Tools[0].Version) } +func TestServiceRun_Good_ReportsMissingToolAsInfoFinding(t *testing.T) { + dir := t.TempDir() + require.NoError(t, os.WriteFile(filepath.Join(dir, "composer.json"), []byte("{\n \"name\": \"example/test\"\n}\n"), 0o644)) + require.NoError(t, os.WriteFile(filepath.Join(dir, "index.php"), []byte("