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.
- checksums.yaml +4 -4
 - data/lib/fasterer/analyzer.rb +0 -1
 - data/lib/fasterer/file_traverser.rb +56 -4
 - data/lib/fasterer/method_call.rb +2 -4
 - data/lib/fasterer/method_definition.rb +5 -7
 - data/lib/fasterer/offense_collector.rb +1 -1
 - data/lib/fasterer/rescue_call.rb +1 -4
 - data/lib/fasterer/scanners/method_call_scanner.rb +2 -4
 - data/lib/fasterer/scanners/method_definition_scanner.rb +5 -7
 - data/lib/fasterer/scanners/offensive.rb +6 -8
 - data/lib/fasterer/version.rb +1 -1
 - data/spec/lib/fasterer/analyzer/01_parallel_assignment_spec.rb +0 -1
 - data/spec/lib/fasterer/analyzer/02_rescue_vs_respond_to_spec.rb +0 -1
 - data/spec/lib/fasterer/analyzer/03_module_eval_spec.rb +0 -1
 - data/spec/lib/fasterer/analyzer/06_shuffle_first_vs_sample_spec.rb +0 -1
 - data/spec/lib/fasterer/analyzer/08_for_loop_vs_each_spec.rb +0 -1
 - data/spec/lib/fasterer/analyzer/09_each_with_index_vs_while_spec.rb +0 -1
 - data/spec/lib/fasterer/analyzer/10_map_flatten_vs_flat_map_spec.rb +0 -1
 - data/spec/lib/fasterer/analyzer/11_reverse_each_vs_reverse_each_spec.rb +0 -1
 - data/spec/lib/fasterer/analyzer/12_select_first_vs_detect_spec.rb +0 -1
 - data/spec/lib/fasterer/analyzer/13_sort_vs_sort_by_spec.rb +0 -1
 - data/spec/lib/fasterer/analyzer/14_fetch_with_argument_vs_block_spec.rb +0 -1
 - data/spec/lib/fasterer/analyzer/15_keys_each_vs_each_key_spec.rb +0 -1
 - data/spec/lib/fasterer/analyzer/16_hash_merge_bang_vs_hash_brackets_spec.rb +0 -1
 - data/spec/lib/fasterer/analyzer/18_block_vs_symbol_to_proc_spec.rb +0 -1
 - data/spec/lib/fasterer/analyzer/19_proc_call_vs_yield_spec.rb +0 -1
 - data/spec/lib/fasterer/analyzer/24_gsub_vs_tr_spec.rb +0 -1
 - data/spec/lib/fasterer/analyzer/25_select_last_vs_reverse_detect_spec.rb +0 -1
 - data/spec/lib/fasterer/analyzer/26_getter_vs_attr_reader_spec.rb +0 -1
 - data/spec/lib/fasterer/analyzer/27_setter_vs_attr_writer_spec.rb +0 -1
 - data/spec/lib/fasterer/analyzer/29_include_vs_cover_on_range_spec.rb +0 -1
 - data/spec/lib/fasterer/analyzer/98_misc_spec.rb +0 -1
 - data/spec/lib/fasterer/analyzer/99_exceptional_files_spec.rb +0 -1
 - data/spec/lib/fasterer/cli_spec.rb +3 -3
 - data/spec/lib/fasterer/file_traverser_spec.rb +1 -1
 - data/spec/lib/fasterer/method_call_spec.rb +0 -56
 - data/spec/lib/fasterer/method_definition_spec.rb +0 -16
 - data/spec/lib/fasterer/rescue_call_spec.rb +0 -14
 - metadata +2 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 4705338687a1a2cff20a0834e7ab76740f1ba62a
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 0355a36451b7635e70b3f670d95b0a76b12bd036
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 6e54c755f4cb43d47d05a9a64a50fb95b592770c7b91d2e442b331a445e0a8089eda864ac604e34e7100f72e6385d6b2a16b46a9c35d32844220e3cb7b11250e
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 32d38035fdeb87eac46f8b54e1fa398f69e37c819eb703cbf94050fe4520f3e0990a69bb7dc76c42455e605cab7678a2af67d603772c0606ff9e8974ead68962
         
     | 
    
        data/lib/fasterer/analyzer.rb
    CHANGED
    
    
| 
         @@ -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
         
     | 
    
        data/lib/fasterer/method_call.rb
    CHANGED
    
    | 
         @@ -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) #  
     | 
| 
      
 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 
     | 
    
         
            -
             
     | 
| 
       89 
     | 
    
         
            -
             
     | 
| 
       90 
     | 
    
         
            -
             
     | 
| 
       91 
     | 
    
         
            -
             
     | 
| 
       92 
     | 
    
         
            -
             
     | 
| 
      
 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
         
     | 
    
        data/lib/fasterer/rescue_call.rb
    CHANGED
    
    | 
         @@ -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?( 
     | 
| 
       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 
     | 
    
         
            -
             
     | 
| 
      
 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 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
      
 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 
     | 
    
         
            -
             
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
      
 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 
     | 
    
         
            -
             
     | 
| 
      
 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 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       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
         
     | 
    
        data/lib/fasterer/version.rb
    CHANGED
    
    
| 
         @@ -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( 
     | 
| 
      
 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( 
     | 
| 
      
 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( 
     | 
| 
      
 25 
     | 
    
         
            +
                    expect($CHILD_STATUS.exitstatus).to eq(1)
         
     | 
| 
       26 
26 
     | 
    
         
             
                  end
         
     | 
| 
       27 
27 
     | 
    
         
             
                end
         
     | 
| 
       28 
28 
     | 
    
         
             
              end
         
     | 
| 
         @@ -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. 
     | 
| 
      
 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- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2015-12-22 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: colorize
         
     |