sabat-rubocop 0.9.0
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.
- data/.gitignore +50 -0
 - data/.rspec +1 -0
 - data/.rubocop.yml +7 -0
 - data/.travis.yml +7 -0
 - data/.yardopts +2 -0
 - data/CHANGELOG.md +268 -0
 - data/CONTRIBUTING.md +16 -0
 - data/Gemfile +7 -0
 - data/LICENSE.txt +20 -0
 - data/README.md +324 -0
 - data/Rakefile +29 -0
 - data/bin/rubocop +22 -0
 - data/config/default.yml +58 -0
 - data/config/disabled.yml +5 -0
 - data/config/enabled.yml +403 -0
 - data/lib/rubocop.rb +116 -0
 - data/lib/rubocop/cli.rb +407 -0
 - data/lib/rubocop/config.rb +250 -0
 - data/lib/rubocop/config_store.rb +39 -0
 - data/lib/rubocop/cop/cop.rb +138 -0
 - data/lib/rubocop/cop/lint/assignment_in_condition.rb +54 -0
 - data/lib/rubocop/cop/lint/end_alignment.rb +189 -0
 - data/lib/rubocop/cop/lint/end_in_method.rb +30 -0
 - data/lib/rubocop/cop/lint/ensure_return.rb +22 -0
 - data/lib/rubocop/cop/lint/eval.rb +22 -0
 - data/lib/rubocop/cop/lint/handle_exceptions.rb +20 -0
 - data/lib/rubocop/cop/lint/literal_in_condition.rb +81 -0
 - data/lib/rubocop/cop/lint/loop.rb +29 -0
 - data/lib/rubocop/cop/lint/rescue_exception.rb +29 -0
 - data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +34 -0
 - data/lib/rubocop/cop/lint/unreachable_code.rb +35 -0
 - data/lib/rubocop/cop/lint/unused_local_variable.rb +32 -0
 - data/lib/rubocop/cop/lint/void.rb +58 -0
 - data/lib/rubocop/cop/offence.rb +136 -0
 - data/lib/rubocop/cop/rails/validation.rb +30 -0
 - data/lib/rubocop/cop/style/access_control.rb +58 -0
 - data/lib/rubocop/cop/style/alias.rb +28 -0
 - data/lib/rubocop/cop/style/align_parameters.rb +39 -0
 - data/lib/rubocop/cop/style/and_or.rb +45 -0
 - data/lib/rubocop/cop/style/ascii_comments.rb +21 -0
 - data/lib/rubocop/cop/style/ascii_identifiers.rb +22 -0
 - data/lib/rubocop/cop/style/attr.rb +20 -0
 - data/lib/rubocop/cop/style/avoid_class_vars.rb +20 -0
 - data/lib/rubocop/cop/style/avoid_for.rb +18 -0
 - data/lib/rubocop/cop/style/avoid_global_vars.rb +65 -0
 - data/lib/rubocop/cop/style/avoid_perl_backrefs.rb +21 -0
 - data/lib/rubocop/cop/style/avoid_perlisms.rb +50 -0
 - data/lib/rubocop/cop/style/begin_block.rb +18 -0
 - data/lib/rubocop/cop/style/block_comments.rb +20 -0
 - data/lib/rubocop/cop/style/block_nesting.rb +47 -0
 - data/lib/rubocop/cop/style/blocks.rb +27 -0
 - data/lib/rubocop/cop/style/case_equality.rb +22 -0
 - data/lib/rubocop/cop/style/case_indentation.rb +28 -0
 - data/lib/rubocop/cop/style/character_literal.rb +37 -0
 - data/lib/rubocop/cop/style/class_and_module_camel_case.rb +33 -0
 - data/lib/rubocop/cop/style/class_methods.rb +22 -0
 - data/lib/rubocop/cop/style/collection_methods.rb +56 -0
 - data/lib/rubocop/cop/style/colon_method_call.rb +29 -0
 - data/lib/rubocop/cop/style/constant_name.rb +31 -0
 - data/lib/rubocop/cop/style/def_parentheses.rb +70 -0
 - data/lib/rubocop/cop/style/documentation.rb +58 -0
 - data/lib/rubocop/cop/style/dot_position.rb +25 -0
 - data/lib/rubocop/cop/style/empty_line_between_defs.rb +26 -0
 - data/lib/rubocop/cop/style/empty_lines.rb +40 -0
 - data/lib/rubocop/cop/style/empty_literal.rb +53 -0
 - data/lib/rubocop/cop/style/encoding.rb +29 -0
 - data/lib/rubocop/cop/style/end_block.rb +18 -0
 - data/lib/rubocop/cop/style/end_of_line.rb +23 -0
 - data/lib/rubocop/cop/style/favor_join.rb +29 -0
 - data/lib/rubocop/cop/style/favor_modifier.rb +118 -0
 - data/lib/rubocop/cop/style/favor_sprintf.rb +28 -0
 - data/lib/rubocop/cop/style/favor_unless_over_negated_if.rb +54 -0
 - data/lib/rubocop/cop/style/hash_syntax.rb +47 -0
 - data/lib/rubocop/cop/style/if_then_else.rb +29 -0
 - data/lib/rubocop/cop/style/if_with_semicolon.rb +20 -0
 - data/lib/rubocop/cop/style/lambda.rb +47 -0
 - data/lib/rubocop/cop/style/leading_comment_space.rb +25 -0
 - data/lib/rubocop/cop/style/line_continuation.rb +26 -0
 - data/lib/rubocop/cop/style/line_length.rb +30 -0
 - data/lib/rubocop/cop/style/method_and_variable_snake_case.rb +61 -0
 - data/lib/rubocop/cop/style/method_call_parentheses.rb +22 -0
 - data/lib/rubocop/cop/style/method_length.rb +57 -0
 - data/lib/rubocop/cop/style/multiline_if_then.rb +47 -0
 - data/lib/rubocop/cop/style/not.rb +24 -0
 - data/lib/rubocop/cop/style/numeric_literals.rb +25 -0
 - data/lib/rubocop/cop/style/one_line_conditional.rb +20 -0
 - data/lib/rubocop/cop/style/op_method.rb +29 -0
 - data/lib/rubocop/cop/style/parameter_lists.rb +42 -0
 - data/lib/rubocop/cop/style/parentheses_around_condition.rb +42 -0
 - data/lib/rubocop/cop/style/proc.rb +30 -0
 - data/lib/rubocop/cop/style/reduce_arguments.rb +34 -0
 - data/lib/rubocop/cop/style/regexp_literal.rb +39 -0
 - data/lib/rubocop/cop/style/rescue_modifier.rb +55 -0
 - data/lib/rubocop/cop/style/semicolon.rb +51 -0
 - data/lib/rubocop/cop/style/single_line_methods.rb +48 -0
 - data/lib/rubocop/cop/style/space_after_comma_etc.rb +69 -0
 - data/lib/rubocop/cop/style/space_after_control_keyword.rb +32 -0
 - data/lib/rubocop/cop/style/string_literals.rb +36 -0
 - data/lib/rubocop/cop/style/surrounding_space.rb +314 -0
 - data/lib/rubocop/cop/style/symbol_array.rb +31 -0
 - data/lib/rubocop/cop/style/symbol_name.rb +27 -0
 - data/lib/rubocop/cop/style/tab.rb +25 -0
 - data/lib/rubocop/cop/style/ternary_operator.rb +49 -0
 - data/lib/rubocop/cop/style/trailing_whitespace.rb +24 -0
 - data/lib/rubocop/cop/style/trivial_accessors.rb +32 -0
 - data/lib/rubocop/cop/style/unless_else.rb +26 -0
 - data/lib/rubocop/cop/style/variable_interpolation.rb +32 -0
 - data/lib/rubocop/cop/style/when_then.rb +25 -0
 - data/lib/rubocop/cop/style/while_until_do.rb +45 -0
 - data/lib/rubocop/cop/style/word_array.rb +44 -0
 - data/lib/rubocop/cop/util.rb +27 -0
 - data/lib/rubocop/cop/variable_inspector.rb +280 -0
 - data/lib/rubocop/formatter/base_formatter.rb +119 -0
 - data/lib/rubocop/formatter/clang_style_formatter.rb +21 -0
 - data/lib/rubocop/formatter/emacs_style_formatter.rb +17 -0
 - data/lib/rubocop/formatter/formatter_set.rb +77 -0
 - data/lib/rubocop/formatter/json_formatter.rb +76 -0
 - data/lib/rubocop/formatter/progress_formatter.rb +63 -0
 - data/lib/rubocop/formatter/simple_text_formatter.rb +62 -0
 - data/lib/rubocop/version.rb +21 -0
 - data/rubocop.gemspec +36 -0
 - data/spec/.rubocop.yml +5 -0
 - data/spec/project_spec.rb +24 -0
 - data/spec/rubocop/cli_spec.rb +906 -0
 - data/spec/rubocop/config_spec.rb +470 -0
 - data/spec/rubocop/config_store_spec.rb +66 -0
 - data/spec/rubocop/cops/cop_spec.rb +38 -0
 - data/spec/rubocop/cops/lint/assignment_in_condition_spec.rb +111 -0
 - data/spec/rubocop/cops/lint/end_alignment_spec.rb +333 -0
 - data/spec/rubocop/cops/lint/end_in_method_spec.rb +35 -0
 - data/spec/rubocop/cops/lint/ensure_return_spec.rb +37 -0
 - data/spec/rubocop/cops/lint/eval_spec.rb +41 -0
 - data/spec/rubocop/cops/lint/handle_exceptions_spec.rb +36 -0
 - data/spec/rubocop/cops/lint/literal_in_condition_spec.rb +42 -0
 - data/spec/rubocop/cops/lint/loop_spec.rb +33 -0
 - data/spec/rubocop/cops/lint/rescue_exception_spec.rb +127 -0
 - data/spec/rubocop/cops/lint/shadowing_outer_local_variable_spec.rb +243 -0
 - data/spec/rubocop/cops/lint/unreachable_code_spec.rb +69 -0
 - data/spec/rubocop/cops/lint/unused_local_variable_spec.rb +497 -0
 - data/spec/rubocop/cops/lint/void_spec.rb +63 -0
 - data/spec/rubocop/cops/offence_spec.rb +133 -0
 - data/spec/rubocop/cops/rails/validation_spec.rb +27 -0
 - data/spec/rubocop/cops/style/access_control_spec.rb +142 -0
 - data/spec/rubocop/cops/style/alias_spec.rb +47 -0
 - data/spec/rubocop/cops/style/align_parameters_spec.rb +199 -0
 - data/spec/rubocop/cops/style/and_or_spec.rb +39 -0
 - data/spec/rubocop/cops/style/ascii_comments_spec.rb +28 -0
 - data/spec/rubocop/cops/style/ascii_identifiers_spec.rb +28 -0
 - data/spec/rubocop/cops/style/attr_spec.rb +20 -0
 - data/spec/rubocop/cops/style/avoid_class_vars_spec.rb +27 -0
 - data/spec/rubocop/cops/style/avoid_for_spec.rb +37 -0
 - data/spec/rubocop/cops/style/avoid_global_vars_spec.rb +34 -0
 - data/spec/rubocop/cops/style/avoid_perl_backrefs_spec.rb +20 -0
 - data/spec/rubocop/cops/style/avoid_perlisms_spec.rb +47 -0
 - data/spec/rubocop/cops/style/begin_block_spec.rb +19 -0
 - data/spec/rubocop/cops/style/block_comments_spec.rb +27 -0
 - data/spec/rubocop/cops/style/block_nesting_spec.rb +159 -0
 - data/spec/rubocop/cops/style/blocks_spec.rb +35 -0
 - data/spec/rubocop/cops/style/case_equality_spec.rb +18 -0
 - data/spec/rubocop/cops/style/case_indentation_spec.rb +88 -0
 - data/spec/rubocop/cops/style/character_literal_spec.rb +28 -0
 - data/spec/rubocop/cops/style/class_and_module_camel_case_spec.rb +46 -0
 - data/spec/rubocop/cops/style/class_methods_spec.rb +51 -0
 - data/spec/rubocop/cops/style/collection_methods_spec.rb +41 -0
 - data/spec/rubocop/cops/style/colon_method_call_spec.rb +55 -0
 - data/spec/rubocop/cops/style/constant_name_spec.rb +56 -0
 - data/spec/rubocop/cops/style/def_with_parentheses_spec.rb +40 -0
 - data/spec/rubocop/cops/style/def_without_parentheses_spec.rb +34 -0
 - data/spec/rubocop/cops/style/documentation_spec.rb +79 -0
 - data/spec/rubocop/cops/style/dot_position_spec.rb +30 -0
 - data/spec/rubocop/cops/style/empty_line_between_defs_spec.rb +85 -0
 - data/spec/rubocop/cops/style/empty_lines_spec.rb +40 -0
 - data/spec/rubocop/cops/style/empty_literal_spec.rb +91 -0
 - data/spec/rubocop/cops/style/encoding_spec.rb +49 -0
 - data/spec/rubocop/cops/style/end_block_spec.rb +19 -0
 - data/spec/rubocop/cops/style/end_of_line_spec.rb +25 -0
 - data/spec/rubocop/cops/style/favor_join_spec.rb +37 -0
 - data/spec/rubocop/cops/style/favor_modifier_spec.rb +160 -0
 - data/spec/rubocop/cops/style/favor_sprintf_spec.rb +53 -0
 - data/spec/rubocop/cops/style/favor_unless_over_negated_if_spec.rb +64 -0
 - data/spec/rubocop/cops/style/favor_until_over_negated_while_spec.rb +47 -0
 - data/spec/rubocop/cops/style/hash_syntax_spec.rb +51 -0
 - data/spec/rubocop/cops/style/if_with_semicolon_spec.rb +25 -0
 - data/spec/rubocop/cops/style/lambda_spec.rb +45 -0
 - data/spec/rubocop/cops/style/leading_comment_space_spec.rb +65 -0
 - data/spec/rubocop/cops/style/line_continuation_spec.rb +26 -0
 - data/spec/rubocop/cops/style/line_length_spec.rb +25 -0
 - data/spec/rubocop/cops/style/method_and_variable_snake_case_spec.rb +95 -0
 - data/spec/rubocop/cops/style/method_call_parentheses_spec.rb +25 -0
 - data/spec/rubocop/cops/style/method_length_spec.rb +151 -0
 - data/spec/rubocop/cops/style/multiline_if_then_spec.rb +97 -0
 - data/spec/rubocop/cops/style/not_spec.rb +28 -0
 - data/spec/rubocop/cops/style/numeric_literals_spec.rb +51 -0
 - data/spec/rubocop/cops/style/one_line_conditional_spec.rb +18 -0
 - data/spec/rubocop/cops/style/op_method_spec.rb +80 -0
 - data/spec/rubocop/cops/style/parameter_lists_spec.rb +49 -0
 - data/spec/rubocop/cops/style/parentheses_around_condition_spec.rb +59 -0
 - data/spec/rubocop/cops/style/proc_spec.rb +28 -0
 - data/spec/rubocop/cops/style/reduce_arguments_spec.rb +59 -0
 - data/spec/rubocop/cops/style/regexp_literal_spec.rb +83 -0
 - data/spec/rubocop/cops/style/rescue_modifier_spec.rb +122 -0
 - data/spec/rubocop/cops/style/semicolon_spec.rb +95 -0
 - data/spec/rubocop/cops/style/single_line_methods_spec.rb +54 -0
 - data/spec/rubocop/cops/style/space_after_colon_spec.rb +29 -0
 - data/spec/rubocop/cops/style/space_after_comma_spec.rb +31 -0
 - data/spec/rubocop/cops/style/space_after_control_keyword_spec.rb +69 -0
 - data/spec/rubocop/cops/style/space_after_semicolon_spec.rb +24 -0
 - data/spec/rubocop/cops/style/space_around_braces_spec.rb +49 -0
 - data/spec/rubocop/cops/style/space_around_equals_in_default_parameter_spec.rb +34 -0
 - data/spec/rubocop/cops/style/space_around_operators_spec.rb +216 -0
 - data/spec/rubocop/cops/style/space_inside_brackets_spec.rb +51 -0
 - data/spec/rubocop/cops/style/space_inside_hash_literal_braces_spec.rb +99 -0
 - data/spec/rubocop/cops/style/space_inside_parens_spec.rb +33 -0
 - data/spec/rubocop/cops/style/string_literals_spec.rb +62 -0
 - data/spec/rubocop/cops/style/symbol_array_spec.rb +45 -0
 - data/spec/rubocop/cops/style/symbol_name_spec.rb +122 -0
 - data/spec/rubocop/cops/style/tab_spec.rb +23 -0
 - data/spec/rubocop/cops/style/ternary_operator_spec.rb +42 -0
 - data/spec/rubocop/cops/style/trailing_whitespace_spec.rb +29 -0
 - data/spec/rubocop/cops/style/trivial_accessors_spec.rb +338 -0
 - data/spec/rubocop/cops/style/unless_else_spec.rb +31 -0
 - data/spec/rubocop/cops/style/variable_interpolation_spec.rb +53 -0
 - data/spec/rubocop/cops/style/when_then_spec.rb +40 -0
 - data/spec/rubocop/cops/style/while_until_do_spec.rb +47 -0
 - data/spec/rubocop/cops/style/word_array_spec.rb +61 -0
 - data/spec/rubocop/cops/variable_inspector_spec.rb +374 -0
 - data/spec/rubocop/formatter/base_formatter_spec.rb +190 -0
 - data/spec/rubocop/formatter/clang_style_formatter_spec.rb +70 -0
 - data/spec/rubocop/formatter/emacs_style_formatter_spec.rb +32 -0
 - data/spec/rubocop/formatter/formatter_set_spec.rb +132 -0
 - data/spec/rubocop/formatter/json_formatter_spec.rb +142 -0
 - data/spec/rubocop/formatter/progress_formatter_spec.rb +196 -0
 - data/spec/rubocop/formatter/simple_text_formatter_spec.rb +74 -0
 - data/spec/spec_helper.rb +92 -0
 - data/spec/support/file_helper.rb +21 -0
 - data/spec/support/isolated_environment.rb +27 -0
 - data/spec/support/mri_syntax_checker.rb +69 -0
 - data/spec/support/shared_examples.rb +33 -0
 - metadata +517 -0
 
