lib/node_mutation/adapter/parser.rb in node_mutation-1.19.3 vs lib/node_mutation/adapter/parser.rb in node_mutation-1.19.4

- old
+ new

@@ -13,57 +13,57 @@ else node.loc.expression.source end end - # It gets the new source code after evaluating the node. + # Gets the new source code after evaluating the node. # @param node [Parser::AST::Node] The node to evaluate. # @param code [String] The code to evaluate. # @return [String] The new source code. # @example # node = Parser::CurrentRuby.parse('Factory.define :user do; end') - # rewritten_source(node, '{{call.receiver}}').to eq 'Factory' + # rewritten_source(node, '{{call.receiver}}') # 'Factory' # # # index for node array # node = Parser::CurrentRuby.parse("test(foo, bar)") - # rewritten_source(node, '{{arguments.0}}')).to eq 'foo' + # rewritten_source(node, '{{arguments.0}}')) # 'foo' # # # {key}_pair for hash node # node = Parser::CurrentRuby.parse("after_commit :do_index, on: :create, if: :indexable?") - # rewritten_source(node, '{{arguments.-1.on_pair}}')).to eq 'on: :create' + # rewritten_source(node, '{{arguments.-1.on_pair}}')) # 'on: :create' # # # {key}_value for hash node # node = Parser::CurrentRuby.parse("after_commit :do_index, on: :create, if: :indexable?") - # rewritten_source(node, '{{arguments.-1.on_value}}')).to eq ':create' + # rewritten_source(node, '{{arguments.-1.on_value}}')) # ':create' # # # to_single_quote for str node # node = Parser::CurrentRuby.parse('"foo"') - # rewritten_source(node, 'to_single_quote') => "'foo'" + # rewritten_source(node, 'to_single_quote') # "'foo'" # # # to_double_quote for str node # node = Parser::CurrentRuby.parse("'foo'") - # rewritten_source(node, 'to_double_quote') => '"foo"' + # rewritten_source(node, 'to_double_quote') # '"foo"' # # # to_symbol for str node # node = Parser::CurrentRuby.parse("'foo'") - # rewritten_source(node, 'to_symbol') => ':foo' + # rewritten_source(node, 'to_symbol') # ':foo' # # # to_string for sym node # node = Parser::CurrentRuby.parse(":foo") - # rewritten_source(node, 'to_string') => 'foo' + # rewritten_source(node, 'to_string') # 'foo' # # # to_lambda_literal for block node # node = Parser::CurrentRuby.parse('lambda { foobar }') - # rewritten_source(node, 'to_lambda_literal') => '-> { foobar }' + # rewritten_source(node, 'to_lambda_literal') # '-> { foobar }' # # # strip_curly_braces for hash node # node = Parser::CurrentRuby.parse("{ foo: 'bar' }") - # rewritten_source(node, 'strip_curly_braces') => "foo: 'bar'" + # rewritten_source(node, 'strip_curly_braces') # "foo: 'bar'" # # # wrap_curly_braces for hash node # node = Parser::CurrentRuby.parse("test(foo: 'bar')") - # rewritten_source(node.arguments.first, 'wrap_curly_braces') => "{ foo: 'bar' }" + # rewritten_source(node.arguments.first, 'wrap_curly_braces') # "{ foo: 'bar' }" def rewritten_source(node, code) code.gsub(/{{(.+?)}}/m) do old_code = Regexp.last_match(1) evaluated = child_node_by_name(node, old_code) case evaluated @@ -80,11 +80,11 @@ lines = source.split "\n" lines_count = lines.length if lines_count > 1 && lines_count == evaluated.size new_code = [] lines.each_with_index { |line, index| - new_code << (index == 0 ? line : line[evaluated.first.indent - 2..-1]) + new_code << (index == 0 ? line : line[NodeMutation.adapter.get_indent(evaluated.first) - NodeMutation.tab_width..-1]) } new_code.join("\n") else source end @@ -107,43 +107,43 @@ # @param node [Parser::AST::Node] The node. # @param child_name [String] THe name to find child node. # @return {NodeMutation::Struct::Range} The range of the child node. # @example # node = Parser::CurrentRuby.parse('Factory.define :user do; end') - # child_node_range(node, 'caller.receiver') => { start: 0, end: 'Factory'.length } + # child_node_range(node, 'caller.receiver') # { start: 0, end: 'Factory'.length } # # # node array # node = Parser::CurrentRuby.parse('foobar arg1, arg2)') - # child_node_range(node, 'arguments') => { start: 'foobar '.length, end: 'foobar arg1, arg2'.length } + # child_node_range(node, 'arguments') # { start: 'foobar '.length, end: 'foobar arg1, arg2'.length } # # # index for node array # node = Parser::CurrentRuby.parse('foobar(arg1, arg2)') - # child_node_range(node, 'arguments.-1') => { start: 'foobar(arg1, '.length, end: 'foobar(arg1, arg2'.length } + # child_node_range(node, 'arguments.-1') # { start: 'foobar(arg1, '.length, end: 'foobar(arg1, arg2'.length } # # # pips for block node # node = Parser::CurrentRuby.parse('Factory.define :user do |user|; end') - # child_node_range(node, 'pipes') => { start: 'Factory.deine :user do '.length, end: 'Factory.define :user do |user|'.length } + # child_node_range(node, 'pipes') # { start: 'Factory.deine :user do '.length, end: 'Factory.define :user do |user|'.length } # # # parentheses for def and defs node # node = Parser::CurrentRuby.parse('def foo(bar); end') - # child_node_range(node, 'parentheses') => { start: 'def foo'.length, end: 'def foo(bar)'.length } + # child_node_range(node, 'parentheses') # { start: 'def foo'.length, end: 'def foo(bar)'.length } # # # double_colon for const node # node = Parser::CurrentRuby.parse('Foo::Bar') - # child_node_range(node, 'double_colon') => { start: 'Foo'.length, end: 'Foo::'.length } + # child_node_range(node, 'double_colon') # { start: 'Foo'.length, end: 'Foo::'.length } # # # self and dot for defs node # node = Parser::CurrentRuby.parse('def self.foo(bar); end') - # child_node_range(node, 'self') => { start: 'def '.length, end: 'def self'.length } - # child_node_range(node, 'dot') => { start: 'def self'.length, end: 'def self.'.length } + # child_node_range(node, 'self') # { start: 'def '.length, end: 'def self'.length } + # child_node_range(node, 'dot') # { start: 'def self'.length, end: 'def self.'.length } # # # dot for send and csend node # node = Parser::CurrentRuby.parse('foo.bar(test)') - # child_node_range(node, 'self') => { start: 'foo'.length, end: 'foo.'.length } + # child_node_range(node, 'self') # { start: 'foo'.length, end: 'foo.'.length } # # # parentheses for send and csend node # node = Parser::CurrentRuby.parse('foo.bar(test)') - # child_node_range(node, 'parentheses') => { start: 'foo.bar'.length, end: 'foo.bar(test)'.length } + # child_node_range(node, 'parentheses') # { start: 'foo.bar'.length, end: 'foo.bar(test)'.length } def child_node_range(node, child_name) direct_child_name, nested_child_name = child_name.to_s.split('.', 2) if node.is_a?(Array) if direct_child_name =~ INDEX_REGEXP