class
Detector::Specification::GraphqlSdl
- Detector::Specification::GraphqlSdl
- Detector
- Reference
- Object
Defined in:
detector/detectors/specification/graphql_sdl.crConstant Summary
-
SDL_DECLARATION =
/^(?:(?:extend\s+)?(?:type|input|interface|enum|scalar)\s+[A-Za-z_][A-Za-z0-9_]*\b|(?:extend\s+)?union\s+[A-Za-z_][A-Za-z0-9_]*\s*=|directive\s+@[A-Za-z_][A-Za-z0-9_]*\b|(?:extend\s+)?schema\b)/ -
SDL declaration signals — distinguished at top-level only by
sdl_document?. A broad keyword-only check is too loose: generated operation documents often select fields namedtype,schema, orenum, and those field names can appear at the start of an indented line.sdl_document?walks the document with a small state machine:- tracks brace depth (only outside strings) so keywords inside selections, fragments, or default values are ignored
- skips block strings (""") and regular strings ("...") so that string literals containing SDL-like keywords, #, or {}/ do not affect detection or depth (e.g. default values or descriptions with example SDL)
- strips # comments only when not inside a string
Instance Method Summary
-
#applicable?(filename : String) : Bool
Cheap filename-only filter the detector pass uses to skip
#detecton files the detector cannot possibly match. - #detect(filename : String, file_contents : String) : Bool
-
#idempotent? : Bool
Registers every SDL path in
CodeLocatorfor the analyzer pass. - #set_name
Instance methods inherited from class Detector
applicable?(filename : String) : Bool
applicable?,
detect(filename : String, file_contents : String) : Bool
detect,
gemfile_dependency?(file_contents : String, gem_name : String) : Bool
gemfile_dependency?,
gemspec_dependency?(file_contents : String, gem_name : String) : Bool
gemspec_dependency?,
idempotent? : Bool
idempotent?,
logger : NoirLogger
logger,
name : String
name
Constructor methods inherited from class Detector
new(options : Hash(String, YAML::Any))
new
Macros inherited from class Detector
define_getter_methods(names)
define_getter_methods
Instance Method Detail
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.
Registers every SDL path in CodeLocator for the analyzer pass.
Must keep running after the first match so all schema files get picked up.