| 
         @@ -0,0 +1,196 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'stringio'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            module Rubocop
         
     | 
| 
      
 7 
     | 
    
         
            +
              describe Formatter::ProgressFormatter do
         
     | 
| 
      
 8 
     | 
    
         
            +
                let(:formatter) { Formatter::ProgressFormatter.new(output) }
         
     | 
| 
      
 9 
     | 
    
         
            +
                let(:output) { StringIO.new }
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                let(:files) do
         
     | 
| 
      
 12 
     | 
    
         
            +
                  %w(lib/rubocop.rb spec/spec_helper.rb bin/rubocop).map do |path|
         
     | 
| 
      
 13 
     | 
    
         
            +
                    File.expand_path(path)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  end
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                describe '#file_finished' do
         
     | 
| 
      
 18 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 19 
     | 
    
         
            +
                    formatter.started(files)
         
     | 
| 
      
 20 
     | 
    
         
            +
                    formatter.file_started(files.first, {})
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                  shared_examples 'calls #report_file_as_mark' do
         
     | 
| 
      
 24 
     | 
    
         
            +
                    it 'calls #report_as_with_mark' do
         
     | 
| 
      
 25 
     | 
    
         
            +
                      formatter.should_receive(:report_file_as_mark)
         
     | 
| 
      
 26 
     | 
    
         
            +
                      formatter.file_finished(files.first, offences)
         
     | 
