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,36 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Rubocop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# Checks for uses of double quotes where single quotes would do.
|
7
|
+
class StringLiterals < Cop
|
8
|
+
MSG = "Prefer single-quoted strings when you don't need " +
|
9
|
+
'string interpolation or special symbols.'
|
10
|
+
|
11
|
+
def on_str(node)
|
12
|
+
# Constants like __FILE__ are handled as strings,
|
13
|
+
# but don't respond to begin.
|
14
|
+
return unless node.loc.respond_to?(:begin)
|
15
|
+
|
16
|
+
# regex matches IF there is a ' or there is a \\ in the string that
|
17
|
+
# is not preceeded/followed by another \\ (e.g. "\\x34") but not
|
18
|
+
# "\\\\"
|
19
|
+
if node.loc.expression.source !~ /('|([^\\]|\A)\\([^\\]|\Z))/ &&
|
20
|
+
node.loc.begin.is?('"')
|
21
|
+
add_offence(:convention, node.loc.expression, MSG)
|
22
|
+
do_autocorrect(node)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
alias_method :on_dstr, :ignore_node
|
27
|
+
alias_method :on_regexp, :ignore_node
|
28
|
+
|
29
|
+
def autocorrect_action(node)
|
30
|
+
replace(node.loc.begin, "'")
|
31
|
+
replace(node.loc.end, "'")
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,314 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# rubocop:disable SymbolName
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
module Style
|
8
|
+
# Common functionality for checking surrounding space.
|
9
|
+
module SurroundingSpace
|
10
|
+
def space_between?(t1, t2)
|
11
|
+
char_preceding_2nd_token =
|
12
|
+
@source[t2.pos.line - 1][t2.pos.column - 1]
|
13
|
+
if char_preceding_2nd_token == '+' && t1.type != :tPLUS
|
14
|
+
# Special case. A unary plus is not present in the tokens.
|
15
|
+
char_preceding_2nd_token =
|
16
|
+
@source[t2.pos.line - 1][t2.pos.column - 2]
|
17
|
+
end
|
18
|
+
t2.pos.line > t1.pos.line || char_preceding_2nd_token == ' '
|
19
|
+
end
|
20
|
+
|
21
|
+
def index_of_first_token(node, tokens)
|
22
|
+
@token_table ||= build_token_table(tokens)
|
23
|
+
b = node.loc.expression.begin
|
24
|
+
@token_table[[b.line, b.column]]
|
25
|
+
end
|
26
|
+
|
27
|
+
def index_of_last_token(node, tokens)
|
28
|
+
@token_table ||= build_token_table(tokens)
|
29
|
+
e = node.loc.expression.end
|
30
|
+
(0...e.column).to_a.reverse.find do |c|
|
31
|
+
ix = @token_table[[e.line, c]]
|
32
|
+
return ix if ix
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def build_token_table(tokens)
|
37
|
+
table = {}
|
38
|
+
tokens.each_with_index do |t, ix|
|
39
|
+
table[[t.pos.line, t.pos.column]] = ix
|
40
|
+
end
|
41
|
+
table
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# Checks that operators have space around them, except for **
|
46
|
+
# which should not have surrounding space.
|
47
|
+
class SpaceAroundOperators < Cop
|
48
|
+
include SurroundingSpace
|
49
|
+
MSG_MISSING = "Surrounding space missing for operator '%s'."
|
50
|
+
MSG_DETECTED = 'Space around operator ** detected.'
|
51
|
+
|
52
|
+
BINARY_OPERATORS =
|
53
|
+
[:tEQL, :tAMPER2, :tPIPE, :tCARET, :tPLUS, :tMINUS, :tSTAR2,
|
54
|
+
:tDIVIDE, :tPERCENT, :tEH, :tCOLON, :tANDOP, :tOROP, :tMATCH,
|
55
|
+
:tNMATCH, :tEQ, :tNEQ, :tGT, :tRSHFT, :tGEQ, :tLT,
|
56
|
+
:tLSHFT, :tLEQ, :tASSOC, :tEQQ, :tCMP, :tOP_ASGN]
|
57
|
+
|
58
|
+
def inspect(source_buffer, source, tokens, sexp, comments)
|
59
|
+
return unless sexp
|
60
|
+
|
61
|
+
@source = source
|
62
|
+
positions_not_to_check = get_positions_not_to_check(tokens, sexp)
|
63
|
+
|
64
|
+
tokens.each_cons(3) do |token_before, token, token_after|
|
65
|
+
next if token_before.type == :kDEF # TODO: remove?
|
66
|
+
next if token_before.type == :tDOT # Called as method.
|
67
|
+
next if positions_not_to_check.include?(token.pos)
|
68
|
+
|
69
|
+
case token.type
|
70
|
+
when :tPOW
|
71
|
+
if has_space?(token_before, token, token_after)
|
72
|
+
add_offence(:convention, token.pos, MSG_DETECTED)
|
73
|
+
end
|
74
|
+
when *BINARY_OPERATORS
|
75
|
+
check_missing_space(token_before, token, token_after)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# Returns an array of positions marking the tokens that this cop
|
81
|
+
# should not check, either because the token is not an operator
|
82
|
+
# or because another cop does the check.
|
83
|
+
def get_positions_not_to_check(tokens, sexp)
|
84
|
+
positions_not_to_check = []
|
85
|
+
do_not_check_block_arg_pipes(sexp, positions_not_to_check)
|
86
|
+
do_not_check_param_default(tokens, sexp, positions_not_to_check)
|
87
|
+
do_not_check_class_lshift_self(tokens, sexp, positions_not_to_check)
|
88
|
+
do_not_check_def_things(tokens, sexp, positions_not_to_check)
|
89
|
+
do_not_check_singleton_operator_defs(tokens, sexp,
|
90
|
+
positions_not_to_check)
|
91
|
+
positions_not_to_check
|
92
|
+
end
|
93
|
+
|
94
|
+
def do_not_check_block_arg_pipes(sexp, positions_not_to_check)
|
95
|
+
# each { |a| }
|
96
|
+
# ^ ^
|
97
|
+
on_node(:block, sexp) do |b|
|
98
|
+
on_node(:args, b) do |a|
|
99
|
+
positions_not_to_check << a.loc.begin << a.loc.end if a.loc.begin
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def do_not_check_param_default(tokens, sexp, positions_not_to_check)
|
105
|
+
# func(a, b=nil)
|
106
|
+
# ^
|
107
|
+
on_node(:optarg, sexp) do |optarg|
|
108
|
+
_arg, equals, _value = tokens[index_of_first_token(optarg, tokens),
|
109
|
+
3]
|
110
|
+
positions_not_to_check << equals.pos
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def do_not_check_class_lshift_self(tokens,
|
115
|
+
sexp,
|
116
|
+
positions_not_to_check)
|
117
|
+
# class <<self
|
118
|
+
# ^
|
119
|
+
on_node(:sclass, sexp) do |sclass|
|
120
|
+
ix = index_of_first_token(sclass, tokens)
|
121
|
+
if tokens[ix, 2].map(&:type) == [:kCLASS, :tLSHFT]
|
122
|
+
positions_not_to_check << tokens[ix + 1].pos
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
def do_not_check_def_things(tokens, sexp, positions_not_to_check)
|
128
|
+
# def +(other)
|
129
|
+
# ^
|
130
|
+
on_node(:def, sexp) do |def_node|
|
131
|
+
# def each &block
|
132
|
+
# ^
|
133
|
+
# def each *args
|
134
|
+
# ^
|
135
|
+
on_node([:blockarg, :restarg], def_node) do |arg_node|
|
136
|
+
positions_not_to_check <<
|
137
|
+
tokens[index_of_first_token(arg_node, tokens)].pos
|
138
|
+
end
|
139
|
+
positions_not_to_check <<
|
140
|
+
tokens[index_of_first_token(def_node, tokens) + 1].pos
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
def do_not_check_singleton_operator_defs(tokens, sexp,
|
145
|
+
positions_not_to_check)
|
146
|
+
# def self.===(other)
|
147
|
+
# ^
|
148
|
+
on_node(:defs, sexp) do |defs_node|
|
149
|
+
_receiver, name, _args = *defs_node
|
150
|
+
ix = index_of_first_token(defs_node, tokens)
|
151
|
+
name_token = tokens[ix..-1].find { |t| t.text == name.to_s }
|
152
|
+
positions_not_to_check << name_token.pos
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
def check_missing_space(token_before, token, token_after)
|
157
|
+
unless has_space?(token_before, token, token_after)
|
158
|
+
text = token.text.to_s + (token.type == :tOP_ASGN ? '=' : '')
|
159
|
+
add_offence(:convention, token.pos, MSG_MISSING % text)
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
def has_space?(token_before, token, token_after)
|
164
|
+
space_between?(token_before, token) && space_between?(token,
|
165
|
+
token_after)
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
# Checks that block braces have surrounding space.
|
170
|
+
class SpaceAroundBraces < Cop
|
171
|
+
include SurroundingSpace
|
172
|
+
MSG_LEFT = "Surrounding space missing for '{'."
|
173
|
+
MSG_RIGHT = "Space missing to the left of '}'."
|
174
|
+
|
175
|
+
def inspect(source_buffer, source, tokens, sexp, comments)
|
176
|
+
return unless sexp
|
177
|
+
@source = source
|
178
|
+
positions_not_to_check = get_positions_not_to_check(tokens, sexp)
|
179
|
+
tokens.each_cons(2) do |t1, t2|
|
180
|
+
next if ([t1.pos, t2.pos] - positions_not_to_check).size < 2
|
181
|
+
|
182
|
+
type1, type2 = t1.type, t2.type
|
183
|
+
# :tLBRACE in hash literals, :tLCURLY otherwise.
|
184
|
+
next if [:tLCURLY, :tLBRACE].include?(type1) && type2 == :tRCURLY
|
185
|
+
check(t1, t2, MSG_LEFT) if type1 == :tLCURLY || type2 == :tLCURLY
|
186
|
+
check(t1, t2, MSG_RIGHT) if type2 == :tRCURLY
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
def get_positions_not_to_check(tokens, sexp)
|
191
|
+
positions_not_to_check = []
|
192
|
+
|
193
|
+
on_node(:hash, sexp) do |hash|
|
194
|
+
b_ix = index_of_first_token(hash, tokens)
|
195
|
+
e_ix = index_of_last_token(hash, tokens)
|
196
|
+
positions_not_to_check << tokens[b_ix].pos << tokens[e_ix].pos
|
197
|
+
end
|
198
|
+
|
199
|
+
# TODO: Check braces inside string/symbol/regexp/xstr interpolation.
|
200
|
+
on_node([:dstr, :dsym, :regexp, :xstr], sexp) do |s|
|
201
|
+
b_ix = index_of_first_token(s, tokens)
|
202
|
+
e_ix = index_of_last_token(s, tokens)
|
203
|
+
tokens[b_ix..e_ix].each do |t|
|
204
|
+
positions_not_to_check << t.pos if t.type == :tRCURLY
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
positions_not_to_check
|
209
|
+
end
|
210
|
+
|
211
|
+
def check(t1, t2, msg)
|
212
|
+
unless space_between?(t1, t2)
|
213
|
+
brace_token = msg == MSG_LEFT ? t1 : t2
|
214
|
+
add_offence(:convention, brace_token.pos, msg)
|
215
|
+
end
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
# Common functionality for checking for spaces inside various
|
220
|
+
# kinds of parentheses.
|
221
|
+
module SpaceInside
|
222
|
+
include SurroundingSpace
|
223
|
+
MSG = 'Space inside %s detected.'
|
224
|
+
|
225
|
+
def inspect(source_buffer, source, tokens, sexp, comments)
|
226
|
+
@source = source
|
227
|
+
left, right, kind = specifics
|
228
|
+
tokens.each_cons(2) do |t1, t2|
|
229
|
+
if t1.type == left || t2.type == right
|
230
|
+
if t2.pos.line == t1.pos.line && space_between?(t1, t2)
|
231
|
+
space_range = Parser::Source::Range.new(source_buffer,
|
232
|
+
t1.pos.end_pos,
|
233
|
+
t2.pos.begin_pos)
|
234
|
+
add_offence(:convention, space_range, format(MSG, kind))
|
235
|
+
end
|
236
|
+
end
|
237
|
+
end
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
# Checks for spaces inside ordinary round parentheses.
|
242
|
+
class SpaceInsideParens < Cop
|
243
|
+
include SpaceInside
|
244
|
+
|
245
|
+
def specifics
|
246
|
+
[:tLPAREN2, :tRPAREN, 'parentheses']
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|
250
|
+
# Checks for spaces inside square brackets.
|
251
|
+
class SpaceInsideBrackets < Cop
|
252
|
+
include SpaceInside
|
253
|
+
|
254
|
+
def specifics
|
255
|
+
[:tLBRACK, :tRBRACK, 'square brackets']
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
# Checks that braces used for hash literals have or don't have
|
260
|
+
# surrounding space depending on configuration.
|
261
|
+
class SpaceInsideHashLiteralBraces < Cop
|
262
|
+
include SurroundingSpace
|
263
|
+
MSG = 'Space inside hash literal braces %s.'
|
264
|
+
|
265
|
+
def inspect(source_buffer, source, tokens, sexp, comments)
|
266
|
+
return unless sexp
|
267
|
+
@source = source
|
268
|
+
on_node(:hash, sexp) do |hash|
|
269
|
+
b_ix = index_of_first_token(hash, tokens)
|
270
|
+
e_ix = index_of_last_token(hash, tokens)
|
271
|
+
if tokens[b_ix].type == :tLBRACE # Hash literal with braces?
|
272
|
+
check(tokens[b_ix], tokens[b_ix + 1])
|
273
|
+
check(tokens[e_ix - 1], tokens[e_ix])
|
274
|
+
end
|
275
|
+
end
|
276
|
+
end
|
277
|
+
|
278
|
+
def check(t1, t2)
|
279
|
+
types = [t1, t2].map(&:type)
|
280
|
+
braces = [:tLBRACE, :tRCURLY]
|
281
|
+
return if types == braces || (braces - types).size == 2
|
282
|
+
# No offence if line break inside.
|
283
|
+
return if t1.pos.line < t2.pos.line
|
284
|
+
has_space = space_between?(t1, t2)
|
285
|
+
is_offence, word = if self.class.config['EnforcedStyleIsWithSpaces']
|
286
|
+
[!has_space, 'missing']
|
287
|
+
else
|
288
|
+
[has_space, 'detected']
|
289
|
+
end
|
290
|
+
add_offence(:convention, t1.pos, sprintf(MSG, word)) if is_offence
|
291
|
+
end
|
292
|
+
end
|
293
|
+
|
294
|
+
# Checks that the equals signs in parameter default assignments
|
295
|
+
# have surrounding space.
|
296
|
+
class SpaceAroundEqualsInParameterDefault < Cop
|
297
|
+
include SurroundingSpace
|
298
|
+
MSG = 'Surrounding space missing in default value assignment.'
|
299
|
+
|
300
|
+
def inspect(source_buffer, source, tokens, sexp, comments)
|
301
|
+
return unless sexp
|
302
|
+
@source = source
|
303
|
+
on_node(:optarg, sexp) do |optarg|
|
304
|
+
index = index_of_first_token(optarg, tokens)
|
305
|
+
arg, equals, value = tokens[index, 3]
|
306
|
+
unless space_between?(arg, equals) && space_between?(equals, value)
|
307
|
+
add_offence(:convention, equals.pos, MSG)
|
308
|
+
end
|
309
|
+
end
|
310
|
+
end
|
311
|
+
end
|
312
|
+
end
|
313
|
+
end
|
314
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Rubocop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# This cop checks for array literals made up of symbols
|
7
|
+
# that are not using the %i() syntax.
|
8
|
+
#
|
9
|
+
# This check makes sense only on Ruby 2.0+.
|
10
|
+
class SymbolArray < Cop
|
11
|
+
MSG = 'Use %i or %I for array of symbols.'
|
12
|
+
|
13
|
+
def on_array(node)
|
14
|
+
# %i and %I were introduced in Ruby 2.0
|
15
|
+
unless RUBY_VERSION < '2.0.0'
|
16
|
+
return unless node.loc.begin && node.loc.begin.is?('[')
|
17
|
+
|
18
|
+
array_elems = node.children
|
19
|
+
|
20
|
+
# no need to check empty arrays
|
21
|
+
return unless array_elems && array_elems.size > 1
|
22
|
+
|
23
|
+
symbol_array = array_elems.all? { |e| e.type == :sym }
|
24
|
+
|
25
|
+
add_offence(:convention, node.loc.expression, MSG) if symbol_array
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Rubocop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# This cop checks whether symbol names are snake_case.
|
7
|
+
# There's also an option to accept CamelCase symbol names as well.
|
8
|
+
class SymbolName < Cop
|
9
|
+
MSG = 'Use snake_case for symbols.'
|
10
|
+
SNAKE_CASE = /^[\da-z_]+[!?=]?$/
|
11
|
+
CAMEL_CASE = /^[A-Z][A-Za-z\d]*$/
|
12
|
+
|
13
|
+
def allow_camel_case?
|
14
|
+
self.class.config['AllowCamelCase']
|
15
|
+
end
|
16
|
+
|
17
|
+
def on_sym(node)
|
18
|
+
sym_name = node.to_a[0]
|
19
|
+
return unless sym_name =~ /^[a-zA-Z]/
|
20
|
+
return if sym_name =~ SNAKE_CASE
|
21
|
+
return if allow_camel_case? && sym_name =~ CAMEL_CASE
|
22
|
+
add_offence(:convention, node.loc.expression, MSG)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Rubocop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# This cop checks for tabs inside the source code.
|
7
|
+
class Tab < Cop
|
8
|
+
MSG = 'Tab detected.'
|
9
|
+
|
10
|
+
def inspect(source_buffer, source, tokens, ast, comments)
|
11
|
+
source.each_with_index do |line, index|
|
12
|
+
match = line.match(/^( *)\t/)
|
13
|
+
if match
|
14
|
+
spaces = match.captures[0]
|
15
|
+
add_offence(:convention,
|
16
|
+
source_range(source_buffer, source[0...index],
|
17
|
+
spaces.length, 8),
|
18
|
+
MSG)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Rubocop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# This cop checks for multi-line ternary op expressions.
|
7
|
+
class MultilineTernaryOperator < Cop
|
8
|
+
MSG =
|
9
|
+
'Avoid multi-line ?: (the ternary operator); use if/unless instead.'
|
10
|
+
|
11
|
+
def on_if(node)
|
12
|
+
loc = node.loc
|
13
|
+
|
14
|
+
# discard non-ternary ops
|
15
|
+
return unless loc.respond_to?(:question)
|
16
|
+
|
17
|
+
if loc.line != loc.colon.line
|
18
|
+
add_offence(:convention, loc.expression, MSG)
|
19
|
+
end
|
20
|
+
|
21
|
+
super
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# This cop checks for nested ternary op expressions.
|
26
|
+
class NestedTernaryOperator < Cop
|
27
|
+
MSG = 'Ternary operators must not be nested. Prefer if/else ' +
|
28
|
+
'constructs instead.'
|
29
|
+
|
30
|
+
def on_if(node)
|
31
|
+
loc = node.loc
|
32
|
+
|
33
|
+
# discard non-ternary ops
|
34
|
+
return unless loc.respond_to?(:question)
|
35
|
+
|
36
|
+
node.children.each do |child|
|
37
|
+
on_node(:if, child) do |c|
|
38
|
+
if c.loc.respond_to?(:question)
|
39
|
+
add_offence(:convention, c.loc.expression, MSG)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
super
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|