Module: Ibex::CLIDocumentation
- Defined in:
- lib/ibex/cli/documentation.rb,
sig/ibex/cli/documentation.rbs
Overview
Generates standalone grammar documentation from the canonical include closure.
Instance Method Summary collapse
- #documentation_option_parser(settings) ⇒ OptionParser
- #reject_documentation_output_collision(output, grammar_files) ⇒ void
- #run_documentation_command(arguments) ⇒ Integer
Instance Method Details
#documentation_option_parser(settings) ⇒ OptionParser
55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/ibex/cli/documentation.rb', line 55 def documentation_option_parser(settings) OptionParser.new do || . = "Usage: ibex doc [options] grammarfile" .on("--format=FORMAT", Codegen::Documentation::FORMATS, "markdown, html, or railroad") do |value| settings[:format] = value end .on("-o FILE", "--output=FILE", "write atomically to FILE") { |value| settings[:output] = value } .on("--mode=MODE", %w[default extended], "grammar mode") { |value| settings[:mode] = value.to_sym } .on("--help", "show help") { settings[:help] = true } end end |
#reject_documentation_output_collision(output, grammar_files) ⇒ void
This method returns an undefined value.
46 47 48 49 50 51 52 |
# File 'lib/ibex/cli/documentation.rb', line 46 def reject_documentation_output_collision(output, grammar_files) collision = grammar_files.find { |grammar_file| same_file_target?(grammar_file, output) } return unless collision raise Ibex::Error, "(cli):1:1: doc input and output paths must be distinct; output aliases grammar source #{collision}" end |
#run_documentation_command(arguments) ⇒ Integer
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/ibex/cli/documentation.rb', line 26 def run_documentation_command(arguments) settings = { format: "markdown", mode: :default } #: documentation_settings parser = documentation_option_parser(settings) remaining = parser.parse(arguments) if settings[:help] @stdout.puts(parser) return 0 end path = input_path(remaining) output = settings[:output] resolution = Frontend::Resolver.new(path, mode: settings.fetch(:mode)).resolve reject_documentation_output_collision(output, resolution.files) if output grammar = Normalizer.new(resolution, mode: settings.fetch(:mode)).normalize rendered = Codegen::Documentation.render(grammar, format: settings.fetch(:format)) output ? atomic_write_ir(output, rendered) : @stdout.write(rendered) 0 end |