package detector import ( "context" "strings" "github.com/swadhinbiswas/veet/internal/model" ) type brewDetector struct { ex Execer path string } // NewBrewDetector detects Homebrew formulae and casks on Linux. func NewBrewDetector(ex Execer) Detector { path, _ := ex.LookPath("brew") return &brewDetector{ex: ex, path: path} } func (d *brewDetector) Source() string { return "brew" } func (d *brewDetector) Available() bool { return d.path != "" } func (d *brewDetector) Detect(ctx context.Context) ([]model.AppInfo, error) { out, err := Exec(ctx, d.ex, "brew", "list", "--versions") if err != nil { return nil, err } var apps []model.AppInfo for _, line := range strings.Split(out, "\n") { fields := strings.Fields(line) if len(fields) < 2 { continue } name := fields[0] version := fields[1] apps = append(apps, model.AppInfo{ Name: name, Version: version, Source: "brew", Status: "Installed", }) } return apps, nil }