synvert-core 0.21.2 → 0.22.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2cb208eddfa8a9d304c434950ab7054f0836f52860bb6edaeebe0c421cf7647c
4
- data.tar.gz: 3609ebb014a30b489761bdd27ce2a0236695636b4a51196eb7f7c122d59ff692
3
+ metadata.gz: 8c112197bf98b5adfe2b5826ea3301f06f66511c111906bfd0c72a8c54a10d33
4
+ data.tar.gz: adb56b1ae52dd1b87d84d2861b7433586c96ddc6718fafcd79852775f84b38c4
5
5
  SHA512:
6
- metadata.gz: b503e1bfe14c3e489465f71eb3edba0e5cc6ebaab0a860b14c6766208468951832eb61dd070353313b2bba3f0d3001ade5c9683e7de799a8a380db06ae7997eb
7
- data.tar.gz: 80923462e716f67f4f278627be2ab765534c302cd2d572f78ee0e03a6cb7c8569bdc8182ee0550f05e41d3184184dca378e9a262da1eb8cf386e5c5f5e5c76f3
6
+ metadata.gz: e2f79639b669fc7b054ba8e57df70925f7f9bfdf6e40144069d41848bc0d0b3df0d60e73fc078c8e78eb29718bc8f3a181ee7964c63a3dcadd9a8981ce31544b
7
+ data.tar.gz: 758e0896064a0c15dbe4e3d3d128bc3f42517c2f2802067cccab20f3b366165d7ef5f3203975e261903573f2989f82f3918b09db925a2d896b9bee5897299a58
data/CHANGELOG.md CHANGED
@@ -1,12 +1,9 @@
1
1
  # CHANGELOG
2
2
 
3
- ## 0.21.2 (2021-02-26)
3
+ ## 0.22.0 (2021-03-13)
4
4
 
5
- * Fix `find_matching_nodes` if `current_node` is a `:begin` node
6
-
7
- ## 0.21.1 (2021-02-26)
8
-
9
- * Fix `find_matching_nodes` if `current_node` is a `Parser::AST::Node`
5
+ * Track `affected_files` for rewriter
6
+ * Fix `find_matching_nodes` for `current_node`
10
7
 
11
8
  ## 0.21.0 (2021-02-25)
12
9
 
data/lib/synvert/core.rb CHANGED
@@ -7,6 +7,7 @@ require 'parser/current'
7
7
  require 'ast'
8
8
  require 'active_support/core_ext/object'
9
9
  require 'erubis'
10
+ require 'set'
10
11
  require 'synvert/core/node_ext'
11
12
 
12
13
  module Synvert
@@ -335,24 +335,22 @@ module Parser::AST
335
335
  # @param rules [Hash] rules to match.
336
336
  # @return true if matches.
337
337
  def match?(rules)
338
- flat_hash(rules)
339
- .keys
340
- .all? do |multi_keys|
341
- case multi_keys.last
342
- when :any
343
- actual_values = actual_value(self, multi_keys[0...-1])
344
- expected = expected_value(rules, multi_keys)
345
- actual_values.any? { |actual| match_value?(actual, expected) }
346
- when :not
347
- actual = actual_value(self, multi_keys[0...-1])
348
- expected = expected_value(rules, multi_keys)
349
- !match_value?(actual, expected)
350
- else
351
- actual = actual_value(self, multi_keys)
352
- expected = expected_value(rules, multi_keys)
353
- match_value?(actual, expected)
354
- end
338
+ flat_hash(rules).keys.all? do |multi_keys|
339
+ case multi_keys.last
340
+ when :any
341
+ actual_values = actual_value(self, multi_keys[0...-1])
342
+ expected = expected_value(rules, multi_keys)
343
+ actual_values.any? { |actual| match_value?(actual, expected) }
344
+ when :not
345
+ actual = actual_value(self, multi_keys[0...-1])
346
+ expected = expected_value(rules, multi_keys)
347
+ !match_value?(actual, expected)
348
+ else
349
+ actual = actual_value(self, multi_keys)
350
+ expected = expected_value(rules, multi_keys)
351
+ match_value?(actual, expected)
355
352
  end
353
+ end
356
354
  end
357
355
 
358
356
  # Get rewritten source code.
@@ -145,7 +145,9 @@ module Synvert::Core
145
145
  # @return [Array] helper methods.
146
146
  # @!attribute [r] warnings
147
147
  # @return [Array<Synvert::Core::Rewriter::Warning>] warning messages.
148
- attr_reader :group, :name, :sub_snippets, :helpers, :warnings
148
+ # @!attribute [r] affected_files
149
+ # @return [Set] affected fileds
150
+ attr_reader :group, :name, :sub_snippets, :helpers, :warnings, :affected_files
149
151
 
150
152
  # Initialize a rewriter.
151
153
  # When a rewriter is initialized, it is also registered.
@@ -161,6 +163,7 @@ module Synvert::Core
161
163
  @helpers = []
162
164
  @sub_snippets = []
163
165
  @warnings = []
166
+ @affected_files = Set.new
164
167
  self.class.register(@group, @name, self)
165
168
  end
166
169
 
@@ -188,6 +191,13 @@ module Synvert::Core
188
191
  @warnings << warning
189
192
  end
