code_analyzer 0.4.6 → 0.5.2

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
- SHA1:
3
- metadata.gz: 84254a2c93bfef8fd24e54f1830729c22cb24cb9
4
- data.tar.gz: d098c0883a5b139a4147118045f2c6ce3a76e034
2
+ SHA256:
3
+ metadata.gz: 5a68561649e1e345495d4a494530dc7abb9ca256dc5a999d1aa71b1c567b0e66
4
+ data.tar.gz: d21414e33aa72bbb23571985b9eaa00e177057f7781cbb3f1398476119f38c69
5
5
  SHA512:
6
- metadata.gz: baddc030af7af45aba9b808432ea3374dd10231d0b1f4c1d0624499bb27319762405e2f318a42cf0a4102ac81833ccd1b535e0813e4ddfb9fa50a996bbf7ea18
7
- data.tar.gz: 0da69c9d2fc22b0db89a84b5b0f3435b06e1cfcb81cad98de5ead1bd34e89cbcdc8615b695d82b11155d1cfc608db4c1604ab4dfb52ab8dcdec397ea85d22136
6
+ metadata.gz: 99369336e083dd38d76e7436ee9d824565108760339d3da59b057649341917da4649e68c78f01a29ba45c09c95a2ca71c1b2392d9c2a252826cb81abb2580131
7
+ data.tar.gz: cbba861e5caa35dcd4a0e887159ae0a14bb166a21f2b0bb8b5e33f188c346f9b71b6b11bbee253e9ee2b18b4fc7be039801d438168d43d00b4f007b0541698d8
@@ -1,5 +1,5 @@
1
1
  language: ruby
2
2
  cache: bundler
3
- sudo: false
4
3
  rvm:
5
- - 2.3.1
4
+ - 2.6.6
5
+ - 2.7.1
@@ -1,4 +1,5 @@
1
- # -*- encoding: utf-8 -*-
1
+ # frozen_string_literal: true
2
+
2
3
  require File.expand_path('../lib/code_analyzer/version', __FILE__)
3
4
 
4
5
  Gem::Specification.new do |gem|
@@ -1,12 +1,13 @@
1
- # encoding: utf-8
2
- require "ripper"
3
- require "code_analyzer/version"
4
- require "code_analyzer/nil"
5
- require "code_analyzer/sexp"
1
+ # frozen_string_literal: true
2
+
3
+ require 'ripper'
4
+ require 'code_analyzer/version'
5
+ require 'code_analyzer/nil'
6
+ require 'code_analyzer/sexp'
6
7
 
7
8
  module CodeAnalyzer
8
- autoload :AnalyzerException, "code_analyzer/analyzer_exception"
9
- autoload :Checker, "code_analyzer/checker"
10
- autoload :CheckingVisitor, "code_analyzer/checking_visitor"
11
- autoload :Warning, "code_analyzer/warning"
9
+ autoload :AnalyzerException, 'code_analyzer/analyzer_exception'
10
+ autoload :Checker, 'code_analyzer/checker'
11
+ autoload :CheckingVisitor, 'code_analyzer/checking_visitor'
12
+ autoload :Warning, 'code_analyzer/warning'
12
13
  end
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module CodeAnalyzer
3
4
  class AnalyzerException < Exception; end
4
5
  end
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module CodeAnalyzer
3
4
  # A checker class that takes charge of checking the sexp.
4
5
  class Checker
@@ -28,9 +29,7 @@ module CodeAnalyzer
28
29
  # @param [Sexp] node
29
30
  def node_start(node)
30
31
  @node = node
31
- self.class.get_callbacks("start_#{node.sexp_type}".to_sym).each do |block|
32
- self.instance_exec(node, &block)
33
- end
32
+ self.class.get_callbacks("start_#{node.sexp_type}".to_sym).each { |block| self.instance_exec(node, &block) }
34
33
  end
35
34
 
36
35
  # delegate to end_### according to the sexp_type, like
@@ -41,9 +40,7 @@ module CodeAnalyzer
41
40
  # @param [Sexp] node
42
41
  def node_end(node)
43
42
  @node = node
44
- self.class.get_callbacks("end_#{node.sexp_type}".to_sym).each do |block|
45
- self.instance_exec(node, &block)
46
- end
43
+ self.class.get_callbacks("end_#{node.sexp_type}".to_sym).each { |block| self.instance_exec(node, &block) }
47
44
  end
