Module: Ibex::Configuration::Inspector
- Defined in:
- lib/ibex/configuration/inspector.rb,
sig/ibex/configuration/inspector.rbs
Overview
Converts parsed source or validated Grammar IR into static configuration facts. rubocop:disable Metrics/ModuleLength -- source and IR adapters share one closed evidence vocabulary.
Class Method Summary collapse
Instance Method Summary collapse
- #self?.add_contract_entry ⇒ void
- #self?.add_ir_fact ⇒ void
- #self?.add_parser_contract ⇒ void
- #self?.add_source_fact ⇒ void
- #self?.add_source_options ⇒ void
- #self?.add_source_parser_contract ⇒ void
- #self?.configuration_location ⇒ Location
- #self?.contract_entries ⇒ Hash[String, IR::ParserContract::Entry]
- #self?.from_grammar_ir ⇒ Input
- #self?.from_source ⇒ Input
- #self?.option_evidence ⇒ Array[Evidence]
- #self?.option_value ⇒ Boolean?
Class Method Details
.from_grammar_ir(grammar, path:) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/ibex/configuration/inspector.rb', line 41 def from_grammar_ir(grammar, path:) raise ArgumentError, "configuration inspection requires Grammar IR" unless grammar.is_a?(IR::Grammar) values = {} #: Hash[String, config_value] locations = {} #: Hash[String, Location] evidence = {} #: Hash[String, Array[Evidence]] recordings = Registry.keys.to_h do |key| reason = "Grammar IR does not persist #{key.name}; " \ "current builtin or CLI selection is not historical evidence" [key.name, Recording.new(:unavailable, reason)] end add_ir_fact(values, evidence, recordings, "grammar.mode", grammar.mode) if grammar.mode != :default add_ir_fact(values, evidence, recordings, "parser.superclass", grammar.superclass) if grammar.superclass add_ir_fact(values, evidence, recordings, "actions.omit_calls", grammar..fetch(:omit_action_call)) add_parser_contract(grammar, values, locations, evidence, recordings) Input.new( kind: :grammar_ir, path: path, schema_version: grammar.schema_version, grammar_values: values, grammar_locations: locations, evidence: evidence, recordings: recordings ) end |
.from_source(resolution) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/ibex/configuration/inspector.rb', line 15 def from_source(resolution) unless resolution.is_a?(Frontend::Resolution) raise ArgumentError, "source configuration inspection requires a Frontend::Resolution" end values = {} #: Hash[String, config_value] locations = {} #: Hash[String, Location] evidence = {} #: Hash[String, Array[Evidence]] root = resolution.root extended_loc = root.extended_loc add_source_fact(values, locations, evidence, "grammar.mode", :extended, extended_loc) if extended_loc add_source_fact(values, locations, evidence, "parser.superclass", root.superclass, root.loc) if root.superclass (root, values, locations, evidence) add_source_parser_contract(root, values, locations, evidence) recordings = Registry.keys.to_h do |key| [key.name, Recording.new(:source, "the grammar source and contained import closure were inspected statically")] end Input.new( kind: :grammar_source, path: resolution.root_path, files: resolution.files, grammar_values: values, grammar_locations: locations, evidence: evidence, recordings: recordings ) end |
Instance Method Details
#self?.add_contract_entry ⇒ void
This method returns an undefined value.
47 |
# File 'sig/ibex/configuration/inspector.rbs', line 47
def self?.add_contract_entry: (String name, IR::ParserContract::Entry entry, Hash[String, config_value] values, Hash[String, Location] locations, Hash[String, Array[Evidence]] evidence, Hash[String, Recording] recordings) -> void
|
#self?.add_ir_fact ⇒ void
This method returns an undefined value.
38 |
# File 'sig/ibex/configuration/inspector.rbs', line 38
def self?.add_ir_fact: (Hash[String, config_value] values, Hash[String, Array[Evidence]] evidence, Hash[String, Recording] recordings, String name, config_value value) -> void
|
#self?.add_parser_contract ⇒ void
This method returns an undefined value.
42 |
# File 'sig/ibex/configuration/inspector.rbs', line 42
def self?.add_parser_contract: (IR::Grammar grammar, Hash[String, config_value] values, Hash[String, Location] locations, Hash[String, Array[Evidence]] evidence, Hash[String, Recording] recordings) -> void
|
#self?.add_source_fact ⇒ void
This method returns an undefined value.
17 |
# File 'sig/ibex/configuration/inspector.rbs', line 17
def self?.add_source_fact: (Hash[String, config_value] values, Hash[String, Location] locations, Hash[String, Array[Evidence]] evidence, String name, config_value value, Frontend::Location | Location location) -> void
|
#self?.add_source_options ⇒ void
This method returns an undefined value.
21 |
# File 'sig/ibex/configuration/inspector.rbs', line 21
def self?.add_source_options: (Frontend::AST::Root root, Hash[String, config_value] values, Hash[String, Location] locations, Hash[String, Array[Evidence]] evidence) -> void
|
#self?.add_source_parser_contract ⇒ void
This method returns an undefined value.
25 |
# File 'sig/ibex/configuration/inspector.rbs', line 25
def self?.add_source_parser_contract: (Frontend::AST::Root root, Hash[String, config_value] values, Hash[String, Location] locations, Hash[String, Array[Evidence]] evidence) -> void
|
#self?.configuration_location ⇒ Location
31 |
# File 'sig/ibex/configuration/inspector.rbs', line 31
def self?.configuration_location: (Frontend::Location | Location location) -> Location
|
#self?.contract_entries ⇒ Hash[String, IR::ParserContract::Entry]
50 |
# File 'sig/ibex/configuration/inspector.rbs', line 50
def self?.contract_entries: (IR::ParserContract contract) -> Hash[String, IR::ParserContract::Entry]
|
#self?.from_grammar_ir ⇒ Input
12 |
# File 'sig/ibex/configuration/inspector.rbs', line 12
def self?.from_grammar_ir: (IR::Grammar grammar, path: String) -> Input
|
#self?.from_source ⇒ Input
9 |
# File 'sig/ibex/configuration/inspector.rbs', line 9
def self?.from_source: (Frontend::Resolution resolution) -> Input
|
#self?.option_evidence ⇒ Array[Evidence]
34 |
# File 'sig/ibex/configuration/inspector.rbs', line 34
def self?.option_evidence: (Key key, Array[[ bool, Location ]] occurrences, bool selected_value) -> Array[Evidence]
|
#self?.option_value ⇒ Boolean?
28 |
# File 'sig/ibex/configuration/inspector.rbs', line 28
def self?.option_value: (String name) -> bool?
|