import_js 0.5.0 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: eddd4e67b47ab663fb4bb1fc39a2e11810f9f640
4
- data.tar.gz: 399fee47fa49f677e9646ae1451a897869a441cc
3
+ metadata.gz: cd6adff72ccc7afa4dc2e926b56398d666942449
4
+ data.tar.gz: 1190a25ee2e7e0af64a7de229ab279bebded2951
5
5
  SHA512:
6
- metadata.gz: d3269f091d4da05e069fd26f935450964495da18d1a970a77cacc6bea9fc5593c002c16c3cb53a2b8234ed2be711018aefbfb03e58e5b76e04cfd4b383ee9513
7
- data.tar.gz: 545f69bfb8caadcc9bd30e3ae04ab73640d369272b47997be3e5c8718fee06f4f7f740fa9e608fa55872c4f606d04a8af9c9ff804867485ed7451a85714e4b8f
6
+ metadata.gz: f6d1a84089692701188e7cd7c18131e980f7f81ed8c9c785c1552fdcd625c006a8cd3ab4b89407e71370a47b5e1eba6f61d2076c43bac362da0262e3f791084d
7
+ data.tar.gz: 576275490822799e44ad5427c4512169a7f279876c56dac305739fa4bde0ce7dce0de0aee5c7984a8e2aa88ebe311c4825e7c09137ce5f6b8441c8b582fca48e
@@ -75,7 +75,7 @@ module ImportJS
75
75
  named_imports = dest_match[:named].split(/,\s*/).map(&:strip)
76
76
  else
77
77
  default_import = match[:assignment]
78
- return unless default_import =~ /\A\w+\Z/
78
+ return unless default_import =~ /\A[^\s]+\Z/
79
79
  end
80
80
 
81
81
  new(
@@ -55,6 +55,10 @@ module ImportJS
55
55
  end
56
56
 
57
57
  REGEX_ESLINT_RESULT = /
58
+ :
59
+ (?<line>\d+) # <line> line number
60
+ :\d+:
61
+ \s
58
62
  (?<quote>["']) # <quote> opening quote
59
63
  (?<variable_name>[^\1]+) # <variable_name>
60
64
  \k<quote>
@@ -73,22 +77,33 @@ module ImportJS
73
77
  reload_config
74
78
  eslint_result = run_eslint_command
75
79
 
76
- unused_variables = Set.new
80
+ return if eslint_result.empty?
81
+
82
+ unused_variables = {}
77
83
  undefined_variables = Set.new
78
84
 
79
85
  eslint_result.each do |line|
80
86
  match = REGEX_ESLINT_RESULT.match(line)
81
87
  next unless match
82
88
  if match[:type] == 'is defined but never used'
83
- unused_variables.add match[:variable_name]
89
+ unused_variables[match[:variable_name]] ||= Set.new
90
+ unused_variables[match[:variable_name]].add match[:line].to_i
84
91
  else
85
92
  undefined_variables.add match[:variable_name]
86
93
  end
87
94
  end
88
95
 
96
+ return if unused_variables.empty? && undefined_variables.empty?
97
+
89
98
  old_imports = find_current_imports
99
+
100
+ # Filter out unused variables that do not appear within the imports block.
101
+ unused_variables.select! do |_, line_numbers|
102
+ any_numbers_within_range?(line_numbers, old_imports[:range])
103
+ end
104
+
90
105
  new_imports = old_imports[:imports].clone
91
- new_imports.delete_variables!(unused_variables.to_a)
106
+ new_imports.delete_variables!(unused_variables.keys)
92
107
 
93
108
  undefined_variables.each do |variable|
94
109
  js_module = find_one_js_module(variable)
@@ -130,6 +145,16 @@ module ImportJS
130
145
  @editor.message("ImportJS: #{str}")
131
146
  end
132
147
 
148
+ # @param numbers [Set]
149
+ # @param range [Range]
150
+ # @return [Boolean]
151
+ def any_numbers_within_range?(numbers, range)
152
+ numbers.each do |number|
153
+ return true if range.include?(number)
154
+ end
155
+ false
156
+ end
157
+
133
158
  ESLINT_STDOUT_ERROR_REGEXES = [
134
159
  /Parsing error: /,
135
160
  /Unrecoverable syntax error/,
@@ -200,15 +225,15 @@ module ImportJS
200
225
 
201
226
  # Ensure that there is a blank line after the block of all imports
202
227
  if old_imports_range.size + import_strings.length > 0 &&
203
- !@editor.read_line(old_imports_range.last + 1).strip.empty?
204
- @editor.append_line(old_imports_range.last, '')
228
+ !@editor.read_line(old_imports_range.last).strip.empty?
229
+ @editor.append_line(old_imports_range.last - 1, '')
205
230
  end
206
231
 
207
232
  # Find old import strings so we can compare with the new import strings
208
233
  # and see if anything has changed.
209
234
  old_import_strings = []
210
- old_imports_range.each do |line_index|
211
- old_import_strings << @editor.read_line(line_index + 1)
235
+ old_imports_range.each do |line_number|
236
+ old_import_strings << @editor.read_line(line_number)
212
237
  end
213
238
 
214
239
  # If nothing has changed, bail to prevent unnecessarily dirtying the
@@ -217,17 +242,17 @@ module ImportJS
217
242
 
218
243
  # Delete old imports, then add the modified list back in.
219
244
  old_imports_range.each do
220
- @editor.delete_line(1 + old_imports_range.first)
245
+ @editor.delete_line(old_imports_range.first)
221
246
  end
222
247
  import_strings.reverse_each do |import_string|
223
248
  # We need to add each line individually because the Vim buffer will
224
249
  # convert newline characters to `~@`.
225
250
  if import_string.include? "\n"
226
251
  import_string.split("\n").reverse_each do |line|
227
- @editor.append_line(old_imports_range.first, line)
252
+ @editor.append_line(old_imports_range.first - 1, line)
228
253
  end
229
254
  else
230
- @editor.append_line(old_imports_range.first, import_string)
255
+ @editor.append_line(old_imports_range.first - 1, import_string)
231
256
  end
232
257
  end
233
258
  end
@@ -248,7 +273,7 @@ module ImportJS
248
273
 
249
274
  # @return [Hash]
250
275
  def find_current_imports
251
- imports_start_at = 0
276
+ imports_start_at_line_number = 1
252
277
  newline_count = 0
253
278
 
254
279
  scanner = StringScanner.new(@editor.current_file_content)
@@ -261,7 +286,7 @@ module ImportJS
261
286
  if skipped =~ /\A(\s*\n)+\Z/m
262
287
  scanner = StringScanner.new(@editor.current_file_content)
263
288
  else
264
- imports_start_at += skipped.count("\n")
289
+ imports_start_at_line_number += skipped.count("\n")
265
290
  end
266
291
 
267
292
  imports = ImportStatements.new(@config)
@@ -273,9 +298,10 @@ module ImportJS
273
298
  newline_count += potential_import.scan(/\n/).length
274
299
  end
275
300
 
301
+ imports_end_at_line_number = imports_start_at_line_number + newline_count
276
302
  {
277
303
  imports: imports,
278
- range: imports_start_at...(imports_start_at + newline_count),
304
+ range: imports_start_at_line_number...imports_end_at_line_number,
279
305
  }
280
306
  end
281
307
 
@@ -2,5 +2,5 @@
2
2
 
3
3
  # Defines the gem version.
4
4
  module ImportJS
5
- VERSION = '0.5.0'.freeze
5
+ VERSION = '0.5.1'.freeze
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: import_js
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henric Trotzig