lib/yard/cli/yardopts_command.rb in yard-0.9.18 vs lib/yard/cli/yardopts_command.rb in yard-0.9.19

- old
+ new

@@ -1,110 +1,110 @@ -# frozen_string_literal: true -require 'optparse' - -module YARD - module CLI - # Abstract base class for command that reads .yardopts file - # - # @abstract - # @since 0.8.3 - class YardoptsCommand < Command - # The configuration filename to load extra options from - DEFAULT_YARDOPTS_FILE = ".yardopts" - - # @return [Boolean] whether to parse options from .yardopts - attr_accessor :use_yardopts_file - - # @return [Boolean] whether to parse options from .document - attr_accessor :use_document_file - - # The options file name (defaults to {DEFAULT_YARDOPTS_FILE}) - # @return [String] the filename to load extra options from - attr_accessor :options_file - - # Creates a new command that reads .yardopts - def initialize - super - @options_file = DEFAULT_YARDOPTS_FILE - @use_yardopts_file = true - @use_document_file = true - end - - # Parses commandline arguments - # @param [Array<String>] args the list of arguments - # @return [Boolean] whether or not arguments are valid - # @since 0.5.6 - def parse_arguments(*args) - parse_yardopts_options(*args) - - # Parse files and then command line arguments - parse_rdoc_document_file - parse_yardopts - optparse(*args) - end - - protected - - # Adds --[no-]yardopts / --[no-]document - def yardopts_options(opts) - opts.on('--[no-]yardopts [FILE]', - "If arguments should be read from FILE", - " (defaults to yes, FILE defaults to .yardopts)") do |use_yardopts| - if use_yardopts.is_a?(String) - self.options_file = use_yardopts - self.use_yardopts_file = true - else - self.use_yardopts_file = (use_yardopts != false) - end - end - - opts.on('--[no-]document', "If arguments should be read from .document file. ", - " (defaults to yes)") do |use_document| - self.use_document_file = use_document - end - end - - private - - # Parses the .yardopts file for default yard options - # @return [Array<String>] an array of options parsed from .yardopts - def yardopts(file = options_file) - return [] unless use_yardopts_file - File.read_binary(file).shell_split - rescue Errno::ENOENT - [] - end - - # Parses out the yardopts/document options - def parse_yardopts_options(*args) - opts = OptionParser.new - opts.base.long.clear # HACK: why are --help and --version defined? - yardopts_options(opts) - begin - opts.parse(args) - rescue OptionParser::ParseError => err - idx = args.index(err.args.first) - args = args[(idx + 1)..-1] - args.shift while args.first && args.first[0, 1] != '-' - retry - end - end - - def parse_rdoc_document_file(file = '.document') - optparse(*support_rdoc_document_file!(file)) if use_document_file - end - - def parse_yardopts(file = options_file) - optparse(*yardopts(file)) if use_yardopts_file - end - - # Reads a .document file in the directory to get source file globs - # @return [Array<String>] an array of files parsed from .document - def support_rdoc_document_file!(file = '.document') - return [] unless use_document_file - File.read(file).gsub(/^[ \t]*#.+/m, '').split(/\s+/) - rescue Errno::ENOENT - [] - end - end - end -end +# frozen_string_literal: true +require 'optparse' + +module YARD + module CLI + # Abstract base class for command that reads .yardopts file + # + # @abstract + # @since 0.8.3 + class YardoptsCommand < Command + # The configuration filename to load extra options from + DEFAULT_YARDOPTS_FILE = ".yardopts" + + # @return [Boolean] whether to parse options from .yardopts + attr_accessor :use_yardopts_file + + # @return [Boolean] whether to parse options from .document + attr_accessor :use_document_file + + # The options file name (defaults to {DEFAULT_YARDOPTS_FILE}) + # @return [String] the filename to load extra options from + attr_accessor :options_file + + # Creates a new command that reads .yardopts + def initialize + super + @options_file = DEFAULT_YARDOPTS_FILE + @use_yardopts_file = true + @use_document_file = true + end + + # Parses commandline arguments + # @param [Array<String>] args the list of arguments + # @return [Boolean] whether or not arguments are valid + # @since 0.5.6 + def parse_arguments(*args) + parse_yardopts_options(*args) + + # Parse files and then command line arguments + parse_rdoc_document_file + parse_yardopts + optparse(*args) + end + + protected + + # Adds --[no-]yardopts / --[no-]document + def yardopts_options(opts) + opts.on('--[no-]yardopts [FILE]', + "If arguments should be read from FILE", + " (defaults to yes, FILE defaults to .yardopts)") do |use_yardopts| + if use_yardopts.is_a?(String) + self.options_file = use_yardopts + self.use_yardopts_file = true + else + self.use_yardopts_file = (use_yardopts != false) + end + end + + opts.on('--[no-]document', "If arguments should be read from .document file. ", + " (defaults to yes)") do |use_document| + self.use_document_file = use_document + end + end + + private + + # Parses the .yardopts file for default yard options + # @return [Array<String>] an array of options parsed from .yardopts + def yardopts(file = options_file) + return [] unless use_yardopts_file + File.read_binary(file).shell_split + rescue Errno::ENOENT + [] + end + + # Parses out the yardopts/document options + def parse_yardopts_options(*args) + opts = OptionParser.new + opts.base.long.clear # HACK: why are --help and --version defined? + yardopts_options(opts) + begin + opts.parse(args) + rescue OptionParser::ParseError => err + idx = args.index(err.args.first) + args = args[(idx + 1)..-1] + args.shift while args.first && args.first[0, 1] != '-' + retry + end + end + + def parse_rdoc_document_file(file = '.document') + optparse(*support_rdoc_document_file!(file)) if use_document_file + end + + def parse_yardopts(file = options_file) + optparse(*yardopts(file)) if use_yardopts_file + end + + # Reads a .document file in the directory to get source file globs + # @return [Array<String>] an array of files parsed from .document + def support_rdoc_document_file!(file = '.document') + return [] unless use_document_file + File.read(file).gsub(/^[ \t]*#.+/m, '').split(/\s+/) + rescue Errno::ENOENT + [] + end + end + end +end