class Model::Diagnostic

Constants

DOCS_URLS

Attributes

badge[R]
end[R]
message[R]
replacements[R]
start[R]

Public Class Methods

new(offense) click to toggle source
# File lib/rubocop/lsp/model/diagnostic.rb, line 27
def initialize(offense)
  @badge = RuboCop::Cop::Badge.parse(offense.cop_name)
  @message = offense.message
  @start = Interface::Position.new(line: offense.line - 1, character: offense.column)
  @end = Interface::Position.new(line: offense.last_line - 1, character: offense.last_column)
  @replacements = replacements_from_offense(offense)
end

Public Instance Methods

cop_name() click to toggle source
# File lib/rubocop/lsp/model/diagnostic.rb, line 39
def cop_name
  @cop_name ||= badge.to_s
end
correctable?() click to toggle source
# File lib/rubocop/lsp/model/diagnostic.rb, line 35
def correctable?
  !!@replacements
end
diagnostic_response() click to toggle source
# File lib/rubocop/lsp/model/diagnostic.rb, line 43
def diagnostic_response
  @diagnostic_response ||= Interface::Diagnostic.new(
    message: message,
    "source": "RuboCop",
    code: cop_name,
    code_description: Interface::CodeDescription.new(
      href: doc_url
    ),
    severity: Constant::DiagnosticSeverity::INFORMATION,
    range: Interface::Range.new(
      start: start,
      end: self.end
    )
  )
end

Private Instance Methods

doc_url() click to toggle source
# File lib/rubocop/lsp/model/diagnostic.rb, line 61
def doc_url
  @doc_url ||= begin
    anchor = cop_name.downcase.gsub(%r{/}, "")

    format(DOCS_URLS[badge.department], anchor: anchor)
  end
end
edit_from_replacement(range, replacement) click to toggle source
# File lib/rubocop/lsp/model/diagnostic.rb, line 77
def edit_from_replacement(range, replacement)
  Interface::TextEdit.new(
    range: Interface::Range.new(
      start: Interface::Position.new(line: range.line - 1, character: range.column),
      end: Interface::Position.new(line: range.last_line - 1, character: range.last_column)
    ),
    new_text: replacement
  )
end
replacements_from_offense(offense) click to toggle source
# File lib/rubocop/lsp/model/diagnostic.rb, line 69
def replacements_from_offense(offense)
  return unless offense.correctable?

  offense.corrector.as_replacements.map do |range, replacement|
    edit_from_replacement(range, replacement)
  end
end