synvert-core 0.16.0 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +6 -1
  3. data/CHANGELOG.md +16 -0
  4. data/lib/synvert/core.rb +1 -4
  5. data/lib/synvert/core/configuration.rb +9 -17
  6. data/lib/synvert/core/engine/erb.rb +29 -22
  7. data/lib/synvert/core/exceptions.rb +3 -3
  8. data/lib/synvert/core/node_ext.rb +102 -101
  9. data/lib/synvert/core/rewriter.rb +33 -19
  10. data/lib/synvert/core/rewriter/action.rb +3 -5
  11. data/lib/synvert/core/rewriter/action/append_action.rb +1 -1
  12. data/lib/synvert/core/rewriter/action/insert_action.rb +7 -3
  13. data/lib/synvert/core/rewriter/action/insert_after_action.rb +1 -1
  14. data/lib/synvert/core/rewriter/action/remove_action.rb +1 -1
  15. data/lib/synvert/core/rewriter/action/replace_erb_stmt_with_expr_action.rb +4 -3
  16. data/lib/synvert/core/rewriter/action/replace_with_action.rb +6 -4
  17. data/lib/synvert/core/rewriter/condition/if_exist_condition.rb +1 -1
  18. data/lib/synvert/core/rewriter/condition/if_only_exist_condition.rb +1 -2
  19. data/lib/synvert/core/rewriter/condition/unless_exist_condition.rb +1 -1
  20. data/lib/synvert/core/rewriter/gem_spec.rb +10 -10
  21. data/lib/synvert/core/rewriter/helper.rb +3 -5
  22. data/lib/synvert/core/rewriter/instance.rb +22 -19
  23. data/lib/synvert/core/rewriter/scope/within_scope.rb +18 -11
  24. data/lib/synvert/core/version.rb +1 -1
  25. data/spec/spec_helper.rb +1 -6
  26. data/spec/synvert/core/engine/erb_spec.rb +30 -30
  27. data/spec/synvert/core/node_ext_spec.rb +53 -52
  28. data/spec/synvert/core/rewriter/action/insert_action_spec.rb +8 -8
  29. data/spec/synvert/core/rewriter/action/insert_after_action_spec.rb +3 -3
  30. data/spec/synvert/core/rewriter/action/remove_action_spec.rb +1 -1
  31. data/spec/synvert/core/rewriter/action/replace_with_action_spec.rb +15 -11
  32. data/spec/synvert/core/rewriter/condition/if_exist_condition_spec.rb +17 -9
  33. data/spec/synvert/core/rewriter/condition/if_only_exist_condition_spec.rb +21 -12
  34. data/spec/synvert/core/rewriter/condition/unless_exist_condition_spec.rb +17 -9
  35. data/spec/synvert/core/rewriter/gem_spec_spec.rb +11 -10
  36. data/spec/synvert/core/rewriter/helper_spec.rb +34 -31
  37. data/spec/synvert/core/rewriter/instance_spec.rb +104 -70
  38. data/spec/synvert/core/rewriter/scope/goto_scope_spec.rb +8 -6
  39. data/spec/synvert/core/rewriter/scope/within_scope.rb +16 -9
  40. data/spec/synvert/core/rewriter_spec.rb +105 -68
  41. metadata +2 -4
  42. data/spec/synvert/core/configuration_spec.rb +0 -12
@@ -42,7 +42,14 @@ module Synvert::Core
42
42
  autoload :RubyVersion, 'synvert/core/rewriter/ruby_version'
43
43
  autoload :GemSpec, 'synvert/core/rewriter/gem_spec'
44
44
 
45
- class <<self
45
+ class << self
46
+ # Execute the temporary rewriter without group and name.
47
+ #
48
+ # @param block [Block] a block defines the behaviors of the rewriter.
49
+ def execute(&block)
50
+ Rewriter.new('', '', &block).process
51
+ end
52
+
46
53
  # Register a rewriter with its group and name.
47
54
  #
48
55
  # @param group [String] the rewriter group.
@@ -65,7 +72,7 @@ module Synvert::Core
65
72
  if exist? group, name
66
73
  rewriters[group][name]
67
74
  else
68
- raise RewriterNotFound.new "Rewriter #{group} #{name} not found"
75
+ raise RewriterNotFound, "Rewriter #{group} #{name} not found"
69
76
  end
70
77
  end
71
78
 
@@ -73,16 +80,21 @@ module Synvert::Core
73
80
  #
74
81
  # @param group [String] the rewriter group.
