fasterer 0.2.0 → 0.2.1

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 (39) hide show
  1. checksums.yaml +4 -4
  2. data/lib/fasterer/analyzer.rb +0 -1
  3. data/lib/fasterer/file_traverser.rb +56 -4
  4. data/lib/fasterer/method_call.rb +2 -4
  5. data/lib/fasterer/method_definition.rb +5 -7
  6. data/lib/fasterer/offense_collector.rb +1 -1
  7. data/lib/fasterer/rescue_call.rb +1 -4
  8. data/lib/fasterer/scanners/method_call_scanner.rb +2 -4
  9. data/lib/fasterer/scanners/method_definition_scanner.rb +5 -7
  10. data/lib/fasterer/scanners/offensive.rb +6 -8
  11. data/lib/fasterer/version.rb +1 -1
  12. data/spec/lib/fasterer/analyzer/01_parallel_assignment_spec.rb +0 -1
  13. data/spec/lib/fasterer/analyzer/02_rescue_vs_respond_to_spec.rb +0 -1
  14. data/spec/lib/fasterer/analyzer/03_module_eval_spec.rb +0 -1
  15. data/spec/lib/fasterer/analyzer/06_shuffle_first_vs_sample_spec.rb +0 -1
  16. data/spec/lib/fasterer/analyzer/08_for_loop_vs_each_spec.rb +0 -1
  17. data/spec/lib/fasterer/analyzer/09_each_with_index_vs_while_spec.rb +0 -1
  18. data/spec/lib/fasterer/analyzer/10_map_flatten_vs_flat_map_spec.rb +0 -1
  19. data/spec/lib/fasterer/analyzer/11_reverse_each_vs_reverse_each_spec.rb +0 -1
  20. data/spec/lib/fasterer/analyzer/12_select_first_vs_detect_spec.rb +0 -1
  21. data/spec/lib/fasterer/analyzer/13_sort_vs_sort_by_spec.rb +0 -1
  22. data/spec/lib/fasterer/analyzer/14_fetch_with_argument_vs_block_spec.rb +0 -1
  23. data/spec/lib/fasterer/analyzer/15_keys_each_vs_each_key_spec.rb +0 -1
  24. data/spec/lib/fasterer/analyzer/16_hash_merge_bang_vs_hash_brackets_spec.rb +0 -1
  25. data/spec/lib/fasterer/analyzer/18_block_vs_symbol_to_proc_spec.rb +0 -1
  26. data/spec/lib/fasterer/analyzer/19_proc_call_vs_yield_spec.rb +0 -1
  27. data/spec/lib/fasterer/analyzer/24_gsub_vs_tr_spec.rb +0 -1
  28. data/spec/lib/fasterer/analyzer/25_select_last_vs_reverse_detect_spec.rb +0 -1
  29. data/spec/lib/fasterer/analyzer/26_getter_vs_attr_reader_spec.rb +0 -1
  30. data/spec/lib/fasterer/analyzer/27_setter_vs_attr_writer_spec.rb +0 -1
  31. data/spec/lib/fasterer/analyzer/29_include_vs_cover_on_range_spec.rb +0 -1
  32. data/spec/lib/fasterer/analyzer/98_misc_spec.rb +0 -1
  33. data/spec/lib/fasterer/analyzer/99_exceptional_files_spec.rb +0 -1
  34. data/spec/lib/fasterer/cli_spec.rb +3 -3
  35. data/spec/lib/fasterer/file_traverser_spec.rb +1 -1
  36. data/spec/lib/fasterer/method_call_spec.rb +0 -56
  37. data/spec/lib/fasterer/method_definition_spec.rb +0 -16
  38. data/spec/lib/fasterer/rescue_call_spec.rb +0 -14
  39. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 440ad7aebc217baefb3e0c8f370af06c70b268c0
4
- data.tar.gz: ba9338f1902827973c18dfaf7f00f34149aac042
3
+ metadata.gz: 4705338687a1a2cff20a0834e7ab76740f1ba62a
4
+ data.tar.gz: 0355a36451b7635e70b3f670d95b0a76b12bd036
5
5
  SHA512:
6
- metadata.gz: 797d7f2a6d9cf016dc529bc2354683ef17c73cbeac91879b374913ff1762987fd01a7844fb4a486b73a6bd9640067792210a8d2a9ff810217138a1a2424f5975
7
- data.tar.gz: 39df101b4b4e3693994e2a490f4c40ccba0b4ce067e0a6ed71a503aacbef061f746f56cf1efa5e4159aa36d775bfab4a491fcd1ed4c2451899239d6e9dad5672
6
+ metadata.gz: 6e54c755f4cb43d47d05a9a64a50fb95b592770c7b91d2e442b331a445e0a8089eda864ac604e34e7100f72e6385d6b2a16b46a9c35d32844220e3cb7b11250e
7
+ data.tar.gz: 32d38035fdeb87eac46f8b54e1fa398f69e37c819eb703cbf94050fe4520f3e0990a69bb7dc76c42455e605cab7678a2af67d603772c0606ff9e8974ead68962
@@ -92,6 +92,5 @@ module Fasterer
92
92
  errors.push(rescue_call_scanner.offense)
