rubocop 0.8.3 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of rubocop might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.travis.yml +0 -4
- data/.yardopts +2 -0
- data/CHANGELOG.md +70 -1
- data/README.md +101 -11
- data/config/default.yml +10 -2
- data/config/enabled.yml +85 -11
- data/lib/rubocop.rb +97 -73
- data/lib/rubocop/cli.rb +177 -92
- data/lib/rubocop/config.rb +56 -11
- data/lib/rubocop/config_store.rb +2 -0
- data/lib/rubocop/cop/cop.rb +52 -8
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +54 -0
- data/lib/rubocop/cop/lint/end_alignment.rb +180 -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 +63 -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 +33 -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 +112 -12
- data/lib/rubocop/cop/rails/validation.rb +34 -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 +37 -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 +80 -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/not.rb +24 -0
- data/lib/rubocop/cop/style/numeric_literals.rb +25 -0
- data/lib/rubocop/cop/{op_method.rb → style/op_method.rb} +4 -3
- 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 +1 -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 +15 -1
- data/rubocop.gemspec +1 -2
- data/spec/.rubocop.yml +5 -0
- data/spec/project_spec.rb +4 -7
- data/spec/rubocop/cli_spec.rb +383 -146
- data/spec/rubocop/config_spec.rb +61 -0
- data/spec/rubocop/config_store_spec.rb +2 -2
- data/spec/rubocop/cops/cop_spec.rb +14 -7
- data/spec/rubocop/cops/lint/assignment_in_condition_spec.rb +111 -0
- data/spec/rubocop/cops/lint/end_alignment_spec.rb +426 -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 +35 -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 +180 -0
- data/spec/rubocop/cops/lint/unreachable_code_spec.rb +69 -0
- data/spec/rubocop/cops/lint/unused_local_variable_spec.rb +484 -0
- data/spec/rubocop/cops/lint/void_spec.rb +63 -0
- data/spec/rubocop/cops/offence_spec.rb +107 -10
- 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 +46 -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 +81 -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 +23 -8
- data/spec/support/mri_syntax_checker.rb +69 -0
- data/spec/support/shared_examples.rb +33 -0
- metadata +315 -243
- data/lib/rubocop/cop/access_control.rb +0 -41
- data/lib/rubocop/cop/alias.rb +0 -17
- data/lib/rubocop/cop/align_parameters.rb +0 -37
- data/lib/rubocop/cop/and_or.rb +0 -36
- data/lib/rubocop/cop/ascii_comments.rb +0 -17
- data/lib/rubocop/cop/ascii_identifiers.rb +0 -19
- data/lib/rubocop/cop/avoid_class_vars.rb +0 -15
- data/lib/rubocop/cop/avoid_for.rb +0 -17
- data/lib/rubocop/cop/avoid_global_vars.rb +0 -61
- data/lib/rubocop/cop/avoid_perl_backrefs.rb +0 -17
- data/lib/rubocop/cop/avoid_perlisms.rb +0 -47
- data/lib/rubocop/cop/block_comments.rb +0 -17
- data/lib/rubocop/cop/block_nesting.rb +0 -35
- data/lib/rubocop/cop/blocks.rb +0 -23
- data/lib/rubocop/cop/case_indentation.rb +0 -22
- data/lib/rubocop/cop/class_and_module_camel_case.rb +0 -29
- data/lib/rubocop/cop/class_methods.rb +0 -15
- data/lib/rubocop/cop/collection_methods.rb +0 -29
- data/lib/rubocop/cop/colon_method_call.rb +0 -20
- data/lib/rubocop/cop/constant_name.rb +0 -24
- data/lib/rubocop/cop/def_parentheses.rb +0 -62
- data/lib/rubocop/cop/empty_line_between_defs.rb +0 -22
- data/lib/rubocop/cop/empty_lines.rb +0 -34
- data/lib/rubocop/cop/empty_literal.rb +0 -49
- data/lib/rubocop/cop/encoding.rb +0 -19
- data/lib/rubocop/cop/end_of_line.rb +0 -15
- data/lib/rubocop/cop/ensure_return.rb +0 -19
- data/lib/rubocop/cop/eval.rb +0 -19
- data/lib/rubocop/cop/favor_join.rb +0 -22
- data/lib/rubocop/cop/favor_modifier.rb +0 -92
- data/lib/rubocop/cop/favor_percent_r.rb +0 -19
- data/lib/rubocop/cop/favor_sprintf.rb +0 -21
- data/lib/rubocop/cop/favor_unless_over_negated_if.rb +0 -49
- data/lib/rubocop/cop/handle_exceptions.rb +0 -17
- data/lib/rubocop/cop/hash_syntax.rb +0 -41
- data/lib/rubocop/cop/if_then_else.rb +0 -75
- data/lib/rubocop/cop/lambda.rb +0 -42
- data/lib/rubocop/cop/leading_comment_space.rb +0 -19
- data/lib/rubocop/cop/line_continuation.rb +0 -15
- data/lib/rubocop/cop/line_length.rb +0 -23
- data/lib/rubocop/cop/loop.rb +0 -33
- data/lib/rubocop/cop/method_and_variable_snake_case.rb +0 -55
- data/lib/rubocop/cop/method_length.rb +0 -52
- data/lib/rubocop/cop/not.rb +0 -21
- data/lib/rubocop/cop/numeric_literals.rb +0 -21
- data/lib/rubocop/cop/parameter_lists.rb +0 -23
- data/lib/rubocop/cop/parentheses_around_condition.rb +0 -40
- data/lib/rubocop/cop/percent_r.rb +0 -19
- data/lib/rubocop/cop/proc.rb +0 -26
- data/lib/rubocop/cop/reduce_arguments.rb +0 -29
- data/lib/rubocop/cop/rescue_exception.rb +0 -26
- data/lib/rubocop/cop/rescue_modifier.rb +0 -15
- data/lib/rubocop/cop/semicolon.rb +0 -31
- data/lib/rubocop/cop/single_line_methods.rb +0 -44
- data/lib/rubocop/cop/space_after_comma_etc.rb +0 -62
- data/lib/rubocop/cop/space_after_control_keyword.rb +0 -29
- data/lib/rubocop/cop/string_literals.rb +0 -25
- data/lib/rubocop/cop/surrounding_space.rb +0 -285
- data/lib/rubocop/cop/symbol_array.rb +0 -31
- data/lib/rubocop/cop/symbol_name.rb +0 -23
- data/lib/rubocop/cop/syntax.rb +0 -49
- data/lib/rubocop/cop/tab.rb +0 -15
- data/lib/rubocop/cop/ternary_operator.rb +0 -43
- data/lib/rubocop/cop/trailing_whitespace.rb +0 -15
- data/lib/rubocop/cop/trivial_accessors.rb +0 -26
- data/lib/rubocop/cop/unless_else.rb +0 -23
- data/lib/rubocop/cop/variable_interpolation.rb +0 -29
- data/lib/rubocop/cop/when_then.rb +0 -17
- data/lib/rubocop/cop/word_array.rb +0 -37
- data/lib/rubocop/report/emacs_style.rb +0 -17
- data/lib/rubocop/report/plain_text.rb +0 -18
- data/lib/rubocop/report/report.rb +0 -44
- data/spec/rubocop/cops/access_control_spec.rb +0 -129
- data/spec/rubocop/cops/alias_spec.rb +0 -39
- data/spec/rubocop/cops/align_parameters_spec.rb +0 -197
- data/spec/rubocop/cops/and_or_spec.rb +0 -37
- data/spec/rubocop/cops/ascii_comments_spec.rb +0 -26
- data/spec/rubocop/cops/ascii_identifiers_spec.rb +0 -26
- data/spec/rubocop/cops/avoid_class_vars_spec.rb +0 -25
- data/spec/rubocop/cops/avoid_for_spec.rb +0 -35
- data/spec/rubocop/cops/avoid_global_vars_spec.rb +0 -32
- data/spec/rubocop/cops/avoid_perl_backrefs_spec.rb +0 -18
- data/spec/rubocop/cops/avoid_perlisms_spec.rb +0 -44
- data/spec/rubocop/cops/block_comments_spec.rb +0 -25
- data/spec/rubocop/cops/block_nesting_spec.rb +0 -148
- data/spec/rubocop/cops/blocks_spec.rb +0 -33
- data/spec/rubocop/cops/case_indentation_spec.rb +0 -86
- data/spec/rubocop/cops/class_and_module_camel_case_spec.rb +0 -44
- data/spec/rubocop/cops/class_methods_spec.rb +0 -49
- data/spec/rubocop/cops/collection_methods_spec.rb +0 -44
- data/spec/rubocop/cops/colon_method_call_spec.rb +0 -53
- data/spec/rubocop/cops/constant_name_spec.rb +0 -42
- data/spec/rubocop/cops/def_with_parentheses_spec.rb +0 -38
- data/spec/rubocop/cops/def_without_parentheses_spec.rb +0 -32
- data/spec/rubocop/cops/empty_line_between_defs_spec.rb +0 -83
- data/spec/rubocop/cops/empty_lines_spec.rb +0 -38
- data/spec/rubocop/cops/empty_literal_spec.rb +0 -90
- data/spec/rubocop/cops/encoding_spec.rb +0 -47
- data/spec/rubocop/cops/end_of_line_spec.rb +0 -23
- data/spec/rubocop/cops/ensure_return_spec.rb +0 -35
- data/spec/rubocop/cops/eval_spec.rb +0 -39
- data/spec/rubocop/cops/favor_join_spec.rb +0 -35
- data/spec/rubocop/cops/favor_modifier_spec.rb +0 -146
- data/spec/rubocop/cops/favor_percent_r_spec.rb +0 -29
- data/spec/rubocop/cops/favor_sprintf_spec.rb +0 -51
- data/spec/rubocop/cops/favor_unless_over_negated_if_spec.rb +0 -62
- data/spec/rubocop/cops/favor_until_over_negated_while_spec.rb +0 -45
- data/spec/rubocop/cops/handle_exceptions_spec.rb +0 -34
- data/spec/rubocop/cops/hash_syntax_spec.rb +0 -49
- data/spec/rubocop/cops/if_with_semicolon_spec.rb +0 -23
- data/spec/rubocop/cops/lambda_spec.rb +0 -43
- data/spec/rubocop/cops/leading_comment_space_spec.rb +0 -54
- data/spec/rubocop/cops/line_continuation_spec.rb +0 -24
- data/spec/rubocop/cops/line_length_spec.rb +0 -23
- data/spec/rubocop/cops/loop_spec.rb +0 -31
- data/spec/rubocop/cops/method_and_variable_snake_case_spec.rb +0 -93
- data/spec/rubocop/cops/method_length_spec.rb +0 -147
- data/spec/rubocop/cops/multiline_if_then_spec.rb +0 -79
- data/spec/rubocop/cops/not_spec.rb +0 -26
- data/spec/rubocop/cops/numeric_literals_spec.rb +0 -49
- data/spec/rubocop/cops/one_line_conditional_spec.rb +0 -16
- data/spec/rubocop/cops/op_method_spec.rb +0 -78
- data/spec/rubocop/cops/parameter_lists_spec.rb +0 -24
- data/spec/rubocop/cops/parentheses_around_condition_spec.rb +0 -61
- data/spec/rubocop/cops/percent_r_spec.rb +0 -29
- data/spec/rubocop/cops/proc_spec.rb +0 -26
- data/spec/rubocop/cops/reduce_arguments_spec.rb +0 -57
- data/spec/rubocop/cops/rescue_exception_spec.rb +0 -125
- data/spec/rubocop/cops/rescue_modifier_spec.rb +0 -37
- data/spec/rubocop/cops/semicolon_spec.rb +0 -88
- data/spec/rubocop/cops/single_line_methods_spec.rb +0 -50
- data/spec/rubocop/cops/space_after_colon_spec.rb +0 -27
- data/spec/rubocop/cops/space_after_comma_spec.rb +0 -29
- data/spec/rubocop/cops/space_after_control_keyword_spec.rb +0 -67
- data/spec/rubocop/cops/space_after_semicolon_spec.rb +0 -22
- data/spec/rubocop/cops/space_around_braces_spec.rb +0 -47
- data/spec/rubocop/cops/space_around_equals_in_default_parameter_spec.rb +0 -32
- data/spec/rubocop/cops/space_around_operators_spec.rb +0 -209
- data/spec/rubocop/cops/space_inside_brackets_spec.rb +0 -49
- data/spec/rubocop/cops/space_inside_hash_literal_braces_spec.rb +0 -86
- data/spec/rubocop/cops/space_inside_parens_spec.rb +0 -31
- data/spec/rubocop/cops/string_literals_spec.rb +0 -58
- data/spec/rubocop/cops/symbol_array_spec.rb +0 -41
- data/spec/rubocop/cops/symbol_name_spec.rb +0 -119
- data/spec/rubocop/cops/syntax_spec.rb +0 -41
- data/spec/rubocop/cops/tab_spec.rb +0 -21
- data/spec/rubocop/cops/ternary_operator_spec.rb +0 -40
- data/spec/rubocop/cops/trailing_whitespace_spec.rb +0 -27
- data/spec/rubocop/cops/trivial_accessors_spec.rb +0 -337
- data/spec/rubocop/cops/unless_else_spec.rb +0 -29
- data/spec/rubocop/cops/variable_interpolation_spec.rb +0 -49
- data/spec/rubocop/cops/when_then_spec.rb +0 -38
- data/spec/rubocop/cops/word_array_spec.rb +0 -47
- data/spec/rubocop/reports/emacs_style_spec.rb +0 -25
- data/spec/rubocop/reports/report_spec.rb +0 -29
@@ -0,0 +1,24 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Rubocop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# This cop looks for trailing whitespace in the source code.
|
7
|
+
class TrailingWhitespace < Cop
|
8
|
+
MSG = 'Trailing whitespace detected.'
|
9
|
+
|
10
|
+
def inspect(source_buffer, source, tokens, ast, comments)
|
11
|
+
source.each_with_index do |line, index|
|
12
|
+
if line =~ /.*[ \t]+$/
|
13
|
+
add_offence(:convention,
|
14
|
+
source_range(source_buffer, source[0...index],
|
15
|
+
line.rstrip.length,
|
16
|
+
line.length - line.rstrip.length),
|
17
|
+
MSG)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Rubocop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# This cop looks for trivial reader/writer methods, that could
|
7
|
+
# have been created with the attr_* family of functions automatically.
|
8
|
+
class TrivialAccessors < Cop
|
9
|
+
MSG = 'Use attr_%s to define trivial %s methods.'
|
10
|
+
|
11
|
+
def on_def(node)
|
12
|
+
method_name, args, body = *node
|
13
|
+
|
14
|
+
kind = if body && body.type == :ivar
|
15
|
+
'reader'
|
16
|
+
elsif args.children.size == 1 &&
|
17
|
+
body && body.type == :ivasgn &&
|
18
|
+
body.children[1] && body.children[1].type == :lvar &&
|
19
|
+
method_name != :initialize
|
20
|
+
'writer'
|
21
|
+
end
|
22
|
+
if kind
|
23
|
+
add_offence(:convention, node.loc.keyword,
|
24
|
+
sprintf(MSG, kind, kind))
|
25
|
+
end
|
26
|
+
|
27
|
+
super
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Rubocop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# This cop looks for *unless* expressions with *else* clauses.
|
7
|
+
class UnlessElse < Cop
|
8
|
+
MSG = 'Never use unless with else. Rewrite these with the ' +
|
9
|
+
'positive case first.'
|
10
|
+
|
11
|
+
def on_if(node)
|
12
|
+
loc = node.loc
|
13
|
+
|
14
|
+
# discard ternary ops and modifier if/unless nodes
|
15
|
+
return unless loc.respond_to?(:keyword) && loc.respond_to?(:else)
|
16
|
+
|
17
|
+
if loc.keyword.is?('unless') && loc.else
|
18
|
+
add_offence(:convention, loc.expression, MSG)
|
19
|
+
end
|
20
|
+
|
21
|
+
super
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Rubocop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# This cop checks for variable interpolation (like "#@ivar").
|
7
|
+
class VariableInterpolation < Cop
|
8
|
+
MSG = 'Replace interpolated var %s with expression #{%s}.'
|
9
|
+
|
10
|
+
def on_dstr(node)
|
11
|
+
var_nodes(node.children).each do |v|
|
12
|
+
var = (v.type == :nth_ref ? '$' : '') + v.to_a[0].to_s
|
13
|
+
|
14
|
+
if node.loc.expression.source.include?("##{var}")
|
15
|
+
add_offence(:convention,
|
16
|
+
v.loc.expression,
|
17
|
+
sprintf(MSG, var, var))
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
super
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def var_nodes(nodes)
|
27
|
+
nodes.select { |n| [:ivar, :cvar, :gvar, :nth_ref].include?(n.type) }
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Rubocop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# This cop checks for *when;* uses in *case* expressions.
|
7
|
+
class WhenThen < Cop
|
8
|
+
MSG = 'Never use "when x;". Use "when x then" instead.'
|
9
|
+
|
10
|
+
def on_when(node)
|
11
|
+
if node.loc.begin && node.loc.begin.is?(';')
|
12
|
+
add_offence(:convention, node.loc.begin, MSG)
|
13
|
+
do_autocorrect(node)
|
14
|
+
end
|
15
|
+
|
16
|
+
super
|
17
|
+
end
|
18
|
+
|
19
|
+
def autocorrect_action(node)
|
20
|
+
replace(node.loc.begin, ' then')
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Rubocop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# Checks for uses of `do` in multi-line `while/until` statements.
|
7
|
+
class WhileUntilDo < Cop
|
8
|
+
def on_while(node)
|
9
|
+
handle(node)
|
10
|
+
|
11
|
+
super
|
12
|
+
end
|
13
|
+
|
14
|
+
def on_until(node)
|
15
|
+
handle(node)
|
16
|
+
|
17
|
+
super
|
18
|
+
end
|
19
|
+
|
20
|
+
def handle(node)
|
21
|
+
length = node.loc.expression.source.lines.to_a.size
|
22
|
+
|
23
|
+
if length > 1
|
24
|
+
if node.loc.begin && node.loc.begin.is?('do')
|
25
|
+
add_offence(:convention,
|
26
|
+
node.loc.begin,
|
27
|
+
error_message(node.type))
|
28
|
+
do_autocorrect(node)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def error_message(node_type)
|
36
|
+
format('Never use `do` with multi-line `%s`.', node_type)
|
37
|
+
end
|
38
|
+
|
39
|
+
def autocorrect_action(node)
|
40
|
+
remove(node.loc.begin)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Rubocop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# This cop checks for array literals made up of word-like
|
7
|
+
# strings, that are not using the %w() syntax.
|
8
|
+
class WordArray < Cop
|
9
|
+
MSG = 'Use %w or %W for array of words.'
|
10
|
+
|
11
|
+
def on_array(node)
|
12
|
+
return unless node.loc.begin && node.loc.begin.is?('[')
|
13
|
+
|
14
|
+
array_elems = node.children
|
15
|
+
|
16
|
+
# no need to check empty arrays
|
17
|
+
return unless array_elems && array_elems.size > 1
|
18
|
+
|
19
|
+
string_array = array_elems.all? { |e| e.type == :str }
|
20
|
+
|
21
|
+
if string_array && !complex_content?(array_elems)
|
22
|
+
add_offence(:convention, node.loc.expression, MSG)
|
23
|
+
end
|
24
|
+
|
25
|
+
super
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def complex_content?(arr_sexp)
|
31
|
+
arr_sexp.each do |s|
|
32
|
+
source = s.loc.expression.source
|
33
|
+
unless source.start_with?('?') # %W(\r \n) can replace [?\r, ?\n]
|
34
|
+
str_content = Util.strip_quotes(source)
|
35
|
+
return true unless str_content =~ /\A[\w-]+\z/
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
false
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/lib/rubocop/cop/util.rb
CHANGED
@@ -0,0 +1,280 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Rubocop
|
4
|
+
module Cop
|
5
|
+
# This module provides a way to track local variables and scopes of Ruby.
|
6
|
+
# This is intended to be used as mix-in, and the user class may override
|
7
|
+
# some of hook methods.
|
8
|
+
module VariableInspector
|
9
|
+
VARIABLE_ASSIGNMENT_TYPES = [:lvasgn].freeze
|
10
|
+
ARGUMENT_DECLARATION_TYPES = [
|
11
|
+
:arg, :optarg, :restarg, :blockarg,
|
12
|
+
:kwarg, :kwoptarg, :kwsplatarg,
|
13
|
+
:shadowarg
|
14
|
+
].freeze
|
15
|
+
VARIABLE_DECLARATION_TYPES =
|
16
|
+
(VARIABLE_ASSIGNMENT_TYPES + ARGUMENT_DECLARATION_TYPES).freeze
|
17
|
+
VARIABLE_USE_TYPES = [:lvar].freeze
|
18
|
+
SCOPE_TYPES = [:module, :class, :sclass, :def, :defs, :block].freeze
|
19
|
+
|
20
|
+
# A VariableEntry represents existance of a local variable.
|
21
|
+
# This holds a variable declaration node,
|
22
|
+
# and some states of the variable.
|
23
|
+
class VariableEntry
|
24
|
+
attr_reader :node
|
25
|
+
attr_accessor :used
|
26
|
+
alias_method :used?, :used
|
27
|
+
|
28
|
+
def initialize(node)
|
29
|
+
unless VARIABLE_DECLARATION_TYPES.include?(node.type)
|
30
|
+
fail ArgumentError,
|
31
|
+
"Node type must be any of #{VARIABLE_DECLARATION_TYPES}, " +
|
32
|
+
"passed #{node.type}"
|
33
|
+
end
|
34
|
+
@node = node
|
35
|
+
@used = false
|
36
|
+
end
|
37
|
+
|
38
|
+
def name
|
39
|
+
@node.children.first
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# A Scope represents a context of local variable visibility.
|
44
|
+
# This is a place where local variables belong to.
|
45
|
+
# A scope instance holds a scope node and variable entries.
|
46
|
+
class Scope
|
47
|
+
attr_reader :node, :variable_entries
|
48
|
+
|
49
|
+
def initialize(node)
|
50
|
+
# Accept begin node for top level scope.
|
51
|
+
unless SCOPE_TYPES.include?(node.type) || node.type == :begin
|
52
|
+
fail ArgumentError,
|
53
|
+
"Node type must be any of #{SCOPE_TYPES}, " +
|
54
|
+
"passed #{node.type}"
|
55
|
+
end
|
56
|
+
@node = node
|
57
|
+
@variable_entries = {}
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
# A VariableTable manages the lifetime of all scopes and local variables
|
62
|
+
# in a program.
|
63
|
+
# This holds scopes as stack structure, and provides a way to add local
|
64
|
+
# variables to current scope and find local variables by considering
|
65
|
+
# variable visibility of the current scope.
|
66
|
+
class VariableTable
|
67
|
+
def initialize(hook_receiver = nil)
|
68
|
+
@hook_receiver = hook_receiver
|
69
|
+
end
|
70
|
+
|
71
|
+
def invoke_hook(hook_name, *args)
|
72
|
+
@hook_receiver.send(hook_name, *args) if @hook_receiver
|
73
|
+
end
|
74
|
+
|
75
|
+
def scope_stack
|
76
|
+
@scope_stack ||= []
|
77
|
+
end
|
78
|
+
|
79
|
+
def push_scope(scope_node)
|
80
|
+
scope = Scope.new(scope_node)
|
81
|
+
invoke_hook(:before_entering_scope, scope)
|
82
|
+
scope_stack.push(scope)
|
83
|
+
invoke_hook(:after_entering_scope, scope)
|
84
|
+
scope
|
85
|
+
end
|
86
|
+
|
87
|
+
def pop_scope
|
88
|
+
scope = current_scope
|
89
|
+
invoke_hook(:before_leaving_scope, scope)
|
90
|
+
scope_stack.pop
|
91
|
+
invoke_hook(:after_leaving_scope, scope)
|
92
|
+
scope
|
93
|
+
end
|
94
|
+
|
95
|
+
def current_scope
|
96
|
+
scope_stack.last
|
97
|
+
end
|
98
|
+
|
99
|
+
def current_scope_level
|
100
|
+
scope_stack.count
|
101
|
+
end
|
102
|
+
|
103
|
+
def add_variable_entry(variable_declaration_node)
|
104
|
+
entry = VariableEntry.new(variable_declaration_node)
|
105
|
+
invoke_hook(:before_declaring_variable, entry)
|
106
|
+
current_scope.variable_entries[entry.name] = entry
|
107
|
+
invoke_hook(:after_declaring_variable, entry)
|
108
|
+
entry
|
109
|
+
end
|
110
|
+
|
111
|
+
def find_variable_entry(variable_name)
|
112
|
+
scope_stack.reverse_each do |scope|
|
113
|
+
entry = scope.variable_entries[variable_name]
|
114
|
+
return entry if entry
|
115
|
+
# Only block scope allows referencing outer scope variables.
|
116
|
+
return nil unless scope.node.type == :block
|
117
|
+
end
|
118
|
+
nil
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
# This provides a way to scan all nodes only in current scope.
|
123
|
+
class NodeScanner
|
124
|
+
def self.scan_nodes_in_scope(origin_node, &block)
|
125
|
+
new.scan_nodes_in_scope(origin_node, &block)
|
126
|
+
end
|
127
|
+
|
128
|
+
def initialize
|
129
|
+
@node_index = -1
|
130
|
+
end
|
131
|
+
|
132
|
+
def scan_nodes_in_scope(origin_node, &block)
|
133
|
+
origin_node.children.each do |child|
|
134
|
+
next unless child.is_a?(Parser::AST::Node)
|
135
|
+
|
136
|
+
node = child
|
137
|
+
@node_index += 1
|
138
|
+
|
139
|
+
catch(:skip_children) do
|
140
|
+
yield node, @node_index
|
141
|
+
|
142
|
+
# Do not go into inner scope.
|
143
|
+
unless SCOPE_TYPES.include?(node.type)
|
144
|
+
scan_nodes_in_scope(node, &block)
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
def variable_table
|
152
|
+
@variable_table ||= VariableTable.new(self)
|
153
|
+
end
|
154
|
+
|
155
|
+
# Starting point.
|
156
|
+
def inspect_variables(root_node)
|
157
|
+
return unless root_node
|
158
|
+
|
159
|
+
# Wrap with begin node if it's standalone node.
|
160
|
+
unless root_node.type == :begin
|
161
|
+
root_node = Parser::AST::Node.new(:begin, [root_node])
|
162
|
+
end
|
163
|
+
|
164
|
+
inspect_variables_in_scope(root_node)
|
165
|
+
end
|
166
|
+
|
167
|
+
# This is called for each scope recursively.
|
168
|
+
def inspect_variables_in_scope(scope_node)
|
169
|
+
variable_table.push_scope(scope_node)
|
170
|
+
|
171
|
+
NodeScanner.scan_nodes_in_scope(scope_node) do |node, index|
|
172
|
+
if scope_node.type == :block && index == 0 && node.type == :send
|
173
|
+
# Avoid processing method argument nodes of outer scope
|
174
|
+
# in current block scope.
|
175
|
+
# See #process_node.
|
176
|
+
throw :skip_children
|
177
|
+
elsif [:sclass, :defs].include?(scope_node.type) && index == 0
|
178
|
+
throw :skip_children
|
179
|
+
end
|
180
|
+
|
181
|
+
process_node(node)
|
182
|
+
end
|
183
|
+
|
184
|
+
variable_table.pop_scope
|
185
|
+
end
|
186
|
+
|
187
|
+
def process_node(node)
|
188
|
+
case node.type
|
189
|
+
when *ARGUMENT_DECLARATION_TYPES
|
190
|
+
variable_table.add_variable_entry(node)
|
191
|
+
when *VARIABLE_ASSIGNMENT_TYPES
|
192
|
+
variable_name = node.children.first
|
193
|
+
variable_entry = variable_table.find_variable_entry(variable_name)
|
194
|
+
if variable_entry
|
195
|
+
variable_entry.used = true
|
196
|
+
else
|
197
|
+
variable_table.add_variable_entry(node)
|
198
|
+
end
|
199
|
+
when *VARIABLE_USE_TYPES
|
200
|
+
variable_name = node.children.first
|
201
|
+
variable_entry = variable_table.find_variable_entry(variable_name)
|
202
|
+
unless variable_entry
|
203
|
+
fail "Using undeclared local variable \"#{variable_name}\" " +
|
204
|
+
"at #{node.loc.expression}, #{node.inspect}"
|
205
|
+
end
|
206
|
+
variable_entry.used = true
|
207
|
+
when :block
|
208
|
+
# The variable foo belongs to the top level scope,
|
209
|
+
# but in AST, it's under the block node.
|
210
|
+
#
|
211
|
+
# Ruby:
|
212
|
+
# some_method(foo = 1) do
|
213
|
+
# end
|
214
|
+
# puts foo
|
215
|
+
#
|
216
|
+
# AST:
|
217
|
+
# (begin
|
218
|
+
# (block
|
219
|
+
# (send nil :some_method
|
220
|
+
# (lvasgn :foo
|
221
|
+
# (int 1)))
|
222
|
+
# (args) nil)
|
223
|
+
# (send nil :puts
|
224
|
+
# (lvar :foo)))
|
225
|
+
#
|
226
|
+
# So the nodes of the method argument need to be processed
|
227
|
+
# in current scope before dive into the block scope.
|
228
|
+
NodeScanner.scan_nodes_in_scope(node.children.first) do |n|
|
229
|
+
process_node(n)
|
230
|
+
end
|
231
|
+
# Now go into the block scope.
|
232
|
+
inspect_variables_in_scope(node)
|
233
|
+
when :sclass, :defs
|
234
|
+
# Same thing.
|
235
|
+
#
|
236
|
+
# Ruby:
|
237
|
+
# instance = Object.new
|
238
|
+
# class << instance
|
239
|
+
# foo = 1
|
240
|
+
# end
|
241
|
+
#
|
242
|
+
# AST:
|
243
|
+
# (begin
|
244
|
+
# (lvasgn :instance
|
245
|
+
# (send
|
246
|
+
# (const nil :Object) :new))
|
247
|
+
# (sclass
|
248
|
+
# (lvar :instance)
|
249
|
+
# (begin
|
250
|
+
# (lvasgn :foo
|
251
|
+
# (int 1))
|
252
|
+
process_node(node.children.first)
|
253
|
+
inspect_variables_in_scope(node)
|
254
|
+
when *SCOPE_TYPES
|
255
|
+
inspect_variables_in_scope(node)
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
# Hooks
|
260
|
+
|
261
|
+
def before_entering_scope(scope)
|
262
|
+
end
|
263
|
+
|
264
|
+
def after_entering_scope(scope)
|
265
|
+
end
|
266
|
+
|
267
|
+
def before_leaving_scope(scope)
|
268
|
+
end
|
269
|
+
|
270
|
+
def after_leaving_scope(scope)
|
271
|
+
end
|
272
|
+
|
273
|
+
def before_declaring_variable(variable_entry)
|
274
|
+
end
|
275
|
+
|
276
|
+
def after_declaring_variable(variable_entry)
|
277
|
+
end
|
278
|
+
end
|
279
|
+
end
|
280
|
+
end
|