class

Detector::Specification::Nginx

Inherits Detector < Reference < Object

Constants

EXTENSIONS = {".conf", ".tmpl", ".template"}

.conf is by far the most common extension for Nginx fragments; .tmpl/.template files are common in docker-gen and deployment repositories that render Nginx configs from templates.

LOCATION_RE = /^\s*location\s+(?:(?:=|~\*|~|\^~)\s+)?\S+/
SHAPE_GUARD = /location|\{\{/

Whole-content necessary-condition guard for nginx_shape?: a line can only match LOCATION_RE if "location" appears in the raw content — or if a template action is spliced out of the middle of the word (loc{{x}}ation), which the \{\{ disjunct keeps on the slow path. Comment stripping only truncates lines, so it can never assemble the keyword. Skips the per-line walk for the vast majority of .conf / .tmpl files that carry no location block.

Class methods

tech_name

The tech name without needing an instance, so the registry can be read off the classes themselves rather than from a parallel list.

Source

Instance methods

applicable?(filename : String) : Bool

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.

Source
detect(filename : String, file_contents : String) : Bool
Source
idempotent?

Registers each Nginx config path in CodeLocator.

Source
set_name

Registers each Nginx config path in CodeLocator.

Source