75
82
  # @param name [String] the rewriter name.
83
+ # @param sandbox [Boolean] if run in sandbox mode, default is false.
76
84
  # @return [Synvert::Core::Rewriter] the registered rewriter.
77
85
  # @raise [Synvert::Core::RewriterNotFound] if the registered rewriter is not found.
78
- def call(group, name)
86
+ def call(group, name, sandbox = false)
79
87
  group, name = group.to_s, name.to_s
80
88
  if exist? group, name
81
89
  rewriter = rewriters[group][name]
82
- rewriter.process
90
+ if sandbox
91
+ rewriter.process_with_sandbox
92
+ else
93
+ rewriter.process
94
+ end
83
95
  rewriter
84
96
  else
85
- raise RewriterNotFound.new "Rewriter #{group}/#{name} not found"
97
+ raise RewriterNotFound, "Rewriter #{group}/#{name} not found"
86
98
  end
87
99
  end
88
100
 
@@ -112,7 +124,7 @@ module Synvert::Core
112
124
  rewriters.clear
113
125
  end
114
126
 
115
- private
127
+ private
116
128
 
117
129
  def rewriters
118
130
  @rewriters ||= {}
@@ -151,15 +163,18 @@ module Synvert::Core
151
163
  # Process the rewriter.
152
164
  # It will call the block.
153
165
  def process
154
- self.instance_eval &@block
166
+ instance_eval &@block
155
167
  end
156
168
 
157
169
  # Process rewriter with sandbox mode.
158
170
  # It will call the block but doesn't change any file.
159
171
  def process_with_sandbox
160
172
  @sandbox = true
161
- self.process
162
- @sandbox = false
173
+ begin
174
+ process
175
+ ensure
176
+ @sandbox = false
177
+ end
163
178
  end
164
179
 
165
180
  # Add a warning.
@@ -178,7 +193,7 @@ module Synvert::Core
178
193
  #
179
194
  # @param description [String] rewriter description.
180
195
  # @return rewriter description.
181
- def description(description=nil)
196
+ def description(description = nil)
182
197
  if description
183
198
  @description = description
184
199
  else
@@ -208,17 +223,16 @@ module Synvert::Core
208
223
  # @param file_pattern [String] pattern to find files, e.g. spec/**/*_spec.rb
209
224
  # @param options [Hash] instance options.
210
225
  # @param block [Block] the block to rewrite code in the matching files.
211
- def within_files(file_pattern, options={}, &block)
226
+ def within_files(file_pattern, options = {}, &block)
212
227
  return if @sandbox
213
228
 
214
- if (!@ruby_version || @ruby_version.match?) &&
215
- (!@gem_spec || @gem_spec.match?)
229
+ if (!@ruby_version || @ruby_version.match?) && (!@gem_spec || @gem_spec.match?)
216
230
  Rewriter::Instance.new(self, file_pattern, options, &block).process
217
231
  end
218
232
  end
219
233
 
220
234
  # Parse within_file dsl, it finds a specifiled file.
221
- alias_method :within_file, :within_files
235
+ alias within_file within_files
222
236
 
223
237
  # Parses add_file dsl, it adds a new file.
224
238
  #
@@ -227,7 +241,7 @@ module Synvert::Core
227
241
  def add_file(filename, content)
228
242
  return if @sandbox
229
243
 
230
- filepath = File.join(Configuration.instance.get(:path), filename)
244
+ filepath = File.join(Configuration.path, filename)
231
245
  if File.exist?(filepath)
232
246
  puts "File #{filepath} already exists."
233
247
  return
@@ -245,7 +259,7 @@ module Synvert::Core
245
259
  def remove_file(filename)
246
260
  return if @sandbox
247
261
 
248
- file_path = File.join(Configuration.instance.get(:path), filename)
262
+ file_path = File.join(Configuration.path, filename)
249
263
  File.delete(file_path) if File.exist?(file_path)
250
264
  end
251
265
 
@@ -254,7 +268,7 @@ module Synvert::Core
254
268
  # @param group [String] group of another rewriter.
255
269
  # @param name [String] name of another rewriter.
256
270
  def add_snippet(group, name)
257
- @sub_snippets << self.class.call(group.to_s, name.to_s)
271
+ @sub_snippets << self.class.call(group.to_s, name.to_s, @sandbox)
258
272
  end
259
273
 
260
274
  # Parse helper_method dsl, it defines helper method for [Synvert::Core::Rewriter::Instance].
