class Pronto::Rubocop::OffenseLine

Constants

DEFAULT_SEVERITIES
MOBILIZE

rubocop >= 0.87.0 has both mobilize and public investigate method

Attributes

line[R]
offense[R]
patch_cop[R]

Public Class Methods

new(patch_cop, offense, line) click to toggle source
# File lib/pronto/rubocop/offense_line.rb, line 6
def initialize(patch_cop, offense, line)
  @patch_cop = patch_cop
  @offense = offense
  @line = line
end

Public Instance Methods

message() click to toggle source
# File lib/pronto/rubocop/offense_line.rb, line 12
def message
  Message.new(path, line, level, message_text, nil, Pronto::Rubocop)
end

Private Instance Methods

autocorrect_team() click to toggle source
# File lib/pronto/rubocop/offense_line.rb, line 89
def autocorrect_team
  @autocorrect_team ||=
    ::RuboCop::Cop::Team.send(MOBILIZE,
                              ::RuboCop::Cop::Registry.new([cop_class]),
                              patch_cop.rubocop_config,
                              auto_correct: true,
                              stdin: true)
end
config_severities() click to toggle source
# File lib/pronto/rubocop/offense_line.rb, line 110
def config_severities
  patch_cop
    .runner
    .pronto_rubocop_config
    .fetch('severities', {})
    .map { |k, v| [k.to_sym, v.to_sym] }
    .to_h
end
cop_class() click to toggle source
# File lib/pronto/rubocop/offense_line.rb, line 98
def cop_class
  patch_cop.registry.find_by_cop_name(offense.cop_name)
end
corrected_lines() click to toggle source
# File lib/pronto/rubocop/offense_line.rb, line 42
def corrected_lines
  @corrected_lines ||= corrector.rewrite.lines
end
corrections_count() click to toggle source
# File lib/pronto/rubocop/offense_line.rb, line 68
def corrections_count
  report.offenses.size
end
corrector() click to toggle source
# File lib/pronto/rubocop/offense_line.rb, line 64
def corrector
  report.corrector
end
differing_lines_count() click to toggle source
# File lib/pronto/rubocop/offense_line.rb, line 46
def differing_lines_count
  original_lines.each_with_index.count do |line, index|
    line != corrected_lines[index]
  end
end
level() click to toggle source
# File lib/pronto/rubocop/offense_line.rb, line 102
def level
  severities.fetch(offense.severity.name)
end
message_text() click to toggle source
# File lib/pronto/rubocop/offense_line.rb, line 28
def message_text
  return offense.message unless suggestion_text

  "#{offense.message}\n\n```suggestion\n#{suggestion_text}```"
end
original_lines() click to toggle source
# File lib/pronto/rubocop/offense_line.rb, line 52
def original_lines
  processed_source.lines.join("\n").lines
end
path() click to toggle source
# File lib/pronto/rubocop/offense_line.rb, line 20
def path
  line.patch.delta.new_file[:path]
end
processed_source() click to toggle source
# File lib/pronto/rubocop/offense_line.rb, line 24
def processed_source
  patch_cop.processed_source
end
report() click to toggle source
# File lib/pronto/rubocop/offense_line.rb, line 60
def report
  @report ||= autocorrect_team.investigate(processed_source).cop_reports.first
end
severities() click to toggle source
# File lib/pronto/rubocop/offense_line.rb, line 106
def severities
  @severities ||= DEFAULT_SEVERITIES.merge(config_severities)
end
suggestion_text() click to toggle source
# File lib/pronto/rubocop/offense_line.rb, line 34
def suggestion_text
  return unless patch_cop.runner.pronto_rubocop_config['suggestions']
  return if corrections_count.zero?
  return if differing_lines_count != corrections_count

  @suggestion_text ||= corrected_lines[offense.line - 1]
end