class RubyLsp::Requests::Formatting

The formatting request uses RuboCop to fix auto-correctable offenses in the document. This requires enabling format on save and registering the ruby-lsp as the Ruby formatter.

The rubyLsp.formatter setting specifies which formatter to use. If set to auto then it behaves as follows: * It will use RuboCop if it is part of the bundle. * If RuboCop is not available, and syntax_tree is a direct dependency, it will use that. * Otherwise, no formatting will be applied.

Example

def say_hello
puts "Hello" # --> formatting: fixes the indentation on save
end

Public Class Methods

new(document, formatter: "auto") click to toggle source
Calls superclass method RubyLsp::Requests::BaseRequest::new
# File lib/ruby_lsp/requests/formatting.rb, line 35
def initialize(document, formatter: "auto")
  super(document)

  @uri = T.let(document.uri, String)
  @formatter = formatter
end

Public Instance Methods

run() click to toggle source
# File lib/ruby_lsp/requests/formatting.rb, line 43
def run
  # Don't try to format files outside the current working directory
  return unless @uri.sub("file://", "").start_with?(Dir.pwd)

  return if @document.syntax_error?

  formatted_text = formatted_file
  return unless formatted_text

  size = @document.source.size
  return if formatted_text.size == size && formatted_text == @document.source

  [
    Interface::TextEdit.new(
      range: Interface::Range.new(
        start: Interface::Position.new(line: 0, character: 0),
        end: Interface::Position.new(line: size, character: size),
      ),
      new_text: formatted_text,
    ),
  ]
end