| 
      
 27 
     | 
    
         
            +
                    end
         
     | 
| 
      
 28 
     | 
    
         
            +
                  end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                  context 'when no offences are detected' do
         
     | 
| 
      
 31 
     | 
    
         
            +
                    let(:offences) { [] }
         
     | 
| 
      
 32 
     | 
    
         
            +
                    include_examples 'calls #report_file_as_mark'
         
     | 
| 
      
 33 
     | 
    
         
            +
                  end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                  context 'when any offences are detected' do
         
     | 
| 
      
 36 
     | 
    
         
            +
                    let(:offences) { [double('offence').as_null_object] }
         
     | 
| 
      
 37 
     | 
    
         
            +
                    include_examples 'calls #report_file_as_mark'
         
     | 
| 
      
 38 
     | 
    
         
            +
                  end
         
     | 
| 
      
 39 
     | 
    
         
            +
                end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                describe '#report_file_as_mark' do
         
     | 
| 
      
 42 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 43 
     | 
    
         
            +
                    formatter.report_file_as_mark(files.first, offences)
         
     | 
| 
      
 44 
     | 
    
         
            +
                  end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                  def offence_with_severity(severity)
         
     | 
| 
      
 47 
     | 
    
         
            +
                    source_buffer = Parser::Source::Buffer.new('test', 1)
         
     | 