48
45
 
49
46
  # add an warning.
@@ -60,7 +57,7 @@ module CodeAnalyzer
60
57
  @warnings ||= []
61
58
  end
62
59
 
63
- class <<self
60
+ class << self
64
61
  def interesting_nodes(*nodes)
65
62
  @interesting_nodes ||= []
66
63
  @interesting_nodes += nodes
@@ -1,8 +1,9 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module CodeAnalyzer
3
4
  module CheckingVisitor
4
- autoload :Base, "code_analyzer/checking_visitor/base"
5
- autoload :Plain, "code_analyzer/checking_visitor/plain"
6
- autoload :Default, "code_analyzer/checking_visitor/default"
5
+ autoload :Base, 'code_analyzer/checking_visitor/base'
6
+ autoload :Plain, 'code_analyzer/checking_visitor/plain'
7
+ autoload :Default, 'code_analyzer/checking_visitor/default'
7
8
  end
8
9
  end
@@ -1,8 +1,9 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module CodeAnalyzer::CheckingVisitor
3
4
  # Base class for checking visitor.
4
5
  class Base
5
- def initialize(options={})
6
+ def initialize(options = {})
6
7
  @checkers = options[:checkers]
7
8
  end
8
9
 
@@ -1,8 +1,9 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module CodeAnalyzer::CheckingVisitor
3
4
  # This is the default checking visitor to check ruby sexp nodes.
4
5
  class Default < Base
5
- def initialize(options={})
6
+ def initialize(options = {})
6
7
  super
7
8
  @checks = {}
8
9
  @checkers.each do |checker|
@@ -28,9 +29,7 @@ module CodeAnalyzer::CheckingVisitor
28
29
  def after_check
29
30
  @checkers.each do |checker|
30
31
  after_check_callbacks = checker.class.get_callbacks(:after_check)
31
- after_check_callbacks.each do |block|
32
- checker.instance_exec &block
33
- end
32
+ after_check_callbacks.each { |block| checker.instance_exec &block }
34
33
  end
35
34
  end
36
35
 
@@ -51,16 +50,14 @@ module CodeAnalyzer::CheckingVisitor
51
50
  # 3. it triggers the interesting checkers' end callbacks.
52
51
  def check_node(node)
53
52
  checkers = @checks[node.sexp_type]
54
- if checkers
55
- checkers.each { |checker| checker.node_start(node) if checker.parse_file?(node.file) }
56
- end
57
- node.children.each { |child_node|
53
+
54
+ checkers.each { |checker| checker.node_start(node) if checker.parse_file?(node.file) } if checkers
55
+ node.children.each do |child_node|
58
56
  child_node.file = node.file
59
57
  check_node(child_node)
60
- }
61
- if checkers
62
- checkers.each { |checker| checker.node_end(node) if checker.parse_file?(node.file) }
63
58
  end
59
+
60
+ checkers.each { |checker| checker.node_end(node) if checker.parse_file?(node.file) } if checkers
64
61
  end
65
62
  end
66
63
  end
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module CodeAnalyzer::CheckingVisitor
3
4
  # This is the checking visitor to check ruby plain code.
4
5
  class Plain < Base
@@ -7,9 +8,7 @@ module CodeAnalyzer::CheckingVisitor
7
8
  # @param [String] filename is the filename of ruby code.
8
9
  # @param [String] content is the content of ruby file.
9
10
  def check(filename, content)
10
- @checkers.each do |checker|
11
- checker.check(filename, content) if checker.parse_file?(filename)
12
- end
11
+ @checkers.each { |checker| checker.check(filename, content) if checker.parse_file?(filename) }
13
12
  end
14
13
  end
15
14
  end
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module CodeAnalyzer
3
4
  # Fake nil.
4
5
  class Nil
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  require 'sexp'
3
4
 
4
5
  class Sexp
@@ -13,22 +14,23 @@ class Sexp
13
14
  #
14
15
  # s(:@ident, "test", s(2, 12)
15
16
  # => 2
17
+
16
18
  def line_number
17
19
  case sexp_type
