Sha256: 05f5440b101ccb2978e25433c72e835db2bda6b66ec95ed24710b60ec4eb5ccf

Contents?: true

Size: 1.66 KB

Versions: 15

Compression:

Stored size: 1.66 KB

Contents

require 'stringio'
require 'pre-commit/checks/plugin'

module PreCommit
  module Checks
    class Rubocop < Plugin

      WHITELIST = %w[
        \.gemspec \.jbuilder \.opal \.podspec \.rake \.rb config\.ru
        Berksfile Capfile Cheffile Gemfile Guardfile Podfile
        Rakefile Thorfile Vagabondfile Vagrantfile
      ]

      def self.aliases
        [ :rubocop_all, :rubocop_new ]
      end

      def self.excludes
        [ :ruby_symbol_hashrocket ]
      end

      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

      def filter_staged_files(staged_files)
        expression = Regexp.new(WHITELIST.map { |i| i + "\\Z" }.join("|"))
        staged_files.grep(expression)
      end

      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

      def config_file_flag
        config_file ? ['-c', config_file] : []
      end

      def user_supplied_flags
        Array(config.get('rubocop.flags')).reject(&:empty?)
      end

      def alternate_config_file
        '.rubocop.yml'
      end

      def self.description
        "Runs rubocop to detect errors."
      end
    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
pre-commit-0.40.0 lib/plugins/pre_commit/checks/rubocop.rb
pre-commit-0.39.0 lib/plugins/pre_commit/checks/rubocop.rb
pre-commit-0.38.1 lib/plugins/pre_commit/checks/rubocop.rb
pre-commit-0.38.0 lib/plugins/pre_commit/checks/rubocop.rb
pre-commit-0.37.0 lib/plugins/pre_commit/checks/rubocop.rb
pre-commit-0.36.0 lib/plugins/pre_commit/checks/rubocop.rb
pre-commit-0.35.0 lib/plugins/pre_commit/checks/rubocop.rb
pre-commit-0.34.0 lib/plugins/pre_commit/checks/rubocop.rb
pre-commit-0.33.0 lib/plugins/pre_commit/checks/rubocop.rb
pre-commit-0.32.0 lib/plugins/pre_commit/checks/rubocop.rb
pre-commit-0.31.0 lib/plugins/pre_commit/checks/rubocop.rb
pre-commit-0.30.0 lib/plugins/pre_commit/checks/rubocop.rb
pre-commit-0.29.0 lib/plugins/pre_commit/checks/rubocop.rb
pre-commit-0.28.0 lib/plugins/pre_commit/checks/rubocop.rb
pre-commit-0.27.0 lib/plugins/pre_commit/checks/rubocop.rb