93
93
  end
94
94
  end
95
-
96
95
  end
97
96
  end
@@ -1,5 +1,6 @@
1
1
  require 'pathname'
2
2
  require 'colorize'
3
+ require 'English'
3
4
 
4
5
  require_relative 'analyzer'
5
6
  require_relative 'config'
@@ -12,11 +13,13 @@ module Fasterer
12
13
 
13
14
  attr_reader :config
14
15
  attr_reader :parse_error_paths
16
+ attr_accessor :offenses_total_count
15
17
 
16
18
  def initialize(path)
17
19
  @path = Pathname(path)
18
20
  @parse_error_paths = []
19
21
  @config = Config.new
22
+ @offenses_total_count = 0
20
23
  end
21
24
 
22
25
  def traverse
@@ -26,6 +29,7 @@ module Fasterer
26
29
  scan_file(@path)
27
30
  end
28
31
  output_parse_errors if parse_error_paths.any?
32
+ output_statistics
29
33
  end
30
34
 
31
35
  def config_file
@@ -36,6 +40,10 @@ module Fasterer
36
40
  !!offenses_found
37
41
  end
38
42
 
43
+ def scannable_files
44
+ all_files - ignored_files
45
+ end
46
+
39
47
  private
40
48
 
41
49
  attr_accessor :offenses_found
@@ -49,13 +57,10 @@ module Fasterer
49
57
  if offenses_grouped_by_type(analyzer).any?
50
58
  output(analyzer)
51
59
  self.offenses_found = true
60
+ self.offenses_total_count += analyzer.errors.count
52
61
  end
53
62
  end
54
63
 
55
- def scannable_files
56
- all_files - ignored_files
57
- end
58
-
59
64
  def all_files
60
65
  Dir["#{@path}/**/*.rb"].map do |ruby_file_path|
61
66
  Pathname(ruby_file_path).relative_path_from(@path).to_s
@@ -85,6 +90,11 @@ module Fasterer
85
90
  puts 'has timed out. Unprocessable files were:'
86
91
  puts '-----------------------------------------------------'
87
92
  puts parse_error_paths
93
+ puts
94
+ end
95
+
96
+ def output_statistics
97
+ puts Statistics.new(self)
88
98
  end
89
99
 
90
100
  def ignored_speedups
@@ -105,4 +115,46 @@ module Fasterer
105
115
  "#{file_path} - #{error_class} - #{error_message}"
106
116
  end
107
117
  end
118
+
119
+ class Statistics
120
+ def initialize(traverser)
121
+ @files_inspected_count = traverser.scannable_files.count
122
+ @offenses_found_count = traverser.offenses_total_count
123
+ @unparsable_files_count = traverser.parse_error_paths.count
124
+ end
125
+
126
+ def to_s
127
+ [
128
+ inspected_files_output,
129
+ offenses_found_output,
130
+ unparsable_files_output
131
+ ].compact.join(', ')
132
+ end
133
+
134
+ def inspected_files_output
135
+ "#{@files_inspected_count} #{pluralize(@files_inspected_count, 'file')} inspected"
136
+ .colorize(:green)
137
+ end
138
+
139
+ def offenses_found_output
140
+ "#{@offenses_found_count} #{pluralize(@offenses_found_count, 'offense')} detected"
141
+ .colorize(:red)
142
+ end
143
+
144
+ def unparsable_files_output
145
+ return if @unparsable_files_count.zero?
146
+ "#{@unparsable_files_count} unparsable #{pluralize(@unparsable_files_count, 'file')} found"
147
+ .colorize(:red)
148
+ end
149
+
150
+ def pluralize(n, singular, plural = nil)
151
+ if n == 1
152
+ "#{singular}"
153
+ elsif plural
154
+ "#{plural}"
155
+ else
156
+ "#{singular}s"
157
+ end
158
+ end
159
+ end
108
160
  end
@@ -64,14 +64,12 @@ module Fasterer
64
64
  end
65
65
 
66
66
  def set_block_body
67
- if has_block?
68
- @block_body = element[3]
69
- end
67
+ @block_body = element[3] if has_block?
70
68
  end
71
69
 
72
70
  # TODO: write specs for lambdas and procs
73
71
  def set_block_argument_names
74
- @block_argument_names = if has_block? && element[2].is_a?(Sexp) # hack for lambdas
72
+ @block_argument_names = if has_block? && element[2].is_a?(Sexp) # HACK: for lambdas
75
73
  element[2].drop(1).map { |argument| argument }
76
74
  end || []
77
75
  end
@@ -56,7 +56,6 @@ module Fasterer
56
56
  end
57
57
 
58
58
  class MethodDefinitionArgument
59
-
60
59
  attr_reader :element, :name, :type
61
60
 
62
61
  def initialize(element)
@@ -85,13 +84,12 @@ module Fasterer
85
84
 
86
85
  def set_argument_type