18
- when :def, :defs, :command, :command_call, :call, :fcall, :method_add_arg, :method_add_block,
19
- :var_ref, :vcall, :const_ref, :const_path_ref, :class, :module,
20
- :if, :unless, :elsif, :ifop, :if_mod, :unless_mod, :binary,
21
- :alias, :symbol_literal, :symbol, :aref, :hash, :assoc_new, :string_literal,
22
- :massign
20
+ when :def, :defs, :command, :command_call, :call, :fcall, :method_add_arg, :method_add_block, :var_ref, :vcall,
21
+ :const_ref, :top_const_ref, :const_path_ref, :class, :module, :if, :unless, :elsif, :ifop, :if_mod, :unless_mod, :binary, :alias,
22
+ :symbol_literal, :symbol, :aref, :hash, :assoc_new, :string_literal, :massign, :var_field, :assign, :paren, :dot2, :dot3
23
23
  self[1].line_number
24
24
  when :assoclist_from_args, :bare_assoc_hash
25
25
  self[1][0].line_number
26
- when :string_add, :opassign
26
+ when :string_add, :opassign, :unary, :stmts_add
27
27
  self[2].line_number
28
28
  when :array
29
29
  array_values.first.line_number
30
30
  when :mlhs_add
31
31
  self.last.line_number
32
+ when :params
33
+ self[1][0].line_number if self[1].is_a? Array
32
34
  else
33
35
  self.last.first if self.last.is_a? Array
34
36
  end
@@ -38,7 +40,7 @@ class Sexp
38
40
  #
39
41
  # @return [Array] child nodes.
40
42
  def children
41
- find_all { | sexp | Sexp === sexp }
43
+ find_all { |sexp| Sexp === sexp }
42
44
  end
43
45
 
44
46
  # recursively find all child nodes, and yeild each child node.
@@ -68,10 +70,17 @@ class Sexp
68
70
  message = options[:message]
69
71
  to_s = options[:to_s]
70
72
  self.recursive_children do |child|
71
- if (!sexp_type || (sexp_type.is_a?(Array) ? sexp_type.include?(child.sexp_type) : sexp_type == child.sexp_type)) &&
72
- (!receiver || (receiver.is_a?(Array) ? receiver.include?(child.receiver.to_s) : receiver == child.receiver.to_s)) &&
73
- (!message || (message.is_a?(Array) ? message.include?(child.message.to_s) : message == child.message.to_s)) &&
74
- (!to_s || (to_s.is_a?(Array) ? to_s.include?(child.to_s) : to_s == child.to_s))
73
+ if (
74
+ !sexp_type || (sexp_type.is_a?(Array) ? sexp_type.include?(child.sexp_type) : sexp_type == child.sexp_type)
75
+ ) &&
76
+ (
77
+ !receiver ||
78
+ (receiver.is_a?(Array) ? receiver.include?(child.receiver.to_s) : receiver == child.receiver.to_s)
79
+ ) &&
80
+ (
81
+ !message || (message.is_a?(Array) ? message.include?(child.message.to_s) : message == child.message.to_s)
82
+ ) &&
83
+ (!to_s || (to_s.is_a?(Array) ? to_s.include?(child.to_s) : to_s == child.to_s))
75
84
  yield child
76
85
  end
77
86
  end
@@ -91,7 +100,10 @@ class Sexp
91
100
  # the condition value can be Symbol, Array or Sexp.
92
101
  def grep_node(options)
93
102
  result = CodeAnalyzer::Nil.new
94
- grep_nodes(options) { |node| result = node; break; }
103
+ grep_nodes(options) do |node|
104
+ result = node
105
+ break
106
+ end
95
107
  result
96
108
  end
97
109
 
@@ -138,9 +150,7 @@ class Sexp
138
150
  #
139
151
  # @return [Sexp] module name node
140
152
  def module_name
141
- if :module == sexp_type
142
- self[1]
143
- end
153
+ self[1] if :module == sexp_type
144
154
  end
145
155
 
146
156
  # Get the class name of the class node.
@@ -154,9 +164,7 @@ class Sexp
154
164
  #
155
165
  # @return [Sexp] class name node
156
166
  def class_name
157
- if :class == sexp_type
158
- self[1]
159
- end
167
+ self[1] if :class == sexp_type
160
168
  end
161
169
 
162
170
  # Get the base class of the class node.
@@ -170,9 +178,7 @@ class Sexp
170
178
  #
171
179
  # @return [Sexp] base class of class node
172
180
  def base_class