| 
      
 48 
     | 
    
         
            +
                    source_buffer.source = "a\n"
         
     | 
| 
      
 49 
     | 
    
         
            +
                    Cop::Offence.new(severity,
         
     | 
| 
      
 50 
     | 
    
         
            +
                                     Parser::Source::Range.new(source_buffer, 0, 1),
         
     | 
| 
      
 51 
     | 
    
         
            +
                                     'message',
         
     | 
| 
      
 52 
     | 
    
         
            +
                                     'CopName')
         
     | 
| 
      
 53 
     | 
    
         
            +
                  end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                  context 'when no offences are detected' do
         
     | 
| 
      
 56 
     | 
    
         
            +
                    let(:offences) { [] }
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                    it 'prints "."' do
         
     | 
| 
      
 59 
     | 
    
         
            +
                      expect(output.string).to eq('.')
         
     | 
| 
      
 60 
     | 
    
         
            +
                    end
         
     | 
| 
      
 61 
     | 
    
         
            +
                  end
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
                  context 'when a refactor severity offence is detected' do
         
     | 
| 
      
 64 
     | 
    
         
            +
                    let(:offences) { [offence_with_severity(:refactor)] }
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
                    it 'prints "R"' do
         
     | 
| 
      
 67 
     | 
    
         
            +
                      expect(output.string).to eq('R')
         
     | 
| 
      
 68 
     | 
    
         
            +
                    end
         
     | 
| 
      
 69 
     | 
    
         
            +
                  end
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
                  context 'when a refactor convention offence is detected' do
         
     | 
| 
      
 72 
     | 
    
         
            +
                    let(:offences) { [offence_with_severity(:convention)] }
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
                    it 'prints "C"' do
         
     | 
| 
      
 75 
     | 
    
         
            +
                      expect(output.string).to eq('C')
         
     | 
| 
      
 76 
     | 
    
         
            +
                    end
         
     | 
| 
      
 77 
     | 
    
         
            +
                  end
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
                  context 'when different severity offences are detected' do
         
     | 
| 
      
 80 
     | 
    
         
            +
                    let(:offences) do
         
     | 
| 
      
 81 
     | 
    
         
            +
                      [
         
     | 
| 
      
 82 
     | 
    
         
            +
                        offence_with_severity(:refactor),
         
     | 
| 
      
 83 
     | 
    
         
            +
                        offence_with_severity(:error)
         
     | 
| 
      
 84 
     | 
    
         
            +
                      ]
         
     | 
| 
      
 85 
     | 
    
         
            +
                    end
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
                    it 'prints highest level mark' do
         
     | 
| 
      
 88 
     | 
    
         
            +
                      expect(output.string).to eq('E')
         
     | 
| 
      
 89 
     | 
    
         
            +
                    end
         
     | 
| 
      
 90 
     | 
    
         
            +
                  end
         
     | 
| 
      
 91 
     | 
    
         
            +
                end
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
                describe '#finished' do
         
     | 
| 
      
 94 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 95 
     | 
    
         
            +
                    formatter.started(files)
         
     | 
| 
      
 96 
     | 
    
         
            +
                  end
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
      
 98 
     | 
    
         
            +
                  context 'when #reports_summary? is true' do
         
     | 
| 
      
 99 
     | 
    
         
            +
                    before { formatter.reports_summary = true }
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
                    context 'when any offences are detected' do
         
     | 
| 
      
 102 
     | 
    
         
            +
                      before do
         
     | 
| 
      
 103 
     | 
    
         
            +
                        source_buffer = Parser::Source::Buffer.new('test', 1)
         
     | 
| 
      
 104 
     | 
    
         
            +
                        source = 9.times.map do |index|
         
     | 
| 
      
 105 
     | 
    
         
            +
                          "This is line #{index + 1}."
         
     | 
| 
      
 106 
     | 
    
         
            +
                        end
         
     | 
| 
      
 107 
     | 
    
         
            +
                        source_buffer.source = source.join("\n")
         
     | 
| 
      
 108 
     | 
    
         
            +
                        line_length = source[0].length + "\n".length
         
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
      
 110 
     | 
    
         
            +
                        formatter.file_started(files[0], {})
         
     | 
| 
      
 111 
     | 
    
         
            +
                        formatter.file_finished(files[0], [
         
     | 
| 
      
 112 
     | 
    
         
            +
                          Cop::Offence.new(
         
     | 
| 
      
 113 
     | 
    
         
            +
                            :convention,
         
     | 
| 
      
 114 
     | 
    
         
            +
                            Parser::Source::Range.new(source_buffer,
         
     | 
| 
      
 115 
     | 
    
         
            +
                                                      line_length + 2,
         
     | 
| 
      
 116 
     | 
    
         
            +
                                                      line_length + 3),
         
     | 
| 
      
 117 
     | 
    
         
            +
                            'foo',
         
     | 
| 
      
 118 
     | 
    
         
            +
                            'Cop'
         
     | 
| 
      
 119 
     | 
    
         
            +
                          )
         
     | 
| 
      
 120 
     | 
    
         
            +
                        ])
         
     | 
