Detector::Ruby::Cli
Detects Ruby command-line applications: programs that parse argv via the
stdlib OptionParser, a < Thor subclass, or a CLI gem (gli, slop,
tty-option, commander, optimist, clamp, dry-cli), or that index ARGV
directly. Gates the Ruby CLI analyzer. Intentionally import/usage-anchored:
bare ENV[...] or a plain ARGV reference (without an index) is too
common in web apps to qualify.
Constants
Single-pass union of every source marker above (the two thor require
forms were bare includes? probes; Regex.union escapes string
arguments literally). The previous chain scanned the whole file up to
11 times on non-CLI Ruby sources — the common case.
Class methods
The tech name without needing an instance, so the registry can be read off the classes themselves rather than from a parallel list.
Instance methods
Cheap filename-only filter the detector pass uses to skip
detect on files the detector cannot possibly match. The
default true preserves prior behavior (every detector runs on
every file). Override with the same predicate the body of
detect starts with — e.g., filename.ends_with?(".py") for a
Python framework detector — so the detector loop avoids the
detect dispatch on files outside the detector's language.
On large codebases (saleor's 4255 .py files) this lifts ~100
virtual detect calls per file out of the hot loop because
most detectors' inner first-line is exactly this kind of cheap
filename check.