87
86
  @type = if element.is_a?(Symbol)
88
- :regular_argument
89
- elsif element.is_a?(Sexp) && element.sexp_type == :lasgn
90
- :default_argument
91
- elsif element.is_a?(Sexp) && element.sexp_type == :kwarg
92
- :keyword_argument
87
+ :regular_argument
88
+ elsif element.is_a?(Sexp) && element.sexp_type == :lasgn
89
+ :default_argument
90
+ elsif element.is_a?(Sexp) && element.sexp_type == :kwarg
91
+ :keyword_argument
93
92
  end
94
93
  end
95
94
  end
96
-
97
95
  end
@@ -12,6 +12,6 @@ module Fasterer
12
12
  @offenses.select { |offense| offense.name == offense_name }
13
13
  end
14
14
 
15
- def_delegators :@offenses, :push, :any?, :each, :group_by
15
+ def_delegators :@offenses, :push, :any?, :each, :group_by, :count
16
16
  end
17
17
  end
@@ -15,11 +15,8 @@ module Fasterer
15
15
  return if element[1].sexp_type != :array
16
16
 
17
17
  @rescue_classes = element[1].drop(1).map do |rescue_reference|
18
- if rescue_reference.sexp_type == :const
19
- rescue_reference[1]
20
- end
18
+ rescue_reference[1] if rescue_reference.sexp_type == :const
21
19
  end.compact
22
20
  end
23
-
24
21
  end
25
22
  end
@@ -50,9 +50,7 @@ module Fasterer
50
50
  first_argument = method_call.arguments.first
51
51
  return unless first_argument && first_argument.value.is_a?(String)
52
52
 
53
- if first_argument.value.include?("def")
54
- add_offense(:module_eval)
55
- end
53
+ add_offense(:module_eval) if first_argument.value.include?('def')
56
54
  end
57
55
 
58
56
  def check_gsub_offense
@@ -62,7 +60,7 @@ module Fasterer
62
60
  return if first_argument.nil? || second_argument.nil?
63
61
 
64
62
  if first_argument.value.is_a?(String) && first_argument.value.size == 1 &&
65
- second_argument.value.is_a?(String) && second_argument.value.size == 1
63
+ second_argument.value.is_a?(String) && second_argument.value.size == 1
66
64
 
67
65
  add_offense(:gsub_vs_tr)
68
66
  end
@@ -31,8 +31,8 @@ module Fasterer
31
31
  method_call = MethodCall.new(element)
32
32
 
33
33
  if method_call.receiver.is_a?(Fasterer::VariableReference) &&
34
- method_call.receiver.name == method_definition.block_argument_name &&
35
- method_call.method_name == :call
34
+ method_call.receiver.name == method_definition.block_argument_name &&
35
+ method_call.method_name == :call
36
36
 
37
37
  add_offense(:proc_call_vs_yield) && return
38
38
  end
@@ -63,8 +63,8 @@ module Fasterer
63
63
  return if first_argument.type != :regular_argument
64
64
 
65
65
  if method_definition.body.first.sexp_type == :iasgn &&
66
- method_definition.body.first[1].to_s == "@#{method_definition.name.to_s[0..-2]}" &&
67
- method_definition.body.first[2][1] == first_argument.name
66
+ method_definition.body.first[1].to_s == "@#{method_definition.name.to_s[0..-2]}" &&
67
+ method_definition.body.first[2][1] == first_argument.name
68
68
 
69
69
  add_offense(:setter_vs_attr_writer)
70
70
  end
@@ -75,12 +75,10 @@ module Fasterer
75
75
  return if method_definition.body.size != 1
76
76
 
77
77
  if method_definition.body.first.sexp_type == :ivar &&
78
- method_definition.body.first[1].to_s == "@#{method_definition.name}"
78
+ method_definition.body.first[1].to_s == "@#{method_definition.name}"
79
79
 
80
80
  add_offense(:getter_vs_attr_reader)
81
81
  end
82
82
  end
83
-
84
83
  end
85
-
86
84
  end
@@ -2,7 +2,6 @@ require 'fasterer/offense'
2
2
 
3
3
  module Fasterer
4
4
  module Offensive
5
-
6
5
  attr_accessor :offense
7
6
 
8
7
  def offensive?
@@ -13,13 +12,12 @@ module Fasterer
13
12
 
14
13
  private
15
14
 
16
- def add_offense(offense_name, element_line_number = element.line)
17
- self.offense = Fasterer::Offense.new(offense_name, element_line_number)
18
- end
19
-
20
- def check_offense
21
- raise NotImplementedError
22
- end
15
+ def add_offense(offense_name, element_line_number = element.line)
16
+ self.offense = Fasterer::Offense.new(offense_name, element_line_number)
17
+ end
23
18
 
19
+ def check_offense
20
+ fail NotImplementedError
21
+ end
24
22
  end
25
23
  end
@@ -1,3 +1,3 @@
1
1
  module Fasterer
