class Solargraph::Source::Change


A change to be applied to text.

def commit text, insert

def commit text, insert
  start_offset = Position.to_offset(text, range.start)
  end_offset = Position.to_offset(text, range.ending)
  (start_offset == 0 ? '' : text[0..start_offset-1].to_s) + normalize(insert) + text[end_offset..-1].to_s
end

def initialize range, new_text

Parameters:
  • new_text (String) -- The text to be changed.
  • range (Range) -- The starting and ending positions of the change.
def initialize range, new_text
  @range = range
  @new_text = new_text
end

def repair text

Returns:
  • (String) - The updated text.

Parameters:
  • text (String) -- The text to be changed.
def repair text
  fixed = new_text.gsub(/[^\s]/, ' ')
  if range.nil?
    fixed
  else
    commit text, fixed
  end
end

def write text, nullable = false

Returns:
  • (String) - The updated text.

Parameters:
  • nullable (Boolean) -- If true, minor changes that could generate
  • text (String) -- The text to be changed.
def write text, nullable = false
  if nullable and !range.nil? and new_text.match(/[\.\[\{\(@\$:]$/)
    [':', '@'].each do |dupable|
      next unless new_text == dupable
      offset = Position.to_offset(text, range.start)
      if text[offset - 1] == dupable
        p = Position.from_offset(text, offset - 1)
        r = Change.new(Range.new(p, range.start), ' ')
        text = r.write(text)
      end
      break
    end
    commit text, "#{new_text[0..-2]} "
  elsif nullable and !range.nil? and new_text.empty?
    offset = Position.to_offset(text, range.start)
    if offset > 0 and text[offset - 1] == '.'
      text = text[0..offset - 1] + ' ' + text[offset..-1]
    end
    commit text, new_text
  elsif range.nil?
    new_text
  else
    commit text, new_text
  end
end