class RuboCop::Git::StyleGuide

ref. github.com/thoughtbot/hound/blob/d2f3933/app/models/style_guide.rb

Public Class Methods

new(rubocop_options, config_file, override_config_content = nil) click to toggle source
# File lib/rubocop/git/style_guide.rb, line 4
def initialize(rubocop_options, config_file, override_config_content = nil)
  @rubocop_options = rubocop_options
  @config_file = config_file
  @override_config_content = override_config_content
end

Public Instance Methods

violations(file) click to toggle source
# File lib/rubocop/git/style_guide.rb, line 10
def violations(file)
  if ignored_file?(file)
    []
  else
    parsed_source = parse_source(file)
    team = RuboCop::Cop::Team.new(all_cops, config, rubocop_options)
    team.inspect_file(parsed_source)
  end
end

Private Instance Methods

all_cops() click to toggle source
# File lib/rubocop/git/style_guide.rb, line 23
def all_cops; RuboCop::Cop::Registry.new RuboCop::Cop::Cop.all; end
config() click to toggle source
# File lib/rubocop/git/style_guide.rb, line 49
def config
  if @config.nil?
    config = RuboCop::ConfigLoader.configuration_from_file(@config_file)
    combined_config = RuboCop::ConfigLoader.merge(config, override_config)
    @config = RuboCop::Config.new(combined_config, "")
  end

  @config
end
excluded_file?(file) click to toggle source
# File lib/rubocop/git/style_guide.rb, line 32
def excluded_file?(file)
  config.file_to_exclude?(file.absolute_path)
end
ignored_file?(file) click to toggle source
# File lib/rubocop/git/style_guide.rb, line 28
def ignored_file?(file)
  !file.ruby? || file.removed? || excluded_file?(file)
end
override_config() click to toggle source
# File lib/rubocop/git/style_guide.rb, line 67
def override_config
  if @override_config_content
    config_content = YAML.load(@override_config_content)
    override_config = RuboCop::Config.new(config_content, "")
    override_config.add_missing_namespaces
    override_config.make_excludes_absolute
    override_config
  else
    {}
  end
end
parse_source(file) click to toggle source
# File lib/rubocop/git/style_guide.rb, line 36
def parse_source(file)
  rubocop_version = Gem::Version.new(RuboCop::Version::STRING)
  if rubocop_version < Gem::Version.new('0.36.0')
    RuboCop::ProcessedSource.new(file.content, file.absolute_path)
  elsif rubocop_version < Gem::Version.new('0.41.0')
    RuboCop::ProcessedSource.new(file.content,
                                 target_ruby_version, file.absolute_path)
  else
    RuboCop::ProcessedSource.new(file.content,
                                 config.target_ruby_version, file.absolute_path)
  end
end
rubocop_options() click to toggle source
# File lib/rubocop/git/style_guide.rb, line 59
def rubocop_options
  if config["ShowCopNames"]
    { debug: true }
  else
    {}
  end.merge(@rubocop_options)
end
target_ruby_version() click to toggle source

TODO: DELETE ME when we drop support for 0.x releases of rubocop

This method exists in RuboCop::Config now (or config in this class) so we should make use of that.

# File lib/rubocop/git/style_guide.rb, line 83
def target_ruby_version
  @target ||= begin
    target = config['AllCops'] && config['AllCops']['TargetRubyVersion']

    if !target || !RuboCop::Config::KNOWN_RUBIES.include?(target)
      fail ValidationError, "Unknown Ruby version #{target.inspect} found " \
        'in `TargetRubyVersion` parameter (in ' \
        "#{loaded_path}).\nKnown versions: " \
        "#{RuboCop::Config::KNOWN_RUBIES.join(', ')}"
    end

    target
  end
end