2
- VERSION = '0.2.0'
2
+ VERSION = '0.2.1'
3
3
  end
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Fasterer::Analyzer do
4
-
5
4
  let(:test_file_path) { RSpec.root.join('support', 'analyzer', '01_parallel_assignment.rb') }
6
5
 
7
6
  it 'should detect parallel assignment 2 times' do
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Fasterer::Analyzer do
4
-
5
4
  let(:test_file_path) { RSpec.root.join('support', 'analyzer', '02_rescue_vs_respond_to.rb') }
6
5
 
7
6
  it 'should detect rescue NoMethodError' do
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Fasterer::Analyzer do
4
-
5
4
  let(:test_file_path) { RSpec.root.join('support', 'analyzer', '03_module_eval.rb') }
6
5
 
7
6
  it 'should detect module eval' do
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Fasterer::Analyzer do
4
-
5
4
  let(:test_file_path) { RSpec.root.join('support', 'analyzer', '06_shuffle_first_vs_sample.rb') }
6
5
 
7
6
  it 'should detect a for loop' do
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Fasterer::Analyzer do
4
-
5
4
  let(:test_file_path) { RSpec.root.join('support', 'analyzer', '08_for_loop_vs_each.rb') }
6
5
 
7
6
  it 'should detect a for loop' do
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Fasterer::Analyzer do
4
-
5
4
  let(:test_file_path) { RSpec.root.join('support', 'analyzer', '09_each_with_index_vs_while.rb') }
6
5
 
7
6
  it 'should detect a for loop' do
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Fasterer::Analyzer do
4
-
5
4
  let(:test_file_path) { RSpec.root.join('support', 'analyzer', '10_map_flatten_vs_flat_map.rb') }
6
5
 
7
6
  it 'should detect a map{}.flatten(1) ' do
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Fasterer::Analyzer do
4
-
5
4
  let(:test_file_path) { RSpec.root.join('support', 'analyzer', '11_reverse_each_vs_reverse_each.rb') }
6
5
 
7
6
  it 'should detect a for loop' do
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Fasterer::Analyzer do
4
-
5
4
  let(:test_file_path) { RSpec.root.join('support', 'analyzer', '12_select_first_vs_detect.rb') }
6
5
 
7
6
  it 'should detect sort once' do
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Fasterer::Analyzer do
4
-
5
4
  let(:test_file_path) { RSpec.root.join('support', 'analyzer', '13_sort_vs_sort_by.rb') }
6
5
 
7
6
  it 'should detect sort once' do
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Fasterer::Analyzer do
4
-
5
4
  let(:test_file_path) { RSpec.root.join('support', 'analyzer', '14_fetch_with_argument_vs_block.rb') }
6
5
 
7
6
  it 'should detect keys fetch with argument once' do
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Fasterer::Analyzer do
4
-
5
4
  let(:test_file_path) { RSpec.root.join('support', 'analyzer', '15_keys_each_vs_each_key.rb') }
6
5
 
7
6
  it 'should detect keys each 3 times' do
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Fasterer::Analyzer do
4
-
5
4
  let(:test_file_path) { RSpec.root.join('support', 'analyzer', '16_hash_merge_bang_vs_hash_brackets.rb') }
6
5
 
7
6
  it 'should detect keys each 3 times' do
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Fasterer::Analyzer do
4
-
5
4
  let(:test_file_path) { RSpec.root.join('support', 'analyzer', '18_block_vs_symbol_to_proc.rb') }
6
5
 
7
6
  it 'should block that could be called with symbol 2 times' do
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Fasterer::Analyzer do
4
-
5
4
  let(:test_file_path) { RSpec.root.join('support', 'analyzer', '19_proc_call_vs_yield.rb') }
6
5
 
7
6
  it 'should detect sort once' do
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Fasterer::Analyzer do
4
-
5
4
  let(:test_file_path) { RSpec.root.join('support', 'analyzer', '24_gsub_vs_tr.rb') }
6
5
 
7
6
  it 'should detect gsub 4 times' do
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Fasterer::Analyzer do
4
-
5
4
  let(:test_file_path) { RSpec.root.join('support', 'analyzer', '25_select_last_vs_reverse_detect.rb') }
6
5
 
7
6
  it 'should detect select last once' do
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Fasterer::Analyzer do
4
-
5
4
  let(:test_file_path) { RSpec.root.join('support', 'analyzer', '26_getter_vs_attr_reader.rb') }
6
5
 
7
6
  it 'should detect 2 getters' do
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Fasterer::Analyzer do
4
-
5
4
  let(:test_file_path) { RSpec.root.join('support', 'analyzer', '27_setter_vs_attr_writer.rb') }
6
5
 
7
6
  it 'should detect 2 setters' do
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Fasterer::Analyzer do
4
-
5
4
  let(:test_file_path) do
6
5
  RSpec.root.join('support', 'analyzer', '29_include_vs_cover_on_range.rb')
7
6
  end
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Fasterer::Analyzer do
4
-
5
4
  let(:test_file_path) { RSpec.root.join('support', 'analyzer', '98_misc.rb') }
6
5
 
