Sha256: f7226dfd465f13d7ba022c115776f37b18923e52ec45e4491936f92e19027f5b

Contents?: true

Size: 1.3 KB

Versions: 2

Compression:

Stored size: 1.3 KB

Contents

require 'reek'
require 'reek/cli/options'
require 'reek/source/source_locator'

module Danger
  # Lints Ruby files via [Reek](https://rubygems.org/gems/reek).
  # Results are sent as inline comments.
  #
  # @example Running Reek
  #
  #          # Runs Reek on modified and added files in the PR
  #          reek.lint
  #
  # @see  blooper05/danger-reek
  # @tags ruby, reek, lint
  class DangerReek < Plugin
    # Runs Ruby files through Reek.
    # @return [Array<Reek::SmellWarning, nil>]
    def lint
      files_to_lint = fetch_files_to_lint
      code_smells   = run_linter(files_to_lint)
      warn_each_line(code_smells)
    end

    private

    def run_linter(files_to_lint)
      configuration = ::Reek::Configuration::AppConfiguration.from_path(nil)
      files_to_lint.flat_map do |file|
        examiner = ::Reek::Examiner.new(file, configuration: configuration)
        examiner.smells
      end
    end

    def fetch_files_to_lint
      files = git.modified_files + git.added_files
      ::Reek::Source::SourceLocator.new(files).sources
    end

    def warn_each_line(code_smells)
      code_smells.each do |smell|
        message = smell.message.capitalize
        source  = smell.source
        smell.lines.each do |line|
          warn(message, file: source, line: line)
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
danger-reek-0.2.1 lib/reek/plugin.rb
danger-reek-0.2.0 lib/reek/plugin.rb