| 
      
 121 
     | 
    
         
            +
             
     | 
| 
      
 122 
     | 
    
         
            +
                        formatter.file_started(files[1], {})
         
     | 
| 
      
 123 
     | 
    
         
            +
                        formatter.file_finished(files[1], [
         
     | 
| 
      
 124 
     | 
    
         
            +
                        ])
         
     | 
| 
      
 125 
     | 
    
         
            +
             
     | 
| 
      
 126 
     | 
    
         
            +
                        formatter.file_started(files[2], {})
         
     | 
| 
      
 127 
     | 
    
         
            +
                        formatter.file_finished(files[2], [
         
     | 
| 
      
 128 
     | 
    
         
            +
                          Cop::Offence.new(
         
     | 
| 
      
 129 
     | 
    
         
            +
                            :error,
         
     | 
| 
      
 130 
     | 
    
         
            +
                            Parser::Source::Range.new(source_buffer,
         
     | 
| 
      
 131 
     | 
    
         
            +
                                                      4 * line_length + 1,
         
     | 
| 
      
 132 
     | 
    
         
            +
                                                      4 * line_length + 2),
         
     | 
| 
      
 133 
     | 
    
         
            +
                            'bar',
         
     | 
| 
      
 134 
     | 
    
         
            +
                            'Cop'
         
     | 
| 
      
 135 
     | 
    
         
            +
                          ),
         
     | 
| 
      
 136 
     | 
    
         
            +
                          Cop::Offence.new(
         
     | 
| 
      
 137 
     | 
    
         
            +
                            :convention,
         
     | 
| 
      
 138 
     | 
    
         
            +
                            Parser::Source::Range.new(source_buffer,
         
     | 
| 
      
 139 
     | 
    
         
            +
                                                      5 * line_length,
         
     | 
| 
      
 140 
     | 
    
         
            +
                                                      5 * line_length + 1),
         
     | 
| 
      
 141 
     | 
    
         
            +
                            'foo',
         
     | 
| 
      
 142 
     | 
    
         
            +
                            'Cop'
         
     | 
| 
      
 143 
     | 
    
         
            +
                          )
         
     | 
| 
      
 144 
     | 
    
         
            +
                        ])
         
     | 
| 
      
 145 
     | 
    
         
            +
                      end
         
     | 
| 
      
 146 
     | 
    
         
            +
             
     | 
| 
      
 147 
     | 
    
         
            +
                      it 'reports all detected offences for all failed files' do
         
     | 
| 
      
 148 
     | 
    
         
            +
                        formatter.finished(files)
         
     | 
| 
      
 149 
     | 
    
         
            +
                        expect(output.string).to include([
         
     | 
| 
      
 150 
     | 
    
         
            +
                          'Offences:',
         
     | 
| 
      
 151 
     | 
    
         
            +
                          '',
         
     | 
| 
      
 152 
     | 
    
         
            +
                          'lib/rubocop.rb:2:3: C: foo',
         
     | 
| 
      
 153 
     | 
    
         
            +
                          'This is line 2.',
         
     | 
| 
      
 154 
     | 
    
         
            +
                          '  ^',
         
     | 
| 
      
 155 
     | 
    
         
            +
                          'bin/rubocop:5:2: E: bar',
         
     | 
| 
      
 156 
     | 
    
         
            +
                          'This is line 5.',
         
     | 
| 
      
 157 
     | 
    
         
            +
                          ' ^',
         
     | 
| 
      
 158 
     | 
    
         
            +
                          'bin/rubocop:6:1: C: foo',
         
     | 
| 
      
 159 
     | 
    
         
            +
                          'This is line 6.',
         
     | 
| 
      
 160 
     | 
    
         
            +
                          '^'
         
     | 
| 
      
 161 
     | 
    
         
            +
                        ].join("\n"))
         
     | 
| 
      
 162 
     | 
    
         
            +
                      end
         
     | 
| 
      
 163 
     | 
    
         
            +
                    end
         
     | 
| 
      
 164 
     | 
    
         
            +
             
     | 
| 
      
 165 
     | 
    
         
            +
                    context 'when no offences are detected' do
         
     | 
| 
      
 166 
     | 
    
         
            +
                      before do
         
     | 
| 
      
 167 
     | 
    
         
            +
                        files.each do |file|
         
     | 
| 
      
 168 
     | 
    
         
            +
                          formatter.file_started(file, {})
         
     | 
| 
      
 169 
     | 
    
         
            +
                          formatter.file_finished(file, [])
         
     | 
| 
      
 170 
     | 
    
         
            +
                        end
         
     | 
| 
      
 171 
     | 
    
         
            +
                      end
         
     | 
| 
      
 172 
     | 
    
         
            +
             
     | 
| 
      
 173 
     | 
    
         
            +
                      it 'does not report offences' do
         
     | 
| 
      
 174 
     | 
    
         
            +
                        formatter.finished(files)
         
     | 
| 
      
 175 
     | 
    
         
            +
                        expect(output.string).not_to include('Offences:')
         
     | 
| 
      
 176 
     | 
    
         
            +
                      end
         
     | 
| 
      
 177 
     | 
    
         
            +
                    end
         
     | 
| 
      
 178 
     | 
    
         
            +
             
     | 
| 
      
 179 
     | 
    
         
            +
                    it 'calls #report_summary' do
         
     | 
| 
      
 180 
     | 
    
         
            +
                      formatter.should_receive(:report_summary)
         
     | 
| 
      
 181 
     | 
    
         
            +
                      formatter.finished(files)
         
     | 
| 
      
 182 
     | 
    
         
            +
                    end
         
     | 
| 
      
 183 
     | 
    
         
            +
                  end
         
     | 
| 
      
 184 
     | 
    
         
            +
             
     | 
| 
      
 185 
     | 
    
         
            +
                  context 'when #reports_summary? is false' do
         
     | 
| 
      
 186 
     | 
    
         
            +
                    before { formatter.reports_summary = false }
         
     | 
| 
      
 187 
     | 
    
         
            +
             
     | 
| 
      
 188 
     | 
    
         
            +
                    it 'reports nothing' do
         
     | 
| 
      
 189 
     | 
    
         
            +
                      output.string = ''
         
     | 
| 
      
 190 
     | 
    
         
            +
                      formatter.finished(files)
         
     | 
| 
      
 191 
     | 
    
         
            +
                      expect(output.string).to eq("\n")
         
     | 