7
6
  it 'should detect gsub 4 times' do
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Fasterer::Analyzer do
4
-
5
4
  let(:test_file_path) { RSpec.root.join('support', 'analyzer', '99_exceptional_files.rb') }
6
5
 
7
6
  it 'diacritics should not raise an error' do
@@ -8,13 +8,13 @@ describe Fasterer::FileTraverser do
8
8
  context 'success' do
9
9
  it 'when no files exist' do
10
10
  `#{fasterer_bin}`
11
- expect($?.exitstatus).to eq(0)
11
+ expect($CHILD_STATUS.exitstatus).to eq(0)
12
12
  end
13
13
 
14
14
  it 'when no files with offenses exist' do
15
15
  create_file('user.rb', '[].sample')
16
16
  `#{fasterer_bin}`
17
- expect($?.exitstatus).to eq(0)
17
+ expect($CHILD_STATUS.exitstatus).to eq(0)
18
18
  end
19
19
  end
20
20
 
@@ -22,7 +22,7 @@ describe Fasterer::FileTraverser do
22
22
  it 'when file with offenses exists' do
23
23
  create_file('user.rb', '[].shuffle.first')
24
24
  `#{fasterer_bin}`
25
- expect($?.exitstatus).to eq(1)
25
+ expect($CHILD_STATUS.exitstatus).to eq(1)
26
26
  end
27
27
  end
28
28
  end
@@ -44,7 +44,7 @@ describe Fasterer::FileTraverser do
44
44
  context 'with speedups content but no exclude_paths' do
45
45
  let(:config_file_content) do
46
46
  "speedups:\n"\
47
- " keys_each_vs_each_key: true"
47
+ ' keys_each_vs_each_key: true'
48
48
  end
49
49
 
50
50
  before(:each) do
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Fasterer::MethodCall do
4
-
5
4
  let(:ripper) do
6
5
  Fasterer::Parser.parse(code)
7
6
  end
@@ -13,7 +12,6 @@ describe Fasterer::MethodCall do
13
12
  describe 'with explicit receiver' do
14
13
  describe 'without arguments, without block, called with parentheses' do
15
14
  describe 'method call on a constant' do
16
-
17
15
  let(:code) { 'User.hello()' }
18
16
 
19
17
  # This is where the :call token will be recognized.
@@ -23,11 +21,9 @@ describe Fasterer::MethodCall do
23
21
  expect(method_call.method_name).to eq(:hello)
24
22
  expect(method_call.arguments).to be_empty
25
23
  end
26
-
27
24
  end
28
25
 
29
26
  describe 'method call on a integer' do
30
-
31
27
  let(:code) { '1.hello()' }
32
28
 
33
29
  # This is where the :call token will be recognized.
@@ -37,11 +33,9 @@ describe Fasterer::MethodCall do
37
33
  expect(method_call.method_name).to eq(:hello)
38
34
  expect(method_call.arguments).to be_empty
39
35
  end
40
-
41
36
  end
42
37
 
43
38
  describe 'method call on a string' do
44
-
45
39
  let(:code) { "'hello'.hello()" }
46
40
 
47
41
  let(:call_element) { ripper }
@@ -50,11 +44,9 @@ describe Fasterer::MethodCall do
50
44
  expect(method_call.method_name).to eq(:hello)
51
45
  expect(method_call.arguments).to be_empty
52
46
  end
53
-
54
47
  end
55
48
 
56
49
  describe 'method call on a variable' do
57
-
58
50
  let(:code) do
59
51
  "number_one = 1\n"\
60
52
  'number_one.hello()'
@@ -68,11 +60,9 @@ describe Fasterer::MethodCall do
68
60
  expect(method_call.receiver).to be_a(Fasterer::VariableReference)
69
61
  expect(method_call.receiver.name).to eq(:number_one)
70
62
  end
71
-
72
63
  end
73
64
 
74
65
  describe 'method call on a method' do
75
-
76
66
  let(:code) { '1.hi(2).hello()' }
77
67
 
78
68
  let(:call_element) { ripper }
@@ -83,13 +73,11 @@ describe Fasterer::MethodCall do
83
73
  expect(method_call.receiver.name).to eq(:hi)
84
74
  expect(method_call.arguments).to be_empty
85
75
  end
86
-
87
76
  end
88
77
  end
89
78
 
90
79
  describe 'without arguments, without block, called without parentheses' do
91
80
  describe 'method call on a constant' do
92
-
93
81
  let(:code) { 'User.hello' }
94
82
 
95
83
  let(:call_element) { ripper }
@@ -98,11 +86,9 @@ describe Fasterer::MethodCall do
98
86
  expect(method_call.method_name).to eq(:hello)
99
87
  expect(method_call.arguments).to be_empty
100
88
  end
101
-
102
89
  end
103
90
 
104
91
  describe 'method call on a integer' do
105
-
106
92
  let(:code) { '1.hello' }
107
93
 
108
94
  # This is where the :call token will be recognized.
@@ -112,11 +98,9 @@ describe Fasterer::MethodCall do
112
98
  expect(method_call.method_name).to eq(:hello)
