class SlimLint::CLI

Command line application interface.

Constants

EX_CONFIG
EX_DATAERR
EX_NOINPUT
EX_OK

Exit codes @see man.openbsd.org/sysexits.3

EX_SOFTWARE
EX_USAGE

Attributes

log[R]

Public Class Methods

new(logger) click to toggle source

Create a CLI that outputs to the specified logger.

@param logger [SlimLint::Logger]

# File lib/slim_lint/cli.rb, line 21
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/slim_lint/cli.rb, line 30
def run(args)
  options = SlimLint::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/slim_lint/cli.rb, line 44
def act_on_options(options)
  log.color_enabled = options.fetch(:color, log.tty?)

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

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

# File lib/slim_lint/cli.rb, line 66
def handle_exception(exception)
  case exception
  when SlimLint::Exceptions::ConfigurationError
    log.error exception.message
    EX_CONFIG
  when SlimLint::Exceptions::InvalidCLIOption
    log.error exception.message
    log.log "Run `#{APP_NAME}` --help for usage documentation"
    EX_USAGE
  when SlimLint::Exceptions::InvalidFilePath
    log.error exception.message
    EX_NOINPUT
  when SlimLint::Exceptions::NoLintersError
    log.error exception.message
    EX_NOINPUT
  else
    print_unexpected_exception(exception)
    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_report(report, options) click to toggle source

Outputs a report of the linter run using the specified reporter.

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.

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/slim_lint/cli.rb, line 90
def scan_for_lints(options)
  report = Runner.new.run(options)
  print_report(report, options)
  report.failed? ? EX_DATAERR : EX_OK
end