Sha256: 4140762a0f2f47f73552e67a7c5c9d52331b467adbea537729a51804780e79dc

Contents?: true

Size: 1.13 KB

Versions: 1

Compression:

Stored size: 1.13 KB

Contents

require 'reek'

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)
      files_to_lint.flat_map do |file|
        examiner = ::Reek::Examiner.new(file)
        examiner.smells
      end
    end

    def fetch_files_to_lint
      files = git.modified_files + git.added_files
      Array(files.map { |file| Pathname(file) })
    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

1 entries across 1 versions & 1 rubygems

Version Path
danger-reek-0.1.0 lib/reek/plugin.rb