113
99
  expect(method_call.arguments).to be_empty
114
100
  end
115
-
116
101
  end
117
102
 
118
103
  describe 'method call on a string' do
119
-
120
104
  let(:code) { "'hello'.hello" }
121
105
 
122
106
  let(:call_element) { ripper }
@@ -125,11 +109,9 @@ describe Fasterer::MethodCall do
125
109
  expect(method_call.method_name).to eq(:hello)
126
110
  expect(method_call.arguments).to be_empty
127
111
  end
128
-
129
112
  end
130
113
 
131
114
  describe 'method call on a variable' do
132
-
133
115
  let(:code) do
134
116
  "number_one = 1\n"\
135
117
  'number_one.hello'
@@ -143,11 +125,9 @@ describe Fasterer::MethodCall do
143
125
  expect(method_call.receiver).to be_a(Fasterer::VariableReference)
144
126
  expect(method_call.receiver.name).to eq(:number_one)
145
127
  end
146
-
147
128
  end
148
129
 
149
130
  describe 'method call on a method' do
150
-
151
131
  let(:code) { '1.hi(2).hello' }
152
132
 
153
133
  let(:call_element) { ripper }
@@ -158,14 +138,11 @@ describe Fasterer::MethodCall do
158
138
  expect(method_call.receiver.name).to eq(:hi)
159
139
  expect(method_call.arguments).to be_empty
160
140
  end
161
-
162
141
  end
163
142
  end
164
143
 
165
144
  describe 'with do end block' do
166
-
167
145
  describe 'and no arguments, without block parameter' do
168
-
169
146
  let(:code) do
170
147
  <<-code
171
148
  number_one.fetch do
@@ -184,11 +161,9 @@ describe Fasterer::MethodCall do
184
161
  expect(method_call.block_argument_names.count).to be(0)
185
162
  expect(method_call.receiver).to be_a(Fasterer::MethodCall)
186
163
  end
187
-
188
164
  end
189
165
 
190
166
  describe 'and no arguments, with block parameter' do
191
-
192
167
  let(:code) do
193
168
  <<-code
194
169
  number_one.fetch do |el|
@@ -208,11 +183,9 @@ describe Fasterer::MethodCall do
208
183
  expect(method_call.block_argument_names.first).to be(:el)
209
184
  expect(method_call.receiver).to be_a(Fasterer::MethodCall)
210
185
  end
211
-
212
186
  end
213
187
 
214
188
  describe 'and no arguments, with block parameter' do
215
-
216
189
  let(:code) do
217
190
  <<-code
218
191
  number_one.fetch do |el, tip|
@@ -233,11 +206,9 @@ describe Fasterer::MethodCall do
233
206
  expect(method_call.block_argument_names.last).to be(:tip)
234
207
  expect(method_call.receiver).to be_a(Fasterer::MethodCall)
235
208
  end
236
-
237
209
  end
238
210
 
239
211
  describe 'and one argument within parentheses' do
240
-
241
212
  let(:code) do
242
213
  <<-code
243
214
  number_one = 1
@@ -256,13 +227,11 @@ describe Fasterer::MethodCall do
256
227
  expect(method_call.has_block?).to be
257
228
  expect(method_call.receiver).to be_a(Fasterer::VariableReference)
258
229
  end
259
-
260
230
  end
261
231
  end
262
232
 
263
233
  describe 'with curly block' do
264
234
  describe 'in one line' do
265
-
266
235
  let(:code) do
267
236
  <<-code
268
237
  number_one = 1
@@ -278,11 +247,9 @@ describe Fasterer::MethodCall do
278
247
  expect(method_call.has_block?).to be
279
248
  expect(method_call.receiver).to be_a(Fasterer::VariableReference)
280
249
  end
281
-
282
250
  end
283
251
 
284
252
  describe 'multi lined' do
285
-
286
253
  let(:code) do
287
254
  <<-code
288
255
  number_one = 1
@@ -301,14 +268,11 @@ describe Fasterer::MethodCall do
301
268
  expect(method_call.has_block?).to be
302
269
  expect(method_call.receiver).to be_a(Fasterer::VariableReference)
303
270
  end
304
-
305
271
  end
306
272
  end
307
273
 
308
274
  describe 'with arguments, without block, called with parentheses' do
309
-
310
275
  describe 'method call with an argument' do
311
-
312
276
  let(:code) { '{}.fetch(:writing)' }
313
277
 
314
278
  let(:call_element) { ripper }
@@ -318,13 +282,11 @@ describe Fasterer::MethodCall do
318
282
  expect(method_call.arguments.count).to eq(1)
319
283
  expect(method_call.arguments.first.type).to eq(:lit)
320
284
  end
321
-
322
285
  end
323
286
  end
324
287
 
325
288
  describe 'arguments without parenthesis' do
326
289
  describe 'method call with an argument' do
327
-
328
290
  let(:code) { '{}.fetch :writing, :listening' }
329
291
 
330
292
  let(:call_element) { ripper }