| 
      
 192 
     | 
    
         
            +
                    end
         
     | 
| 
      
 193 
     | 
    
         
            +
                  end
         
     | 
| 
      
 194 
     | 
    
         
            +
                end
         
     | 
| 
      
 195 
     | 
    
         
            +
              end
         
     | 
| 
      
 196 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,74 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'stringio'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'tempfile'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            module Rubocop
         
     | 
| 
      
 8 
     | 
    
         
            +
              module Formatter
         
     | 
| 
      
 9 
     | 
    
         
            +
                describe SimpleTextFormatter do
         
     | 
| 
      
 10 
     | 
    
         
            +
                  subject(:formatter) { SimpleTextFormatter.new(output) }
         
     | 
| 
      
 11 
     | 
    
         
            +
                  let(:output) { StringIO.new }
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                  describe '#report_file' do
         
     | 
| 
      
 14 
     | 
    
         
            +
                    before do
         
     | 
| 
      
 15 
     | 
    
         
            +
                      formatter.report_file(file, [])
         
     | 
| 
      
 16 
     | 
    
         
            +
                    end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                    context 'the file is under the current working directory' do
         
     | 
| 
      
 19 
     | 
    
         
            +
                      let(:file) { File.expand_path('spec/spec_helper.rb') }
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                      it 'prints as relative path' do
         
     | 
| 
      
 22 
     | 
    
         
            +
                        expect(output.string).to include('== spec/spec_helper.rb ==')
         
     | 
| 
      
 23 
     | 
    
         
            +
                      end
         
     | 
| 
      
 24 
     | 
    
         
            +
                    end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                    context 'the file is outside of the current working directory' do
         
     | 
| 
      
 27 
     | 
    
         
            +
                      let(:file) do
         
     | 
| 
      
 28 
     | 
    
         
            +
                        tempfile = Tempfile.new('')
         
     | 
| 
      
 29 
     | 
    
         
            +
                        tempfile.close
         
     | 
| 
      
 30 
     | 
    
         
            +
                        File.expand_path(tempfile.path)
         
     | 
| 
      
 31 
     | 
    
         
            +
                      end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                      it 'prints as absolute path' do
         
     | 
| 
      
 34 
     | 
    
         
            +
                        expect(output.string).to include("== #{file} ==")
         
     | 
| 
      
 35 
     | 
    
         
            +
                      end
         
     | 
| 
      
 36 
     | 
    
         
            +
                    end
         
     | 
| 
      
 37 
     | 
    
         
            +
                  end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                  describe '#report_summary' do
         
     | 
| 
      
 40 
     | 
    
         
            +
                    context 'when no files inspected' do
         
     | 
| 
      
 41 
     | 
    
         
            +
                      it 'handles pluralization correctly' do
         
     | 
| 
      
 42 
     | 
    
         
            +
                        formatter.report_summary(0, 0)
         
     | 
| 
      
 43 
     | 
    
         
            +
                        expect(output.string).to eq(
         
     | 
| 
      
 44 
     | 
    
         
            +
                          "\n0 files inspected, no offences detected\n")
         
     | 
| 
      
 45 
     | 
    
         
            +
                      end
         
     | 
| 
      
 46 
     | 
    
         
            +
                    end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                    context 'when a file inspected and no offences detected' do
         
     | 
| 
      
 49 
     | 
    
         
            +
                      it 'handles pluralization correctly' do
         
     | 
| 
      
 50 
     | 
    
         
            +
                        formatter.report_summary(1, 0)
         
     | 
| 
      
 51 
     | 
    
         
            +
                        expect(output.string).to eq(
         
     | 
| 
      
 52 
     | 
    
         
            +
                          "\n1 file inspected, no offences detected\n")
         
     | 
| 
      
 53 
     | 
    
         
            +
                      end
         
     | 
| 
      
 54 
     | 
    
         
            +
                    end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                    context 'when a offence detected' do
         
     | 
| 
      
 57 
     | 
    
         
            +
                      it 'handles pluralization correctly' do
         
     | 
| 
      
 58 
     | 
    
         
            +
                        formatter.report_summary(1, 1)
         
     | 
| 
      
 59 
     | 
    
         
            +
                        expect(output.string).to eq(
         
     | 
| 
      
 60 
     | 
    
         
            +
                          "\n1 file inspected, 1 offence detected\n")
         
     | 
| 
      
 61 
     | 
    
         
            +
                      end
         
     | 
| 
      
 62 
     | 
    
         
            +
                    end
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
                    context 'when 2 offences detected' do
         
     | 
| 
      
 65 
     | 
    
         
            +
                      it 'handles pluralization correctly' do
         
     | 
| 
      
 66 
     | 
    
         
            +
                        formatter.report_summary(2, 2)
         
     | 
| 
      
 67 
     | 
    
         
            +
                        expect(output.string).to eq(
         
     | 
| 
      
 68 
     | 
    
         
            +
                          "\n2 files inspected, 2 offences detected\n")
         
     | 
| 
      
 69 
     | 
    
         
            +
                      end
         
     | 
| 
      
 70 
     | 
    
         
            +
                    end
         
     | 
| 
      
 71 
     | 
    
         
            +
                  end
         
     | 
| 
      
 72 
     | 
    
         
            +
                end
         
     | 
| 
      
 73 
     | 
    
         
            +
              end
         
     | 
| 
      
 74 
     | 
    
         
            +
            end
         
     | 
    
        data/spec/spec_helper.rb
    ADDED
    
    | 
         @@ -0,0 +1,92 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            if ENV['TRAVIS'] && RUBY_ENGINE == 'jruby'
         
     | 
| 
      
 4 
     | 
    
         
            +
              # Force JRuby not to select working directory
         
     | 
| 
      
 5 
     | 
    
         
            +
              # as temporary directory on Travis CI.
         
     | 
| 
      
 6 
     | 
    
         
            +
              # https://github.com/jruby/jruby/issues/405
         
     | 
| 
      
 7 
     | 
    
         
            +
              require 'fileutils'
         
     | 
| 
      
 8 
     | 
    
         
            +
              tmp_dir = ENV['TMPDIR'] || ENV['TMP'] || ENV['TEMP'] ||
         
     | 
| 
      
 9 
     | 
    
         
            +
                        Etc.systmpdir || '/tmp'
         
     | 
| 
      
 10 
     | 
    
         
            +
              non_world_writable_tmp_dir = File.join(tmp_dir, 'rubocop')
         
     | 
| 
      
 11 
     | 
    
         
            +
              FileUtils.makedirs(non_world_writable_tmp_dir, mode: 0700)
         
     | 
