class HamlLint::CLI

Command line application interface.

Attributes

log[R]

Public Class Methods

new(logger) click to toggle source

Create a CLI that outputs to the specified logger.

@param logger [HamlLint::Logger]

# File lib/haml_lint/cli.rb, line 13
def initialize(logger)
  @log = logger
end

Public Instance Methods

run(args) click to toggle source

Parses the given command-line arguments and executes appropriate logic based on those arguments.

@param args [Array<String>] command line arguments @return [Integer] exit status code

# File lib/haml_lint/cli.rb, line 22
def run(args)
  options = HamlLint::Options.new.parse(args)
  act_on_options(options)
rescue StandardError => e
  handle_exception(e)
end

Private Instance Methods

act_on_options(options) click to toggle source

Given the provided options, execute the appropriate command.

@return [Integer] exit status code

# File lib/haml_lint/cli.rb, line 36
def act_on_options(options)
  configure_logger(options)

  if options[:help]
    print_help(options)
    Sysexits::EX_OK
  elsif options[:version] || options[:verbose_version]
    print_version(options)
    Sysexits::EX_OK
  elsif options[:show_linters]
    print_available_linters
    Sysexits::EX_OK
  elsif options[:show_reporters]
    print_available_reporters
    Sysexits::EX_OK
  else
    scan_for_lints(options)
  end
end
configure_logger(options) click to toggle source

Given the provided options, configure the logger.

@return [void]

# File lib/haml_lint/cli.rb, line 59
def configure_logger(options)
  log.color_enabled = options.fetch(:color, log.tty?)
  log.summary_enabled = options.fetch(:summary, true)
end
handle_exception(exception) click to toggle source

Outputs a message and returns an appropriate error code for the specified exception.

# File lib/haml_lint/cli.rb, line 66
def handle_exception(exception)
  case exception
  when HamlLint::Exceptions::ConfigurationError
    log.error exception.message
    Sysexits::EX_CONFIG
  when HamlLint::Exceptions::InvalidCLIOption
    log.error exception.message
    log.log "Run `#{APP_NAME}` --help for usage documentation"
    Sysexits::EX_USAGE
  when HamlLint::Exceptions::InvalidFilePath
    log.error exception.message
    Sysexits::EX_NOINPUT
  when HamlLint::Exceptions::NoLintersError
    log.error exception.message
    Sysexits::EX_NOINPUT
  else
    print_unexpected_exception(exception)
    Sysexits::EX_SOFTWARE
  end
end
print_available_linters() click to toggle source

Outputs a list of all currently available linters.

print_available_reporters() click to toggle source

Outputs a list of currently available reporters.

print_help(options) click to toggle source

Outputs help documentation.

print_unexpected_exception(exception) click to toggle source

Outputs the backtrace of an exception with instructions on how to report the issue.

print_version(options) click to toggle source

Outputs the application name and version.

reporter_from_options(options) click to toggle source

Instantiates a new reporter based on the options.

@param options [HamlLint::Configuration] @option options [true, nil] :auto_gen_config whether to use the config

generating reporter

@option options [Class] :reporter the class of reporter to use @return [HamlLint::Reporter]

# File lib/haml_lint/cli.rb, line 94
def reporter_from_options(options)
  if options[:auto_gen_config]
    HamlLint::Reporter::DisabledConfigReporter.new(log, limit: options[:auto_gen_exclude_limit] || 15) # rubocop:disable Layout/LineLength
  else
    options.fetch(:reporter, HamlLint::Reporter::DefaultReporter).new(log)
  end
end
scan_for_lints(options) click to toggle source

Scans the files specified by the given options for lints.

@return [Integer] exit status code

# File lib/haml_lint/cli.rb, line 105
def scan_for_lints(options)
  reporter = reporter_from_options(options)
  report = Runner.new.run(options.merge(reporter: reporter))
  report.display
  report.failed? ? Sysexits::EX_DATAERR : Sysexits::EX_OK
end