@@ -262,7 +276,7 @@ module Synvert::Core
262
276
  # @param name [String] helper method name.
263
277
  # @param block [Block] helper method block.
264
278
  def helper_method(name, &block)
265
- @helpers << {name: name, block: block}
279
+ @helpers << { name: name, block: block }
266
280
  end
267
281
 
268
282
  # Parse todo dsl, it sets todo of the rewriter.
@@ -270,7 +284,7 @@ module Synvert::Core
270
284
  #
271
285
  # @param todo_list [String] rewriter todo.
272
286
  # @return [String] rewriter todo.
273
- def todo(todo=nil)
287
+ def todo(todo = nil)
274
288
  if todo
275
289
  @todo = todo
276
290
  else
@@ -3,7 +3,7 @@
3
3
  module Synvert::Core
4
4
  # Action defines rewriter action, add, replace or remove code.
5
5
  class Rewriter::Action
6
- DEFAULT_OPTIONS = { autoindent: true }
6
+ DEFAULT_OPTIONS = { autoindent: true }.freeze
7
7
  DEFAULT_INDENT = 2
8
8
 
9
9
  # Initialize an action.
@@ -11,7 +11,7 @@ module Synvert::Core
11
11
  # @param instance [Synvert::Core::Rewriter::Instance]
12
12
  # @param code [String] new code to add, replace or remove.
13
13
  # @param options [Hash] action options, it includes :autoindent.
14
- def initialize(instance, code, options={})
14
+ def initialize(instance, code, options = {})
15
15
  @instance = instance
16
16
  @code = code
17
17
  @options = DEFAULT_OPTIONS.merge(options)
@@ -30,9 +30,7 @@ module Synvert::Core
30
30
  # @return [String] rewritten code.
31
31
  def rewritten_code
32
32
  if rewritten_source.split("\n").length > 1
33
- "\n\n" + rewritten_source.split("\n").map { |line|
34
- indent(@node) + line
35
- }.join("\n")
33
+ "\n\n" + rewritten_source.split("\n").map { |line| indent(@node) + line }.join("\n")
36
34
  else
37
35
  "\n" + indent(@node) + rewritten_source
38
36
  end
@@ -23,7 +23,7 @@ module Synvert::Core
23
23
  begin_pos
24
24
  end
25
25
 
26
- private
26
+ private
27
27
 
28
28
  # Indent of the node.
29
29
  #
@@ -3,7 +3,7 @@
3
3
  module Synvert::Core
4
4
  # InsertAction to insert code to the top of node body.
5
5
  class Rewriter::InsertAction < Rewriter::Action
6
- DO_LENGTH = " do".length
6
+ DO_LENGTH = ' do'.length
7
7
 
8
8
  # Begin position to insert code.
9
9
  #
@@ -11,7 +11,11 @@ module Synvert::Core
11
11
  def begin_pos
12
12
  case @node.type
13
13
  when :block
14
- @node.children[1].children.empty? ? @node.children[0].loc.expression.end_pos + DO_LENGTH : @node.children[1].loc.expression.end_pos
14
+ if @node.children[1].children.empty?
15
+ @node.children[0].loc.expression.end_pos + DO_LENGTH
16
+ else
17
+ @node.children[1].loc.expression.end_pos
18
+ end
15
19
  when :class
16
20
  @node.children[1] ? @node.children[1].loc.expression.end_pos : @node.children[0].loc.expression.end_pos
17
21
  else
@@ -26,7 +30,7 @@ module Synvert::Core
26
30
  begin_pos
27
31
  end
28
32
 
29
- private
33
+ private
30
34
 
31
35
  # Indent of the node.
32
36
  #
@@ -17,7 +17,7 @@ module Synvert::Core
17
17
  begin_pos
18
18
  end
19
19
 
20
- private
20
+ private
21
21
 
22
22
  # Indent of the node.
23
23
  #
@@ -3,7 +3,7 @@
3
3
  module Synvert::Core
4
4
  # RemoveAction to remove code.
5
5
  class Rewriter::RemoveAction < Rewriter::Action
6
- def initialize(instance, code=nil)
6
+ def initialize(instance, code = nil)
7
7
  super
8
8
  end
9
9
 
@@ -4,7 +4,7 @@ module Synvert::Core
4
4
  # ReplaceErbStmtWithExprAction to replace erb stmt code to expr,
5
5
  # e.g. <% form_for ... %> => <%= form_for ... %>.
6
6
  class Rewriter::ReplaceErbStmtWithExprAction < Rewriter::Action
