lib/rubycritic/cli/options.rb
# frozen_string_literal: true require 'optparse' require 'rubycritic/browser' module RubyCritic module Cli class Options def initialize(argv) @argv = argv self.parser = OptionParser.new end # rubocop:disable Metrics/MethodLength def parse parser.new do |opts| opts.banner = 'Usage: rubycritic [options] [paths]' opts.on('-p', '--path [PATH]', 'Set path where report will be saved (tmp/rubycritic by default)') do |path| @root = path end opts.on( '-f', '--format [FORMAT]', [:html, :json, :console], 'Report smells in the given format:', ' html (default)', ' json', ' console' ) do |format| self.format = format end opts.on('-s', '--minimum-score [MIN_SCORE]', 'Set a minimum score') do |min_score| self.minimum_score = Integer(min_score) end opts.on('-m', '--mode-ci', 'Use CI mode (faster, but only analyses last commit)') do self.mode = :ci end opts.on('--deduplicate-symlinks', 'De-duplicate symlinks based on their final target') do self.deduplicate_symlinks = true end opts.on('--suppress-ratings', 'Suppress letter ratings') do self.suppress_ratings = true end opts.on('--no-browser', 'Do not open html report with browser') do self.no_browser = true end opts.on_tail('-v', '--version', "Show gem's version") do self.mode = :version end opts.on_tail('-h', '--help', 'Show this message') do self.mode = :help end end.parse!(@argv) self end def to_h { mode: mode, root: root, format: format, deduplicate_symlinks: deduplicate_symlinks, paths: paths, suppress_ratings: suppress_ratings, help_text: parser.help, minimum_score: minimum_score || 0, no_browser: no_browser } end private attr_accessor :mode, :root, :format, :deduplicate_symlinks, :suppress_ratings, :minimum_score, :no_browser, :parser def paths if @argv.empty? ['.'] else @argv end end end end end