173
- if :class == sexp_type
174
- self[2]
175
- end
181
+ self[2] if :class == sexp_type
176
182
  end
177
183
 
178
184
  # Get the left value of the assign node.
@@ -185,9 +191,7 @@ class Sexp
185
191
  #
186
192
  # @return [Symbol] left value of lasgn or iasgn node
187
193
  def left_value
188
- if :assign == sexp_type
189
- self[1]
190
- end
194
+ self[1] if :assign == sexp_type
191
195
  end
192
196
 
193
197
  # Get the right value of assign node.
@@ -200,9 +204,7 @@ class Sexp
200
204
  #
201
205
  # @return [Sexp] right value of assign node
202
206
  def right_value
203
- if :assign == sexp_type
204
- self[2]
205
- end
207
+ self[2] if :assign == sexp_type
206
208
  end
207
209
 
208
210
  # Get the message node.
@@ -277,9 +279,7 @@ class Sexp
277
279
  #
278
280
  # @return [Sexp] argument node
279
281
  def argument
280
- if :binary == sexp_type
281
- self[3]
282
- end
282
+ self[3] if :binary == sexp_type
283
283
  end
284
284
 
285
285
  # Get all arguments.
@@ -305,7 +305,7 @@ class Sexp
305
305
  else
306
306
  node = self[1]
307
307
  while true
308
- if [:args_add, :args_add_star].include? node.sexp_type
308
+ if %i[args_add args_add_star].include? node.sexp_type
309
309
  nodes.unshift node[2]
310
310
  node = node[1]
311
311
  elsif :args_new == node.sexp_type
@@ -330,9 +330,7 @@ class Sexp
330
330
  #
331
331
  # @return [Sexp] conditional statement of if node
332
332
  def conditional_statement
333
- if [:if, :unless, :elsif, :ifop, :if_mod, :unless_mod].include? sexp_type
334
- self[1]
335
- end
333
+ self[1] if %i[if unless elsif ifop if_mod unless_mod].include? sexp_type
336
334
  end
337
335
 
338
336
  # Get all condition nodes.
@@ -366,13 +364,13 @@ class Sexp
366
364
  # @return [Array] all condition nodes
367
365
  def all_conditions
368
366
  nodes = []
369
- if :binary == sexp_type && %w(&& || and or).include?(self[2].to_s)
370
- if :binary == self[1].sexp_type && %w(&& || and or).include?(self[1][2].to_s)
367
+ if :binary == sexp_type && %w[&& || and or].include?(self[2].to_s)
368
+ if :binary == self[1].sexp_type && %w[&& || and or].include?(self[1][2].to_s)
371
369
  nodes += self[1].all_conditions
372
370
  else
373
371
  nodes << self[1]
374
372
  end
375
- if :binary == self[3].sexp_type && %w(&& || and or).include?(self[3][2].to_s)
373
+ if :binary == self[3].sexp_type && %w[&& || and or].include?(self[3][2].to_s)
376
374
  nodes += self[3].all_conditions
377
375
  else
378
376
  nodes << self[3]
@@ -392,6 +390,7 @@ class Sexp
392
390
  # => s(:@ident, "show", s(1, 4)),
393
391
  #
394
392
  # @return [Sexp] method name node
393
+
395
394
  def method_name
396
395
  case sexp_type
397
396
  when :def
@@ -399,6 +398,7 @@ class Sexp
399
398
  when :defs
400
399
  self[3]
401
400
  else
401
+
402
402
  end
403
403
  end
404
404
 
@@ -428,6 +428,7 @@ class Sexp
428
428
  # )
429
429
  #
430
430
  # @return [Sexp] body node
431
+
431
432
  def body
432
433
  case sexp_type
433
434
  when :else
@@ -506,13 +507,15 @@ class Sexp
506
507
  # @return [Array] all statements
507
508
  def statements
508
509
  stmts = []
509
- node = case sexp_type
510
- when :do_block, :brace_block
511
- self[2]
512
- when :bodystmt
513
- self[1]
514
- else
515
- end
510
+ node =
511
+ case sexp_type
512
+ when :do_block, :brace_block
513
+ self[2][1]
514
+ when :bodystmt
515
+ self[1]
516
+ else
517
+
518
+ end
516
519
  if node
517
520
  while true
518
521
  if :stmts_add == node.sexp_type && s(:void_stmt) != node[2]