7
- def initialize(instance, code=nil)
7
+ def initialize(instance, code = nil)
8
8
  super
9
9
  end
10
10
 
@@ -23,7 +23,7 @@ module Synvert::Core
23
23
  # @return [Integer] end position.
24
24
  def end_pos
25
25
  node_begin_pos = @node.loc.expression.begin_pos
26
- node_begin_pos += @node.loc.expression.source.index "do"
26
+ node_begin_pos += @node.loc.expression.source.index 'do'
27
27
  while @node.loc.expression.source_buffer.source[node_begin_pos += 1] != '@'
28
28
  end
29
29
  node_begin_pos
@@ -33,7 +33,8 @@ module Synvert::Core
33
33
  #
34
34
  # @return [String] rewritten code.
35
35
  def rewritten_code
36
- @node.loc.expression.source_buffer.source[begin_pos...end_pos].sub(Engine::ERUBY_STMT_SPLITTER, "@output_buffer.append= ")
36
+ @node.loc.expression.source_buffer.source[begin_pos...end_pos]
37
+ .sub(Engine::ERUBY_STMT_SPLITTER, '@output_buffer.append= ')
37
38
  .sub(Engine::ERUBY_STMT_SPLITTER, Engine::ERUBY_EXPR_SPLITTER)
38
39
  end
39
40
  end
@@ -23,16 +23,18 @@ module Synvert::Core
23
23
  def rewritten_code
24
24
  if rewritten_source.split("\n").length > 1
25
25
  new_code = []
26
- rewritten_source.split("\n").each_with_index { |line, index|
27
- new_code << (index == 0 || !@options[:autoindent] ? line : indent(@node) + line)
28
- }
26
+ rewritten_source
27
+ .split("\n")
28
+ .each_with_index { |line, index|
29
+ new_code << (index == 0 || !@options[:autoindent] ? line : indent(@node) + line)
30
+ }
29
31
  new_code.join("\n")
30
32
  else
31
33
  rewritten_source
32
34
  end
33
35
  end
34
36
 
35
- private
37
+ private
36
38
 
37
39
  # Indent of the node
38
40
  #
@@ -7,7 +7,7 @@ module Synvert::Core
7
7
  def match?
8
8
  match = false
9
9
  @instance.current_node.recursive_children do |child_node|
10
- match = match || (child_node && child_node.match?(@rules))
10
+ match ||= (child_node&.match?(@rules))
11
11
  end
12
12
  match
13
13
  end
@@ -5,8 +5,7 @@ module Synvert::Core
5
5
  class Rewriter::IfOnlyExistCondition < Rewriter::Condition
6
6
  # check if only have one child node and the child node matches rules.
7
7
  def match?
8
- @instance.current_node.body.size == 1 &&
9
- @instance.current_node.body.first.match?(@rules)
8
+ @instance.current_node.body.size == 1 && @instance.current_node.body.first.match?(@rules)
10
9
  end
11
10
  end
12
11
  end
@@ -7,7 +7,7 @@ module Synvert::Core
7
7
  def match?
8
8
  match = false
9
9
  @instance.current_node.recursive_children do |child_node|
10
- match = match || (child_node && child_node.match?(@rules))
10
+ match ||= (child_node&.match?(@rules))
11
11
  end
12
12
  !match
13
13
  end
@@ -3,7 +3,7 @@
3
3
  module Synvert::Core
4
4
  # GemSpec checks and compares gem version.
5
5
  class Rewriter::GemSpec
6
- OPERATORS = {eq: '==', lt: '<', gt: '>', lte: '<=', gte: '>=', ne: '!='}
6
+ OPERATORS = { eq: '==', lt: '<', gt: '>', lte: '<=', gte: '>=', ne: '!=' }.freeze
7
7
 
8
8
  # Initialize a gem_spec.
9
9
  #
@@ -26,16 +26,16 @@ module Synvert::Core
26
26
  # @return [Boolean] true if matches, otherwise false.
27
27
  # @raise [Synvert::Core::GemfileLockNotFound] raise if Gemfile.lock does not exist.
28
28
  def match?
