Sha256: e63581008906c0d582b5e0651883e2d5ed68a5eda705ac05b7239f483d02e943

Contents?: true

Size: 1.26 KB

Versions: 3

Compression:

Stored size: 1.26 KB

Contents

# frozen_string_literal: true

module Synvert::Core
  # RemoveAction to remove current node.
  class Rewriter::RemoveAction < Rewriter::Action
    def initialize(instance)
      super(instance, nil)
    end

    # Begin position of code to replace.
    #
    # @return [Integer] begin position.
    def begin_pos
      if take_whole_line?
        start_index
      else
        @node.loc.expression.begin_pos
      end
    end

    # End position of code to replace.
    #
    # @return [Integer] end position.
    def end_pos
      if take_whole_line?
        end_index
      else
        @node.loc.expression.end_pos
      end
    end

    # The rewritten code, always empty string.
    def rewritten_code
      ''
    end

    private

    def take_whole_line?
      @node.to_source == file_source[start_index...end_index].strip
    end

    def start_index
      index = file_source[0..@node.loc.expression.begin_pos].rindex("\n")
      index ? index + "\n".length : @node.loc.expression.begin_pos
    end

    def end_index
      index = file_source[@node.loc.expression.end_pos..-1].index("\n")
      index ? @node.loc.expression.end_pos + index + "\n".length : @node.loc.expression.end_pos
    end

    def file_source
      @file_source ||= @instance.file_source
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
synvert-core-0.56.0 lib/synvert/core/rewriter/action/remove_action.rb
synvert-core-0.55.0 lib/synvert/core/rewriter/action/remove_action.rb
synvert-core-0.54.3 lib/synvert/core/rewriter/action/remove_action.rb