@@ -542,6 +545,7 @@ class Sexp
542
545
  def exception_classes
543
546
  if :rescue == sexp_type
544
547
  return [] unless self[1]
548
+
545
549
  if :mrhs_add == self[1].sexp_type
546
550
  exceptions = Array.new(self[1][2])
547
551
  arg_nodes = self[1][1][1]
@@ -566,9 +570,7 @@ class Sexp
566
570
  # )
567
571
  # => s(:var_field, s(:@ident, "e", s(1, 20)))
568
572
  def exception_variable
569
- if :rescue == sexp_type
570
- self[2]
571
- end
573
+ self[2] if :rescue == sexp_type
572
574
  end
573
575
 
574
576
  # Get hash value node.
@@ -585,20 +587,17 @@ class Sexp
585
587
  #
586
588
  # @return [Sexp] hash value node
587
589
  def hash_value(key)
588
- pair_nodes = case sexp_type
589
- when :bare_assoc_hash
590
- self[1]
591
- when :hash
592
- self[1][1]
593
- else
594
- end
595
- if pair_nodes
596
- pair_nodes.size.times do |i|
597
- if key == pair_nodes[i][1].to_s
598
- return pair_nodes[i][2]
599
- end
590
+ pair_nodes =
591
+ case sexp_type
592
+ when :bare_assoc_hash
593
+ self[1]
594
+ when :hash
595
+ self[1][1]
596
+ else
597
+
600
598
  end
601
- end
599
+
600
+ pair_nodes.size.times { |i| return pair_nodes[i][2] if key == pair_nodes[i][1].to_s } if pair_nodes
602
601
  CodeAnalyzer::Nil.new
603
602
  end
604
603
 
@@ -640,18 +639,18 @@ class Sexp
640
639
  #
641
640
  # @return [Array] hash keys
642
641
  def hash_keys
643
- pair_nodes = case sexp_type
644
- when :bare_assoc_hash
645
- self[1]
646
- when :hash
647
- self[1][1]
648
- else
649
- end
642
+ pair_nodes =
643
+ case sexp_type
644
+ when :bare_assoc_hash
645
+ self[1]
646
+ when :hash
647
+ self[1][1]
648
+ else
649
+
650
+ end
650
651
  if pair_nodes
651
652
  keys = []
652
- pair_nodes.size.times do |i|
653
- keys << pair_nodes[i][1].to_s
654
- end
653
+ pair_nodes.size.times { |i| keys << pair_nodes[i][1].to_s }
655
654
  keys
656
655
  end
657
656
  end
@@ -673,18 +672,18 @@ class Sexp
673
672
  #
674
673
  # @return [Array] hash values
675
674
  def hash_values
676
- pair_nodes = case sexp_type
677
- when :bare_assoc_hash
678
- self[1]
679
- when :hash
680
- self[1][1]
681
- else
682
- end
675
+ pair_nodes =
676
+ case sexp_type
677
+ when :bare_assoc_hash
678
+ self[1]
679
+ when :hash
680
+ self[1][1]
681
+ else
682
+
683
+ end
683
684
  if pair_nodes
684
685
  values = []
685
- pair_nodes.size.times do |i|
686
- values << pair_nodes[i][2]
687
- end
686
+ pair_nodes.size.times { |i| values << pair_nodes[i][2] }
688
687
  values
689
688
  end
690
689
  end
@@ -709,9 +708,7 @@ class Sexp
709
708
  array_size += 1
710
709
  first_node = s(:args_new) == first_node[1] ? first_node[2] : first_node[1]
711
710
  if :args_add != first_node.sexp_type
712
- if :array == first_node.sexp_type
713
- array_size += first_node.array_size
714
- end
711
+ array_size += first_node.array_size if :array == first_node.sexp_type
715
712
  break
716
713
  end
717
714
  end
@@ -737,21 +734,21 @@ class Sexp
737
734
  def array_values
738
735
  case sexp_type
739
736
  when :array
740
- if nil == self[1]
737
+ if nil == self[1] || %i[words_new qwords_new symbols_new qsymbols_new].include?(self[1].sexp_type)
741
738
  []
742
- elsif [:words_add, :qwords_add, :qsymbols_add].include? self[1].sexp_type
739
+ elsif %i[words_add qwords_add symbols_add qsymbols_add].include? self[1].sexp_type
743
740
  self[1].array_values