29
- gemfile_lock_path = File.join(Configuration.instance.get(:path), 'Gemfile.lock')
30
- if File.exists? gemfile_lock_path
31
- parser = Bundler::LockfileParser.new(File.read(gemfile_lock_path))
32
- if spec = parser.specs.find { |spec| spec.name == @name }
33
- Gem::Version.new(spec.version).send(OPERATORS[@operator], @version)
34
- else
35
- false
36
- end
29
+ gemfile_lock_path = File.join(Configuration.path, 'Gemfile.lock')
30
+
31
+ # if Gemfile.lock does not exist, just ignore this check
32
+ return true unless File.exist?(gemfile_lock_path)
33
+
34
+ parser = Bundler::LockfileParser.new(File.read(gemfile_lock_path))
35
+ if spec = parser.specs.find { |spec| spec.name == @name }
36
+ Gem::Version.new(spec.version).send(OPERATORS[@operator], @version)
37
37
  else
38
- raise GemfileLockNotFound.new 'Gemfile.lock does not exist'
38
+ false
39
39
  end
40
40
  end
41
41
  end
@@ -34,9 +34,9 @@ module Synvert::Core
34
34
  # if current_node has argument, it returns "({{arguments}})"
35
35
  def add_arguments_with_parenthesis_if_necessary
36
36
  if node.arguments.size > 0
37
- "({{arguments}})"
37
+ '({{arguments}})'
38
38
  else
39
- ""
39
+ ''
40
40
  end
41
41
  end
42
42
 
@@ -65,9 +65,7 @@ module Synvert::Core
65
65
  #
66
66
  # strip_brackets("(1..100)") #=> "1..100"
67
67
  def strip_brackets(code)
68
- code.sub(/^\((.*)\)$/) { $1 }
69
- .sub(/^\[(.*)\]$/) { $1 }
70
- .sub(/^{(.*)}$/) { $1 }
68
+ code.sub(/^\((.*)\)$/) { $1 }.sub(/^\[(.*)\]$/) { $1 }.sub(/^{(.*)}$/) { $1 }
71
69
  end
72
70
  end
73
71
  end
@@ -8,7 +8,7 @@ module Synvert::Core
8
8
  class Rewriter::Instance
9
9
  include Rewriter::Helper
10
10
 
11
- class <<self
11
+ class << self
12
12
  # Cached file source.
13
13
  #
14
14
  # @param file_path [String] file path
@@ -64,7 +64,7 @@ module Synvert::Core
64
64
  # @return current filename
65
65
  attr_accessor :current_node, :current_file
66
66
 
67
- DEFAULT_OPTIONS = { sort_by: 'begin_pos' }
67
+ DEFAULT_OPTIONS = { sort_by: 'begin_pos' }.freeze
68
68
 
69
69
  # Initialize an instance.
70
70
  #
@@ -73,22 +73,25 @@ module Synvert::Core
73
73
  # @param options [Hash] instance options, it includes :sort_by.
74
74
  # @param block [Block] block code to find nodes, match conditions and rewrite code.
75
75
  # @return [Synvert::Core::Rewriter::Instance]
76
- def initialize(rewriter, file_pattern, options={}, &block)
76
+ def initialize(rewriter, file_pattern, options = {}, &block)
77
77
  @rewriter = rewriter
78
78
  @actions = []
79
79
  @file_pattern = file_pattern
80
80
  @options = DEFAULT_OPTIONS.merge(options)
81
81
  @block = block
82
- rewriter.helpers.each { |helper| self.singleton_class.send(:define_method, helper[:name], &helper[:block]) }
82
+ rewriter.helpers.each { |helper| singleton_class.send(:define_method, helper[:name], &helper[:block]) }
83
83
  end
84
84
 
85
85
  # Process the instance.
86
86
  # It finds all files, for each file, it executes the block code, gets all rewrite actions,
87
87
  # and rewrite source code back to original file.
88
88
  def process
89
- file_pattern = File.join(Configuration.instance.get(:path), @file_pattern)
90
- Dir.glob(file_pattern).each do |file_path|
91
- unless Configuration.instance.get(:skip_files).include? file_path
89
+ file_pattern = File.join(Configuration.path, @file_pattern)
90
+ Dir
91
+ .glob(file_pattern)
92
+ .each do |file_path|
93
+ next if Configuration.skip_files.include? file_path
94
+
92
95
  begin
93
96
  conflict_actions = []
94
97
  source = +self.class.file_source(file_path)
@@ -96,7 +99,7 @@ module Synvert::Core
96
99
 
97
100
  @current_file = file_path
98
101
 
99
- self.process_with_node ast do
102
+ process_with_node ast do
100
103
  begin
101
104
  instance_eval &@block
102
105
  rescue NoMethodError
@@ -108,7 +111,7 @@ module Synvert::Core
108
111
  if @actions.length > 0
109
112
  @actions.sort_by! { |action| action.send(@options[:sort_by]) }
