Module: Ibex::CLIConfig
- Defined in:
- lib/ibex/cli/config.rb,
sig/ibex/cli/config.rbs
Overview
Static effective-configuration reporting for source grammars and Grammar IR.
Instance Method Summary collapse
- #add_config_contract_options(options, settings) ⇒ void
- #add_config_options(options, settings) ⇒ void
- #config_options(arguments) ⇒ [ config_options, Array[String] ]
- #load_configuration_input(path, settings) ⇒ Configuration::Input
- #load_grammar_ir_configuration(path) ⇒ Configuration::Input
- #run_config_command(arguments) ⇒ Integer
- #write_configuration_report(report, format) ⇒ void
Instance Method Details
#add_config_contract_options(options, settings) ⇒ void
This method returns an undefined value.
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/ibex/cli/config.rb', line 81 def (, settings) .on("--mode=MODE", %w[default extended], "grammar mode") do |value| set_local_configuration_option(settings, :mode, value.to_sym) end .on("--algorithm=NAME", %w[slr lalr ielr lr1], "parser construction algorithm") do |value| set_local_configuration_option(settings, :algorithm, value.to_sym) end .on("--entry-isolation", "build independent state sets for each start symbol") do set_local_configuration_option(settings, :entry_isolation, true) end .on("--cst-trivia=POLICY", %w[leading balanced drop attach], "CST trivia policy") do |value| set_local_configuration_option(settings, :cst_trivia, value.to_sym) end .on("--superclass=CLASS", "request a parser superclass") do |value| set_local_configuration_option(settings, :superclass, value) end .on("--no-omit-actions", "generate implicit action methods") do set_local_configuration_option(settings, :omit_actions, false) end end |
#add_config_options(options, settings) ⇒ void
This method returns an undefined value.
69 70 71 72 73 74 75 76 77 78 |
# File 'lib/ibex/cli/config.rb', line 69 def (, settings) .on("--format=FORMAT", %w[text json], "text or json (default: text)") do |value| settings[:format] = value end .on("--from=FORMAT", %w[grammar-ir], "read validated Grammar IR JSON") do |value| settings[:from] = value end (, settings) .on("--help", "show help") { settings[:help] = .to_s } end |
#config_options(arguments) ⇒ [ config_options, Array[String] ]
56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/ibex/cli/config.rb', line 56 def (arguments) settings = { format: "text", mode: Configuration::Registry.fetch("grammar.mode").default, configuration_explicit: [] } #: config_options parser = OptionParser.new do || . = "Usage: ibex config [options] grammarfile" (, settings) end [settings, parser.parse(arguments)] end |
#load_configuration_input(path, settings) ⇒ Configuration::Input
103 104 105 106 107 108 109 |
# File 'lib/ibex/cli/config.rb', line 103 def load_configuration_input(path, settings) return load_grammar_ir_configuration(path) if settings[:from] == "grammar-ir" loader = Frontend::SourceLoader.new(record_reads: true) resolver = Frontend::Resolver.new(path, mode: settings.fetch(:mode), loader: loader) Configuration::Inspector.from_source(resolver.resolve) end |
#load_grammar_ir_configuration(path) ⇒ Configuration::Input
112 113 114 115 116 117 |
# File 'lib/ibex/cli/config.rb', line 112 def load_grammar_ir_configuration(path) value = IR::Validator.validate(File.binread(path)) raise Ibex::Error, "#{path}:1:1: expected grammar-ir input" unless value.is_a?(IR::Grammar) Configuration::Inspector.from_grammar_ir(value, path: path) end |
#run_config_command(arguments) ⇒ Integer
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/ibex/cli/config.rb', line 33 def run_config_command(arguments) settings, paths = (arguments) if settings[:help] @stdout.puts(settings.fetch(:help)) return 0 end path = input_path(paths) input = load_configuration_input(path, settings) cli_values = Configuration::CLIAdapter.new( settings, explicit_keys: settings.fetch(:configuration_explicit) ).configuration_values report = Configuration::Report.new(input, cli: cli_values) write_configuration_report(report, settings.fetch(:format)) return 0 if report.success? report.conflicts.each do |conflict| @stderr.puts(Messages.translate("cli.error", language: @language, detail: conflict.)) end 1 end |
#write_configuration_report(report, format) ⇒ void
This method returns an undefined value.
120 121 122 123 124 125 126 |
# File 'lib/ibex/cli/config.rb', line 120 def write_configuration_report(report, format) if format == "json" @stdout.puts(JSON.pretty_generate(report.to_h)) else @stdout.write(report.render_text) end end |