| 
      
 12 
     | 
    
         
            +
              ENV['TMPDIR'] = non_world_writable_tmp_dir
         
     | 
| 
      
 13 
     | 
    
         
            +
            end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            if ENV['TRAVIS'] || ENV['COVERAGE']
         
     | 
| 
      
 16 
     | 
    
         
            +
              require 'simplecov'
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
              if ENV['TRAVIS']
         
     | 
| 
      
 19 
     | 
    
         
            +
                require 'coveralls'
         
     | 
| 
      
 20 
     | 
    
         
            +
                SimpleCov.formatter = Coveralls::SimpleCov::Formatter
         
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
              SimpleCov.start do
         
     | 
| 
      
 24 
     | 
    
         
            +
                add_filter '/spec/'
         
     | 
| 
      
 25 
     | 
    
         
            +
                add_filter '/vendor/bundle/'
         
     | 
| 
      
 26 
     | 
    
         
            +
              end
         
     | 
| 
      
 27 
     | 
    
         
            +
            end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
         
     | 
| 
      
 30 
     | 
    
         
            +
            $LOAD_PATH.unshift(File.dirname(__FILE__))
         
     | 
| 
      
 31 
     | 
    
         
            +
            require 'rspec'
         
     | 
| 
      
 32 
     | 
    
         
            +
            require 'rubocop'
         
     | 
| 
      
 33 
     | 
    
         
            +
            require 'rubocop/cli'
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
            # disable colors in specs
         
     | 
| 
      
 36 
     | 
    
         
            +
            Sickill::Rainbow.enabled = false
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
            module ExitCodeMatchers
         
     | 
| 
      
 39 
     | 
    
         
            +
              RSpec::Matchers.define :exit_with_code do |code|
         
     | 
| 
      
 40 
     | 
    
         
            +
                actual = nil
         
     | 
| 
      
 41 
     | 
    
         
            +
                match do |block|
         
     | 
| 
      
 42 
     | 
    
         
            +
                  begin
         
     | 
| 
      
 43 
     | 
    
         
            +
                    block.call
         
     | 
| 
      
 44 
     | 
    
         
            +
                  rescue SystemExit => e
         
     | 
| 
      
 45 
     | 
    
         
            +
                    actual = e.status
         
     | 
| 
      
 46 
     | 
    
         
            +
                  end
         
     | 
| 
      
 47 
     | 
    
         
            +
                  actual && actual == code
         
     | 
| 
      
 48 
     | 
    
         
            +
                end
         
     | 
| 
      
 49 
     | 
    
         
            +
                failure_message_for_should do |block|
         
     | 
| 
      
 50 
     | 
    
         
            +
                  "expected block to call exit(#{code}) but exit" +
         
     | 
| 
      
 51 
     | 
    
         
            +
                    (actual.nil? ? ' not called' : "(#{actual}) was called")
         
     | 
| 
      
 52 
     | 
    
         
            +
                end
         
     | 
| 
      
 53 
     | 
    
         
            +
                failure_message_for_should_not do |block|
         
     | 
| 
      
 54 
     | 
    
         
            +
                  "expected block not to call exit(#{code})"
         
     | 
| 
      
 55 
     | 
    
         
            +
                end
         
     | 
| 
      
 56 
     | 
    
         
            +
                description do
         
     | 
| 
      
 57 
     | 
    
         
            +
                  "expect block to call exit(#{code})"
         
     | 
| 
      
 58 
     | 
    
         
            +
                end
         
     | 
| 
      
 59 
     | 
    
         
            +
              end
         
     | 
| 
      
 60 
     | 
    
         
            +
            end
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
            RSpec.configure do |config|
         
     | 
| 
      
 63 
     | 
    
         
            +
              broken_filter = lambda do |v|
         
     | 
| 
      
 64 
     | 
    
         
            +
                v.is_a?(Symbol) ? RUBY_ENGINE == v.to_s : v
         
     | 
| 
      
 65 
     | 
    
         
            +
              end
         
     | 
| 
      
 66 
     | 
    
         
            +
              config.filter_run_excluding ruby: ->(v) { !RUBY_VERSION.start_with?(v.to_s) }
         
     | 
| 
      
 67 
     | 
    
         
            +
              config.filter_run_excluding broken: broken_filter
         
     | 
| 
      
 68 
     | 
    
         
            +
              config.treat_symbols_as_metadata_keys_with_true_values = true
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
              config.expect_with :rspec do |c|
         
     | 
| 
      
 71 
     | 
    
         
            +
                c.syntax = :expect # disables `should`
         
     | 
| 
      
 72 
     | 
    
         
            +
              end
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
              config.include(ExitCodeMatchers)
         
     | 
| 
      
 75 
     | 
    
         
            +
            end
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
            def inspect_source(cop, source)
         
     | 
| 
      
 78 
     | 
    
         
            +
              ast, comments, tokens, src_buffer, _ = Rubocop::CLI.parse('(string)') do |sb|
         
     | 
| 
      
 79 
     | 
    
         
            +
                sb.source = source.join($RS)
         
     | 
| 
      
 80 
     | 
    
         
            +
              end
         
     | 
| 
      
 81 
     | 
    
         
            +
              cop.inspect(src_buffer, source, tokens, ast, comments)
         
     | 
| 
      
 82 
     | 
    
         
            +
            end
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
            class Rubocop::Cop::Cop
         
     | 
| 
      
 85 
     | 
    
         
            +
              def messages
         
     | 
| 
      
 86 
     | 
    
         
            +
                offences.map(&:message)
         
     | 
| 
      
 87 
     | 
    
         
            +
              end
         
     | 
| 
      
 88 
     | 
    
         
            +
            end
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
            # Requires supporting files with custom matchers and macros, etc,
         
     | 
| 
      
 91 
     | 
    
         
            +
            # in ./support/ and its subdirectories.
         
     | 
| 
      
 92 
     | 
    
         
            +
            Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
         
     | 
| 
         @@ -0,0 +1,21 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'fileutils'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            module FileHelper
         
     | 
| 
      
 6 
     | 
    
         
            +
              def create_file(file_path, content)
         
     | 
| 
      
 7 
     | 
    
         
            +
                file_path = File.expand_path(file_path)
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                dir_path = File.dirname(file_path)
         
     | 
| 
      
 10 
     | 
    
         
            +
                FileUtils.makedirs dir_path unless File.exists?(dir_path)
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                File.open(file_path, 'w') do |file|
         
     | 
| 
      
 13 
     | 
    
         
            +
                  case content
         
     | 