110
113
  conflict_actions = get_conflict_actions
111
- @actions.reverse.each do |action|
114
+ @actions.reverse_each do |action|
112
115
  source[action.begin_pos...action.end_pos] = action.rewritten_code
113
116
  source = remove_code_or_whole_line(source, action.line)
114
117
  end
@@ -121,7 +124,6 @@ module Synvert::Core
121
124
  # do nothing, iterate next file
122
125
  end while !conflict_actions.empty?
123
126
  end
124
- end
125
127
  end
126
128
 
127
129
  # Gets current node, it allows to get current node in block code.
@@ -146,7 +148,7 @@ module Synvert::Core
146
148
  # @param node [Parser::AST::Node] node set to current_node
147
149
  # @yield process
148
150
  def process_with_other_node(node)
149
- original_node = self.current_node
151
+ original_node = current_node
150
152
  self.current_node = node
151
153
  yield
152
154
  self.current_node = original_node
@@ -165,7 +167,7 @@ module Synvert::Core
165
167
  Rewriter::WithinScope.new(self, rules, { recursive: true }, &block).process
166
168
  end
167
169
 
168
- alias_method :with_node, :within_node
170
+ alias with_node within_node
169
171
 
170
172
  # Parse within_direct_node dsl, it creates a [Synvert::Core::Rewriter::WithinScope] to find direct matching ast nodes,
171
173
  # then continue operating on each matching ast node.
@@ -176,7 +178,7 @@ module Synvert::Core
176
178
  Rewriter::WithinScope.new(self, rules, { recursive: false }, &block).process
177
179
  end
178
180
 
179
- alias_method :with_direct_node, :within_direct_node
181
+ alias with_direct_node within_direct_node
180
182
 
181
183
  # Parse goto_node dsl, it creates a [Synvert::Core::Rewriter::GotoScope] to go to a child node,
182
184
  # then continue operating on the child node.
@@ -220,7 +222,7 @@ module Synvert::Core
220
222
  #
221
223
  # @param code [String] code need to be appended.
222
224
  # @param options [Hash] action options.
223
- def append(code, options={})
225
+ def append(code, options = {})
224
226
  @actions << Rewriter::AppendAction.new(self, code, options)
225
227
  end
226
228
 
@@ -229,7 +231,7 @@ module Synvert::Core
229
231
  #
230
232
  # @param code [String] code need to be inserted.
231
233
  # @param options [Hash] action options.
232
- def insert(code, options={})
234
+ def insert(code, options = {})
233
235
  @actions << Rewriter::InsertAction.new(self, code, options)
234
236
  end
235
237
 
@@ -238,7 +240,7 @@ module Synvert::Core
238
240
  #
239
241
  # @param code [String] code need to be inserted.
240
242
  # @param options [Hash] action options.
241
- def insert_after(node, options={})
243
+ def insert_after(node, options = {})
242
244
  @actions << Rewriter::InsertAfterAction.new(self, node, options)
243
245
  end
244
246
 
@@ -247,7 +249,7 @@ module Synvert::Core
247
249
  #
248
250
  # @param code [String] code need to be replaced with.
249
251
  # @param options [Hash] action options.
250
- def replace_with(code, options={})
252
+ def replace_with(code, options = {})
251
253
  @actions << Rewriter::ReplaceWithAction.new(self, code, options)
252
254
  end
253
255
 
@@ -269,7 +271,7 @@ module Synvert::Core
269
271
  @rewriter.add_warning Rewriter::Warning.new(self, message)
270
272
  end
271
273
 
272
- private
274
+ private
273
275
 
274
276
  # It changes source code from bottom to top, and it can change source code twice at the same time,
275
277
  # So if there is an overlap between two actions, it removes the conflict actions and operate them in the next loop.
@@ -301,7 +303,8 @@ module Synvert::Core
301
303
  source_arr = source.split("\n")
302
304
  if source_arr[line - 1] && source_arr[line - 1].strip.empty?
303
305
  source_arr.delete_at(line - 1)
304
- if source_arr[line - 2] && source_arr[line - 2].strip.empty? && source_arr[line - 1] && source_arr[line - 1].strip.empty?
306
+ if source_arr[line - 2] && source_arr[line - 2].strip.empty? && source_arr[line - 1] &&
307
+ source_arr[line - 1].strip.empty?
305
308
  source_arr.delete_at(line - 1)
306
309
  end
307
310
  source_arr.join("\n") + (newline_at_end_of_line ? "\n" : '')