class

Detector::Specification::GraphqlSdl

Inherits Detector < Reference < Object

Constants

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 named type, schema, or enum, 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

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

Registers every SDL path in CodeLocator for the analyzer pass. Must keep running after the first match so all schema files get picked up.

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

Registers every SDL path in CodeLocator for the analyzer pass. Must keep running after the first match so all schema files get picked up.

Source
set_name

Registers every SDL path in CodeLocator for the analyzer pass. Must keep running after the first match so all schema files get picked up.

Source