744
741
  else
745
742
  arguments.all
746
743
  end
747
- when :words_add, :qwords_add, :qsymbols_add
744
+ when :words_add, :qwords_add, :symbols_add, :qsymbols_add
748
745
  values = []
749
746
  node = self
750
747
  while true
751
- if [:words_add, :qwords_add, :qsymbols_add].include? node.sexp_type
748
+ if %i[words_add qwords_add symbols_add qsymbols_add].include? node.sexp_type
752
749
  values.unshift node[2]
753
750
  node = node[1]
754
- elsif [:words_new, :qwords_new, :qsymbols_new].include? node.sexp_type
751
+ elsif %i[words_new qwords_new symbols_new qsymbols_new].include? node.sexp_type
755
752
  break
756
753
  end
757
754
  end
@@ -808,22 +805,13 @@ class Sexp
808
805
  # @return [String] to_s
809
806
  def to_s
810
807
  case sexp_type
811
- when :string_literal, :xstring_literal, :string_content, :const_ref, :symbol_literal, :symbol,
812
- :args_add_block, :var_ref, :vcall, :var_field,
813
- :@ident, :@tstring_content, :@const, :@ivar, :@kw, :@gvar, :@cvar
808
+ when :string_literal, :xstring_literal, :string_content, :const_ref, :symbol_literal, :symbol, :args_add_block, :var_ref,
809
+ :vcall, :var_field, :@ident, :@tstring_content, :@const, :@ivar, :@kw, :@gvar, :@cvar, :@period
814
810
  self[1].to_s
815
811
  when :string_add
816
- if s(:string_content) == self[1]
817
- self[2].to_s
818
- else
819
- self[1].to_s
820
- end
812
+ s(:string_content) == self[1] ? self[2].to_s : self[1].to_s
821
813
  when :args_add
822
- if s(:args_new) == self[1]
823
- self[2].to_s
824
- else
825
- self[1].to_s
826
- end
814
+ s(:args_new) == self[1] ? self[2].to_s : self[1].to_s
827
815
  when :qwords_add
828
816
  self[2].to_s
829
817
  when :word_add
@@ -839,13 +827,13 @@ class Sexp
839
827
  when :top_const_ref
840
828
  "::#{self[1]}"
841
829
  else
842
- ""
830
+ ''
843
831
  end
844
832
  end
845
833
 
846
834
  # check if the self node is a const.
847
835
  def const?
848
- :@const == self.sexp_type || ([:var_ref, :vcall].include?(self.sexp_type) && :@const == self[1].sexp_type)
836
+ :@const == self.sexp_type || (%i[var_ref vcall].include?(self.sexp_type) && :@const == self[1].sexp_type)
849
837
  end
850
838
 
851
839
  # true
@@ -865,22 +853,33 @@ class Sexp
865
853
  if Sexp === last_node && last_node.size == 2 && last_node.first.is_a?(Integer) && last_node.last.is_a?(Integer)
866
854
  node.delete_at(-1)
867
855
  end
868
- node.sexp_body.each_with_index do |child, index|
869
- if Sexp === child
870
- node[index+1] = child.remove_line_and_column
871
- end
872
- end
856
+ node.sexp_body.each_with_index { |child, index| node[index + 1] = child.remove_line_and_column if Sexp === child }
873
857
  node
874
858
  end
875
859
 
876
860
  # if the return value of these methods is nil, then return CodeAnalyzer::Nil.new instead
877
- [:sexp_type, :receiver, :message, :arguments, :argument, :class_name, :base_class, :method_name,
878
- :body, :block_node, :conditional_statement, :left_value, :right_value].each do |method|
861
+ %i[
862
+ sexp_type
863
+ receiver
864
+ message
865
+ arguments
866
+ argument
867
+ class_name
868
+ base_class
869
+ method_name
870
+ body
871
+ block_node
872
+ conditional_statement
873
+ left_value
874
+ right_value
875
+ ].each do |method|
879
876
  class_eval <<-EOS
880
877
  alias_method :origin_#{method}, :#{method}
881
878
 
882
879
  def #{method}
883
- ret = origin_#{method}
880
+ ret = origin_#{
881
+ method
882
+ }
884
883
  ret.nil? ? CodeAnalyzer::Nil.new : ret
885
884
  end
886
885
  EOS