@@ -335,7 +297,6 @@ describe Fasterer::MethodCall do
335
297
  expect(method_call.arguments[0].type).to eq(:lit)
336
298
  expect(method_call.arguments[1].type).to eq(:lit)
337
299
  end
338
-
339
300
  end
340
301
  end
341
302
  end
@@ -344,7 +305,6 @@ describe Fasterer::MethodCall do
344
305
  end
345
306
 
346
307
  describe 'method call with an argument and a block' do
347
-
348
308
  let(:code) do
349
309
  <<-code
350
310
  number_one = 1
@@ -361,11 +321,9 @@ describe Fasterer::MethodCall do
361
321
  expect(method_call.has_block?).to be
362
322
  expect(method_call.receiver).to be_a(Fasterer::VariableReference)
363
323
  end
364
-
365
324
  end
366
325
 
367
326
  describe 'method call without an explicit receiver' do
368
-
369
327
  let(:code) { 'fetch(:writing, :listening)' }
370
328
 
371
329
  let(:call_element) { ripper }
@@ -377,11 +335,9 @@ describe Fasterer::MethodCall do
377
335
  expect(method_call.arguments[1].type).to eq(:lit)
378
336
  expect(method_call.receiver).to be_nil
379
337
  end
380
-
381
338
  end
382
339
 
383
340
  describe 'method call without an explicit receiver and without brackets' do
384
-
385
341
  let(:code) { 'fetch :writing, :listening' }
386
342
 
387
343
  let(:call_element) { ripper }
@@ -393,11 +349,9 @@ describe Fasterer::MethodCall do
393
349
  expect(method_call.arguments[1].type).to eq(:lit)
394
350
  expect(method_call.receiver).to be_nil
395
351
  end
396
-
397
352
  end
398
353
 
399
354
  describe 'method call without an explicit receiver and without brackets and do end' do
400
-
401
355
  let(:code) do
402
356
  <<-code
403
357
  "fetch :writing do\n"\
@@ -414,11 +368,9 @@ describe Fasterer::MethodCall do
414
368
  # expect(method_call.arguments[1].type).to eq(:symbol_literal)
415
369
  # expect(method_call.receiver).to be_nil
416
370
  end
417
-
418
371
  end
419
372
 
420
373
  describe 'method call with two arguments' do
421
-
422
374
  let(:code) do
423
375
  "number_one = 1\n"\
424
376
  'number_one.fetch(:writing, :zumba)'
@@ -433,11 +385,9 @@ describe Fasterer::MethodCall do
433
385
  expect(method_call.arguments[1].type).to eq(:lit)
434
386
  expect(method_call.receiver).to be_a(Fasterer::VariableReference)
435
387
  end
436
-
437
388
  end
438
389
 
439
390
  describe 'method call with a regex argument' do
440
-
441
391
  let(:code) { '{}.fetch(/.*/)' }
442
392
 
443
393
  let(:call_element) { ripper }
@@ -448,11 +398,9 @@ describe Fasterer::MethodCall do
448
398
  expect(method_call.arguments[0].type).to eq(:lit)
449
399
  expect(method_call.arguments[0].value).to be_a(Regexp)
450
400
  end
451
-
452
401
  end
453
402
 
454
403
  describe 'method call with a integer argument' do
455
-
456
404
  let(:code) { '[].flatten(1)' }
457
405
 
458
406
  let(:call_element) { ripper }
@@ -463,7 +411,6 @@ describe Fasterer::MethodCall do
463
411
  expect(method_call.arguments[0].type).to eq(:lit)
464
412
  expect(method_call.arguments[0].value).to eq(1)
465
413
  end
466
-
467
414
  end
468
415
 
469
416
  describe 'method call with symbol to proc argument' do
@@ -480,7 +427,6 @@ describe Fasterer::MethodCall do
480
427
  end
481
428
 
482
429
  describe 'method call with equals operator' do
483
-
484
430
  let(:code) { 'method_call_with_equals.rb' }
485
431
 
486
432
  let(:call_element) { ripper.drop(1).first.first[1] }
@@ -490,7 +436,5 @@ describe Fasterer::MethodCall do
490
436
  # expect(method_call.receiver).to be_a(Fasterer::MethodCall)
491
437
  # expect(method_call.receiver.name).to eq('hi')
492
438
  end
493
-
494
439
  end
495
-
496
440
  end
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Fasterer::MethodDefinition do
4
-
5
4
  let(:def_element) do
6
5
  Fasterer::Parser.parse(File.read(RSpec.root.join('support', 'method_definition', file_name)))
7
6
  end
@@ -11,40 +10,33 @@ describe Fasterer::MethodDefinition do
11
10
  end
12
11
 
13
12
  describe 'method with no arguments' do
14
-
15
13
  let(:file_name) { 'simple_method.rb' }
16
14
 
17
15
  it 'should not detect block' do
18
16
  expect(method_definition.method_name).to eq(:hello)
19
17
  expect(method_definition.has_block?).to eq(false)
20
18
  end
21
-
22
19
  end
