Module: Ibex::Configuration::Inspector
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
Class Method Details
.from_grammar_ir(grammar, path:) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/ibex/configuration/inspector.rb', line 45 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
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/ibex/configuration/inspector.rb', line 20 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 |