class PreCommit::Checks::Rubocop

Constants

WHITELIST

Public Class Methods

aliases() click to toggle source
# File lib/plugins/pre_commit/checks/rubocop.rb, line 14
def self.aliases
  [ :rubocop_all, :rubocop_new ]
end
description() click to toggle source
# File lib/plugins/pre_commit/checks/rubocop.rb, line 63
def self.description
  "Runs rubocop to detect errors."
end
excludes() click to toggle source
# File lib/plugins/pre_commit/checks/rubocop.rb, line 18
def self.excludes
  [ :ruby_symbol_hashrocket ]
end

Public Instance Methods

alternate_config_file() click to toggle source
# File lib/plugins/pre_commit/checks/rubocop.rb, line 59
def alternate_config_file
  '.rubocop.yml'
end
call(staged_files) click to toggle source
# File lib/plugins/pre_commit/checks/rubocop.rb, line 22
def call(staged_files)
  require 'rubocop'
rescue LoadError => e
  $stderr.puts "Could not find rubocop: #{e}"
else
  staged_files = filter_staged_files(staged_files)
  return if staged_files.empty?

  args = config_file_flag + user_supplied_flags + ["--force-exclusion"] + staged_files

  success, captured = capture { ::RuboCop::CLI.new.run(args) == 0 }
  captured unless success
end
capture() { || ... } click to toggle source
# File lib/plugins/pre_commit/checks/rubocop.rb, line 41
def capture
  $stdout, stdout = StringIO.new, $stdout
  $stderr, stderr = StringIO.new, $stderr
  result = yield
  [result, $stdout.string + $stderr.string]
ensure
  $stdout = stdout
  $stderr = stderr
end
config_file_flag() click to toggle source
# File lib/plugins/pre_commit/checks/rubocop.rb, line 51
def config_file_flag
  config_file ? ['-c', config_file] : []
end
filter_staged_files(staged_files) click to toggle source
# File lib/plugins/pre_commit/checks/rubocop.rb, line 36
def filter_staged_files(staged_files)
  expression = Regexp.new(WHITELIST.map { |i| i + "\\Z" }.join("|"))
  staged_files.grep(expression)
end
user_supplied_flags() click to toggle source
# File lib/plugins/pre_commit/checks/rubocop.rb, line 55
def user_supplied_flags
  Array(config.get('rubocop.flags')).reject(&:empty?)
end