23
20
 
24
21
  describe 'method with no arguments and omitted parenthesis' do
25
-
26
22
  let(:file_name) { 'simple_method_omitted_parenthesis.rb' }
27
23
 
28
24
  it 'should not detect block' do
29
25
  expect(method_definition.method_name).to eq(:hello)
30
26
  expect(method_definition.has_block?).to eq(false)
31
27
  end
32
-
33
28
  end
34
29
 
35
30
  describe 'method with one argument' do
36
-
37
31
  let(:file_name) { 'simple_method_with_argument.rb' }
38
32
 
39
33
  it 'should not detect block' do
40
34
  expect(method_definition.method_name).to eq(:hello)
41
35
  expect(method_definition.has_block?).to eq(false)
42
36
  end
43
-
44
37
  end
45
38
 
46
39
  describe 'method with a block' do
47
-
48
40
  let(:file_name) { 'method_with_block.rb' }
49
41
 
50
42
  it 'should detect block' do
@@ -52,11 +44,9 @@ describe Fasterer::MethodDefinition do
52
44
  expect(method_definition.has_block?).to eq(true)
53
45
  expect(method_definition.block_argument_name).to eq(:block)
54
46
  end
55
-
56
47
  end
57
48
 
58
49
  describe 'method with an argument and a block' do
59
-
60
50
  let(:file_name) { 'method_with_argument_and_block.rb' }
61
51
 
62
52
  it 'should detect block' do
@@ -64,11 +54,9 @@ describe Fasterer::MethodDefinition do
64
54
  expect(method_definition.has_block?).to eq(true)
65
55
  expect(method_definition.block_argument_name).to eq(:block)
66
56
  end
67
-
68
57
  end
69
58
 
70
59
  describe 'method with an splat argument and a block' do
71
-
72
60
  let(:file_name) { 'method_with_splat_and_block.rb' }
73
61
 
74
62
  it 'should detect block' do
@@ -76,18 +64,14 @@ describe Fasterer::MethodDefinition do
76
64
  expect(method_definition.has_block?).to eq(true)
77
65
  expect(method_definition.block_argument_name).to eq(:block)
78
66
  end
79
-
80
67
  end
81
68
 
82
69
  describe 'method with an default argument' do
83
-
84
70
  let(:file_name) { 'method_with_default_argument.rb' }
85
71
 
86
72
  it 'should not detect block' do
87
73
  expect(method_definition.method_name).to eq(:hello)
88
74
  expect(method_definition.has_block?).to eq(false)
89
75
  end
90
-
91
76
  end
92
-
93
77
  end
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Fasterer::RescueCall do
4
-
5
4
  let(:file_path) { RSpec.root.join('support', 'rescue_call', file_name) }
6
5
 
7
6
  let(:rescue_element) do
@@ -14,63 +13,50 @@ describe Fasterer::RescueCall do
14
13
  end
15
14
 
16
15
  describe 'plain rescue call' do
17
-
18
16
  let(:file_name) { 'plain_rescue.rb' }
19
17
 
20
18
  it 'should detect constant' do
21
19
  expect(rescue_call.rescue_classes).to eq([])
22
20
  end
23
-
24
21
  end
25
22
 
26
23
  describe 'rescue call with class' do
27
-
28
24
  let(:file_name) { 'rescue_with_class.rb' }
29
25
 
30
26
  it 'should detect integer' do
31
27
  expect(rescue_call.rescue_classes).to eq([:NoMethodError])
32
28
  end
33
-
34
29
  end
35
30
 
36
31
  describe 'rescue call with class and variable' do
37
-
38
32
  let(:file_name) { 'rescue_with_class_and_variable.rb' }
39
33
 
40
34
  it 'should detect string' do
41
35
  expect(rescue_call.rescue_classes).to eq([:NoMethodError])
42
36
  end
43
-
44
37
  end
45
38
 
46
39
  describe 'rescue call with variable' do
47
-
48
40
  let(:file_name) { 'rescue_with_variable.rb' }
49
41
 
50
42
  it 'should detect variable' do
51
43
  expect(rescue_call.rescue_classes).to eq([])
52
44
  end
53
-
54
45
  end
55
46
 
56
47
  describe 'rescue call with multiple classes' do
57
-
58
48
  let(:file_name) { 'rescue_with_multiple_classes.rb' }
59
49
 
60
50
  it 'should detect method' do
61
51
  expect(rescue_call.rescue_classes).to eq([:NoMethodError, :StandardError])
62
52
  end
63
-
64
53
  end
65
54
 
66
55
  describe 'rescue call with multiple classes and variable' do
67
-
68
56
  let(:file_name) { 'rescue_with_multiple_classes_and_variable.rb' }
69
57
 
70
58
  it 'should detect method' do
71
59
  expect(rescue_call.rescue_classes).to eq([:NoMethodError, :StandardError])
72
60
  end
73
-
74
61
  end
75
-
76
62
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fasterer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Damir Svrtan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-21 00:00:00.000000000 Z
11
+ date: 2015-12-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize