fasterer 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
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