Sha256: e6a80addf5e42619385110d71facfec495e035c03943c8eb849c95805877e1b0

Contents?: true

Size: 1 KB

Versions: 8

Compression:

Stored size: 1 KB

Contents

# frozen_string_literal: true

module Synvert::Core
  # PrependAction to prepend code to the top of node body.
  class Rewriter::PrependAction < Rewriter::Action
    DO_LENGTH = ' do'.length

    def calculate_position
      @begin_pos =
        case @node.type
        when :block
          if @node.children[1].children.empty?
            @node.children[0].loc.expression.end_pos + DO_LENGTH
          else
            @node.children[1].loc.expression.end_pos
          end
        when :class
          @node.children[1] ? @node.children[1].loc.expression.end_pos : @node.children[0].loc.expression.end_pos
        else
          @node.children.last.loc.expression.end_pos
        end
      @end_pos = @begin_pos
    end

    private

    # Indent of the node.
    #
    # @param node [Parser::AST::Node]
    # @return [String] n times whitesphace
    def indent(node)
      if %i[block class].include? node.type
        ' ' * (node.column + DEFAULT_INDENT)
      else
        ' ' * node.column
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
synvert-core-0.61.0 lib/synvert/core/rewriter/action/prepend_action.rb
synvert-core-0.60.0 lib/synvert/core/rewriter/action/prepend_action.rb
synvert-core-0.59.0 lib/synvert/core/rewriter/action/prepend_action.rb
synvert-core-0.58.3 lib/synvert/core/rewriter/action/prepend_action.rb
synvert-core-0.58.2 lib/synvert/core/rewriter/action/prepend_action.rb
synvert-core-0.58.0 lib/synvert/core/rewriter/action/prepend_action.rb
synvert-core-0.57.1 lib/synvert/core/rewriter/action/prepend_action.rb
synvert-core-0.57.0 lib/synvert/core/rewriter/action/prepend_action.rb