| 
      
 14 
     | 
    
         
            +
                  when String
         
     | 
| 
      
 15 
     | 
    
         
            +
                    file.puts content
         
     | 
| 
      
 16 
     | 
    
         
            +
                  when Array
         
     | 
| 
      
 17 
     | 
    
         
            +
                    file.puts content.join("\n")
         
     | 
| 
      
 18 
     | 
    
         
            +
                  end
         
     | 
| 
      
 19 
     | 
    
         
            +
                end
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,27 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'tmpdir'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'fileutils'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            shared_context 'isolated environment', :isolated_environment do
         
     | 
| 
      
 7 
     | 
    
         
            +
              around do |example|
         
     | 
| 
      
 8 
     | 
    
         
            +
                Dir.mktmpdir do |tmpdir|
         
     | 
| 
      
 9 
     | 
    
         
            +
                  original_home = ENV['HOME']
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                  begin
         
     | 
| 
      
 12 
     | 
    
         
            +
                    virtual_home = File.expand_path(File.join(tmpdir, 'home'))
         
     | 
| 
      
 13 
     | 
    
         
            +
                    Dir.mkdir(virtual_home)
         
     | 
| 
      
 14 
     | 
    
         
            +
                    ENV['HOME'] = virtual_home
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                    working_dir = File.join(tmpdir, 'work')
         
     | 
| 
      
 17 
     | 
    
         
            +
                    Dir.mkdir(working_dir)
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                    Dir.chdir(working_dir) do
         
     | 
| 
      
 20 
     | 
    
         
            +
                      example.run
         
     | 
| 
      
 21 
     | 
    
         
            +
                    end
         
     | 
| 
      
 22 
     | 
    
         
            +
                  ensure
         
     | 
| 
      
 23 
     | 
    
         
            +
                    ENV['HOME'] = original_home
         
     | 
| 
      
 24 
     | 
    
         
            +
                  end
         
     | 
| 
      
 25 
     | 
    
         
            +
                end
         
     | 
| 
      
 26 
     | 
    
         
            +
              end
         
     | 
| 
      
 27 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,69 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'open3'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            # The reincarnation of syntax cop :)
         
     | 
| 
      
 6 
     | 
    
         
            +
            module MRISyntaxChecker
         
     | 
| 
      
 7 
     | 
    
         
            +
              module_function
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
              def offences_for_source(source, fake_cop_name = 'Syntax', grep_message = nil)
         
     | 
| 
      
 10 
     | 
    
         
            +
                if source.is_a?(Array)
         
     | 
| 
      
 11 
     | 
    
         
            +
                  source_lines = source
         
     | 
| 
      
 12 
     | 
    
         
            +
                  source = source_lines.join("\n")
         
     | 
| 
      
 13 
     | 
    
         
            +
                else
         
     | 
| 
      
 14 
     | 
    
         
            +
                  source_lines = source.each_line.to_a
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                source_buffer = Parser::Source::Buffer.new('test', 1)
         
     | 
| 
      
 18 
     | 
    
         
            +
                source_buffer.source = source
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                offences = []
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                check_syntax(source).each_line do |line|
         
     | 
| 
      
 23 
     | 
    
         
            +
                  line_number, severity, message = process_line(line)
         
     | 
| 
      
 24 
     | 
    
         
            +
                  next unless line_number
         
     | 
| 
      
 25 
     | 
    
         
            +
                  next if grep_message && !message.include?(grep_message)
         
     | 
| 
      
 26 
     | 
    
         
            +
                  begin_pos = source_lines[0...(line_number - 1)].reduce(0) do |a, e|
         
     | 
| 
      
 27 
     | 
    
         
            +
                    a + e.length + "\n".length
         
     | 
| 
      
 28 
     | 
    
         
            +
                  end
         
     | 
| 
      
 29 
     | 
    
         
            +
                  offences << Rubocop::Cop::Offence.new(
         
     | 
| 
      
 30 
     | 
    
         
            +
                    severity,
         
     | 
| 
      
 31 
     | 
    
         
            +
                    Parser::Source::Range.new(source_buffer, begin_pos, begin_pos + 1),
         
     | 
| 
      
 32 
     | 
    
         
            +
                    message.capitalize,
         
     | 
| 
      
 33 
     | 
    
         
            +
                    fake_cop_name
         
     | 
| 
      
 34 
     | 
    
         
            +
                  )
         
     | 
| 
      
 35 
     | 
    
         
            +
                end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                offences
         
     | 
| 
      
 38 
     | 
    
         
            +
              end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
              def check_syntax(source)
         
     | 
| 
      
 41 
     | 
    
         
            +
                fail 'Must be running with MRI' unless RUBY_ENGINE == 'ruby'
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                stdin, stderr, thread = nil
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                # It's extremely important to run the syntax check in a
         
     | 
| 
      
 46 
     | 
    
         
            +
                # clean environment - otherwise it will be extremely slow.
         
     | 
| 
      
 47 
     | 
    
         
            +
                if defined? Bundler
         
     | 
| 
      
 48 
     | 
    
         
            +
                  Bundler.with_clean_env do
         
     | 
| 
      
 49 
     | 
    
         
            +
                    stdin, _, stderr, thread = Open3.popen3('ruby', '-cw')
         
     | 
| 
      
 50 
     | 
    
         
            +
                  end
         
     | 
| 
      
 51 
     | 
    
         
            +
                else
         
     | 
| 
      
 52 
     | 
    
         
            +
                  stdin, _, stderr, thread = Open3.popen3('ruby', '-cw')
         
     | 
| 
      
 53 
     | 
    
         
            +
                end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                stdin.write(source)
         
     | 
| 
      
 56 
     | 
    
         
            +
                stdin.close
         
     | 
| 
      
 57 
     | 
    
         
            +
                thread.join
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
                stderr.read
         
     | 
| 
      
 60 
     | 
    
         
            +
              end
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
              def process_line(line)
         
     | 
| 
      
 63 
     | 
    
         
            +
                match_data = line.match(/.+:(\d+): (warning: )?(.+)/)
         
     | 
| 
      
 64 
     | 
    
         
            +
                return nil unless match_data
         
     | 
| 
      
 65 
     | 
    
         
            +
                line_number, warning, message = match_data.captures
         
     | 
| 
      
 66 
     | 
    
         
            +
                severity = warning ? :warning : :error
         
     | 
| 
      
 67 
     | 
    
         
            +
                [line_number.to_i, severity, message]
         
     | 
| 
      
 68 
     | 
    
         
            +
              end
         
     | 
| 
      
 69 
     | 
    
         
            +
            end
         
     |