190
193
 
194
+ # Add an affected file.
195
+ #
196
+ # @param file_path [String]
197
+ def add_affected_file(file_path)
198
+ @affected_files.add(file_path)
199
+ end
200
+
191
201
  #######
192
202
  # DSL #
193
203
  #######
@@ -23,11 +23,9 @@ module Synvert::Core
23
23
  def rewritten_code
24
24
  if rewritten_source.split("\n").length > 1
25
25
  new_code = []
26
- rewritten_source
27
- .split("\n")
28
- .each_with_index { |line, index|
29
- new_code << (index == 0 || !@options[:autoindent] ? line : indent(@node) + line)
30
- }
26
+ rewritten_source.split("\n").each_with_index { |line, index|
27
+ new_code << (index == 0 || !@options[:autoindent] ? line : indent(@node) + line)
28
+ }
31
29
  new_code.join("\n")
32
30
  else
33
31
  rewritten_source
@@ -87,43 +87,41 @@ module Synvert::Core
87
87
  # and rewrite source code back to original file.
88
88
  def process
89
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
-
95
- begin
96
- conflict_actions = []
97
- source = +self.class.file_source(file_path)
98
- ast = self.class.file_ast(file_path)
99
-
100
- @current_file = file_path
101
-
102
- process_with_node ast do
103
- begin
104
- instance_eval(&@block)
105
- rescue NoMethodError
106
- puts @current_node.debug_info
107
- raise
108
- end
90
+ Dir.glob(file_pattern).each do |file_path|
91
+ next if Configuration.skip_files.include? file_path
92
+
93
+ begin
94
+ conflict_actions = []
95
+ source = +self.class.file_source(file_path)
96
+ ast = self.class.file_ast(file_path)
97
+
98
+ @current_file = file_path
99
+
100
+ process_with_node ast do
101
+ begin
102
+ instance_eval(&@block)
103
+ rescue NoMethodError
104
+ puts @current_node.debug_info
105
+ raise
109
106
  end
107
+ end
110
108
 
111
- if @actions.length > 0
112
- @actions.sort_by! { |action| action.send(@options[:sort_by]) }
113
- conflict_actions = get_conflict_actions
114
- @actions.reverse_each do |action|
115
- source[action.begin_pos...action.end_pos] = action.rewritten_code
116
- source = remove_code_or_whole_line(source, action.line)
117
- end
118
- @actions = []
119
-
120
- self.class.write_file(file_path, source)
109
+ if @actions.length > 0
110
+ @actions.sort_by! { |action| action.send(@options[:sort_by]) }
111
+ conflict_actions = get_conflict_actions
112
+ @actions.reverse_each do |action|
113
+ source[action.begin_pos...action.end_pos] = action.rewritten_code
114
+ source = remove_code_or_whole_line(source, action.line)
121
115
  end
122
- rescue Parser::SyntaxError
123
- puts "[Warn] file #{file_path} was not parsed correctly."
124
- # do nothing, iterate next file
125
- end while !conflict_actions.empty?
126
- end
116
+ @actions = []
117
+
118
+ update_file(file_path, source)
119
+ end
120
+ rescue Parser::SyntaxError
121
+ puts "[Warn] file #{file_path} was not parsed correctly."
122
+ # do nothing, iterate next file
123
+ end while !conflict_actions.empty?
124
+ end
127
125
  end
128
126
 
129
127
  # Gets current node, it allows to get current node in block code.
@@ -312,5 +310,14 @@ module Synvert::Core
312
310
  source
313
311
  end
314
312
  end
313
+
314
+ # It updates a file with new source code.
315
+ #
316
+ # @param file_path [String] the file path
317
+ # @param source [String] the new source code
318
+ def update_file(file_path, source)
319
+ self.class.write_file(file_path, source)
320
+ @rewriter.add_affected_file(file_path)
321
+ end
315
322
  end
316
323
  end
@@ -46,8 +46,8 @@ module Synvert::Core
46
46
  current_node.children.each do |child_node|
47
47
  matching_nodes << child_node if child_node.match? @rules
48
48
  end
49
- else
50
- matching_nodes << current_node if current_node.match? @rules
49
+ elsif current_node.match? @rules
50
+ matching_nodes << current_node
51
51
  end
52
52
  else
53
53
  current_node.each do |child_node|
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Synvert
4
4
  module Core
5
- VERSION = '0.21.2'
5
+ VERSION = '0.22.0'
6
6
  end
7
7
  end
@@ -243,6 +243,7 @@ end
243
243
  expect(File).to receive(:read).with('spec/models/post_spec.rb').and_return(output)
244
244
  instance.process
245
245
  instance.process
246
+ expect(rewriter.affected_files).to be_include('spec/models/post_spec.rb')
246
247
  end
247
248
  end
248
249
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: synvert-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.21.2
4
+ version: 0.22.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Huang
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-26 00:00:00.000000000 Z
11
+ date: 2021-03-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -209,7 +209,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
209
209
  - !ruby/object:Gem::Version
210
210
  version: '0'
211
211
  requirements: []
212
- rubygems_version: 3.1.4
212
+ rubygems_version: 3.0.3
213
213
  signing_key:
214
214
  specification_version: 4
215
215
  summary: convert ruby code to better syntax.