rubocop 0.29.1 → 0.30.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.
Potentially problematic release.
This version of rubocop might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +73 -1
- data/README.md +11 -2
- data/config/default.yml +194 -6
- data/config/disabled.yml +25 -1
- data/config/enabled.yml +74 -12
- data/lib/rubocop.rb +19 -2
- data/lib/rubocop/config.rb +23 -3
- data/lib/rubocop/config_loader.rb +9 -1
- data/lib/rubocop/cop/autocorrect_logic.rb +26 -0
- data/lib/rubocop/cop/cop.rb +33 -17
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +16 -4
- data/lib/rubocop/cop/lint/block_alignment.rb +5 -14
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +1 -1
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +61 -0
- data/lib/rubocop/cop/lint/void.rb +11 -3
- data/lib/rubocop/cop/mixin/on_normal_if_unless.rb +17 -0
- data/lib/rubocop/cop/performance/detect.rb +72 -0
- data/lib/rubocop/cop/performance/flat_map.rb +64 -0
- data/lib/rubocop/cop/performance/reverse_each.rb +43 -0
- data/lib/rubocop/cop/performance/sample.rb +58 -0
- data/lib/rubocop/cop/performance/size.rb +64 -0
- data/lib/rubocop/cop/rails/date.rb +121 -0
- data/lib/rubocop/cop/rails/find_by.rb +52 -0
- data/lib/rubocop/cop/rails/find_each.rb +41 -0
- data/lib/rubocop/cop/rails/time_zone.rb +93 -0
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +45 -0
- data/lib/rubocop/cop/style/block_delimiters.rb +186 -0
- data/lib/rubocop/cop/style/closing_parenthesis_indentation.rb +76 -0
- data/lib/rubocop/cop/style/command_literal.rb +120 -0
- data/lib/rubocop/cop/style/copyright.rb +87 -0
- data/lib/rubocop/cop/style/documentation.rb +32 -0
- data/lib/rubocop/cop/style/empty_else.rb +85 -16
- data/lib/rubocop/cop/style/encoding.rb +14 -2
- data/lib/rubocop/cop/style/end_of_line.rb +5 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +86 -23
- data/lib/rubocop/cop/style/if_unless_modifier.rb +15 -0
- data/lib/rubocop/cop/style/indentation_consistency.rb +13 -6
- data/lib/rubocop/cop/style/indentation_width.rb +34 -10
- data/lib/rubocop/cop/style/lambda.rb +32 -17
- data/lib/rubocop/cop/style/line_end_concatenation.rb +4 -0
- data/lib/rubocop/cop/style/missing_else.rb +72 -0
- data/lib/rubocop/cop/style/regexp_literal.rb +89 -58
- data/lib/rubocop/cop/style/space_around_operators.rb +13 -2
- data/lib/rubocop/cop/style/space_before_block_braces.rb +3 -3
- data/lib/rubocop/cop/style/space_inside_block_braces.rb +9 -5
- data/lib/rubocop/cop/style/symbol_literal.rb +36 -0
- data/lib/rubocop/cop/style/trailing_blank_lines.rb +7 -0
- data/lib/rubocop/cop/style/trailing_comma.rb +21 -7
- data/lib/rubocop/cop/style/trivial_accessors.rb +17 -3
- data/lib/rubocop/cop/style/unneeded_capital_w.rb +4 -6
- data/lib/rubocop/cop/style/while_until_modifier.rb +10 -0
- data/lib/rubocop/cop/util.rb +24 -19
- data/lib/rubocop/cop/variable_force.rb +14 -0
- data/lib/rubocop/cop/variable_force/reference.rb +10 -4
- data/lib/rubocop/formatter/html_formatter.rb +10 -4
- data/lib/rubocop/formatter/text_util.rb +5 -7
- data/lib/rubocop/options.rb +47 -45
- data/lib/rubocop/path_util.rb +12 -8
- data/lib/rubocop/processed_source.rb +12 -1
- data/lib/rubocop/rake_task.rb +2 -2
- data/lib/rubocop/version.rb +1 -1
- data/relnotes/v0.30.0.md +145 -0
- data/rubocop.gemspec +15 -3
- metadata +22 -545
- data/.gitignore +0 -54
- data/.rspec +0 -1
- data/.rubocop.yml +0 -11
- data/.rubocop_todo.yml +0 -28
- data/.travis.yml +0 -22
- data/Gemfile +0 -15
- data/Rakefile +0 -41
- data/lib/rubocop/cop/style/blocks.rb +0 -80
- data/lib/rubocop/cop/style/unneeded_percent_x.rb +0 -25
- data/logo/rubocop-final-logo.eps +0 -0
- data/spec/.rubocop.yml +0 -5
- data/spec/fixtures/html_formatter/expected.html +0 -495
- data/spec/fixtures/html_formatter/project/app/controllers/application_controller.rb +0 -5
- data/spec/fixtures/html_formatter/project/app/controllers/books_controller.rb +0 -74
- data/spec/fixtures/html_formatter/project/app/models/book.rb +0 -5
- data/spec/isolated_environment_spec.rb +0 -24
- data/spec/project_spec.rb +0 -119
- data/spec/rubocop/cli_spec.rb +0 -2740
- data/spec/rubocop/comment_config_spec.rb +0 -105
- data/spec/rubocop/config_loader_spec.rb +0 -377
- data/spec/rubocop/config_spec.rb +0 -235
- data/spec/rubocop/config_store_spec.rb +0 -53
- data/spec/rubocop/cop/commissioner_spec.rb +0 -85
- data/spec/rubocop/cop/cop_spec.rb +0 -135
- data/spec/rubocop/cop/corrector_spec.rb +0 -59
- data/spec/rubocop/cop/force_spec.rb +0 -29
- data/spec/rubocop/cop/lint/ambiguous_operator_spec.rb +0 -113
- data/spec/rubocop/cop/lint/ambiguous_regexp_literal_spec.rb +0 -35
- data/spec/rubocop/cop/lint/assignment_in_condition_spec.rb +0 -130
- data/spec/rubocop/cop/lint/block_alignment_spec.rb +0 -533
- data/spec/rubocop/cop/lint/condition_position_spec.rb +0 -51
- data/spec/rubocop/cop/lint/debugger_spec.rb +0 -73
- data/spec/rubocop/cop/lint/def_end_alignment_spec.rb +0 -108
- data/spec/rubocop/cop/lint/deprecated_class_methods_spec.rb +0 -38
- data/spec/rubocop/cop/lint/duplicate_methods_spec.rb +0 -189
- data/spec/rubocop/cop/lint/else_layout_spec.rb +0 -65
- data/spec/rubocop/cop/lint/empty_ensure_spec.rb +0 -27
- data/spec/rubocop/cop/lint/empty_interpolation_spec.rb +0 -18
- data/spec/rubocop/cop/lint/end_alignment_spec.rb +0 -91
- data/spec/rubocop/cop/lint/end_in_method_spec.rb +0 -29
- data/spec/rubocop/cop/lint/ensure_return_spec.rb +0 -39
- data/spec/rubocop/cop/lint/eval_spec.rb +0 -33
- data/spec/rubocop/cop/lint/handle_exceptions_spec.rb +0 -30
- data/spec/rubocop/cop/lint/invalid_character_literal_spec.rb +0 -33
- data/spec/rubocop/cop/lint/literal_in_condition_spec.rb +0 -172
- data/spec/rubocop/cop/lint/literal_in_interpolation_spec.rb +0 -31
- data/spec/rubocop/cop/lint/loop_spec.rb +0 -27
- data/spec/rubocop/cop/lint/parentheses_as_grouped_expression_spec.rb +0 -57
- data/spec/rubocop/cop/lint/require_parentheses_spec.rb +0 -82
- data/spec/rubocop/cop/lint/rescue_exception_spec.rb +0 -123
- data/spec/rubocop/cop/lint/shadowing_outer_local_variable_spec.rb +0 -237
- data/spec/rubocop/cop/lint/space_before_first_arg_spec.rb +0 -66
- data/spec/rubocop/cop/lint/string_conversion_in_interpolation_spec.rb +0 -51
- data/spec/rubocop/cop/lint/syntax_spec.rb +0 -34
- data/spec/rubocop/cop/lint/underscore_prefixed_variable_name_spec.rb +0 -179
- data/spec/rubocop/cop/lint/unreachable_code_spec.rb +0 -63
- data/spec/rubocop/cop/lint/unused_block_argument_spec.rb +0 -231
- data/spec/rubocop/cop/lint/unused_method_argument_spec.rb +0 -278
- data/spec/rubocop/cop/lint/useless_access_modifier_spec.rb +0 -192
- data/spec/rubocop/cop/lint/useless_assignment_spec.rb +0 -1778
- data/spec/rubocop/cop/lint/useless_comparison_spec.rb +0 -30
- data/spec/rubocop/cop/lint/useless_else_without_rescue_spec.rb +0 -48
- data/spec/rubocop/cop/lint/useless_setter_call_spec.rb +0 -211
- data/spec/rubocop/cop/lint/void_spec.rb +0 -64
- data/spec/rubocop/cop/metrics/abc_size_spec.rb +0 -109
- data/spec/rubocop/cop/metrics/block_nesting_spec.rb +0 -156
- data/spec/rubocop/cop/metrics/class_length_spec.rb +0 -131
- data/spec/rubocop/cop/metrics/cyclomatic_complexity_spec.rb +0 -204
- data/spec/rubocop/cop/metrics/line_length_spec.rb +0 -136
- data/spec/rubocop/cop/metrics/method_length_spec.rb +0 -147
- data/spec/rubocop/cop/metrics/parameter_lists_spec.rb +0 -44
- data/spec/rubocop/cop/metrics/perceived_complexity_spec.rb +0 -222
- data/spec/rubocop/cop/offense_spec.rb +0 -133
- data/spec/rubocop/cop/rails/action_filter_spec.rb +0 -64
- data/spec/rubocop/cop/rails/default_scope_spec.rb +0 -37
- data/spec/rubocop/cop/rails/delegate_spec.rb +0 -177
- data/spec/rubocop/cop/rails/has_and_belongs_to_many_spec.rb +0 -13
- data/spec/rubocop/cop/rails/output_spec.rb +0 -37
- data/spec/rubocop/cop/rails/read_write_attribute_spec.rb +0 -130
- data/spec/rubocop/cop/rails/scope_args_spec.rb +0 -25
- data/spec/rubocop/cop/rails/validation_spec.rb +0 -28
- data/spec/rubocop/cop/severity_spec.rb +0 -113
- data/spec/rubocop/cop/style/access_modifier_indentation_spec.rb +0 -421
- data/spec/rubocop/cop/style/accessor_method_name_spec.rb +0 -81
- data/spec/rubocop/cop/style/alias_spec.rb +0 -59
- data/spec/rubocop/cop/style/align_array_spec.rb +0 -123
- data/spec/rubocop/cop/style/align_hash_spec.rb +0 -411
- data/spec/rubocop/cop/style/align_parameters_spec.rb +0 -431
- data/spec/rubocop/cop/style/and_or_spec.rb +0 -235
- data/spec/rubocop/cop/style/array_join_spec.rb +0 -29
- data/spec/rubocop/cop/style/ascii_comments_spec.rb +0 -21
- data/spec/rubocop/cop/style/ascii_identifiers_spec.rb +0 -36
- data/spec/rubocop/cop/style/attr_spec.rb +0 -29
- data/spec/rubocop/cop/style/bare_percent_literals_spec.rb +0 -132
- data/spec/rubocop/cop/style/begin_block_spec.rb +0 -13
- data/spec/rubocop/cop/style/block_comments_spec.rb +0 -45
- data/spec/rubocop/cop/style/block_end_newline_spec.rb +0 -61
- data/spec/rubocop/cop/style/blocks_spec.rb +0 -121
- data/spec/rubocop/cop/style/braces_around_hash_parameters_spec.rb +0 -288
- data/spec/rubocop/cop/style/case_equality_spec.rb +0 -13
- data/spec/rubocop/cop/style/case_indentation_spec.rb +0 -293
- data/spec/rubocop/cop/style/character_literal_spec.rb +0 -37
- data/spec/rubocop/cop/style/class_and_module_camel_case_spec.rb +0 -40
- data/spec/rubocop/cop/style/class_and_module_children_spec.rb +0 -133
- data/spec/rubocop/cop/style/class_check_spec.rb +0 -41
- data/spec/rubocop/cop/style/class_methods_spec.rb +0 -80
- data/spec/rubocop/cop/style/class_vars_spec.rb +0 -19
- data/spec/rubocop/cop/style/collection_methods_spec.rb +0 -48
- data/spec/rubocop/cop/style/colon_method_call_spec.rb +0 -65
- data/spec/rubocop/cop/style/comment_annotation_spec.rb +0 -86
- data/spec/rubocop/cop/style/comment_indentation_spec.rb +0 -179
- data/spec/rubocop/cop/style/constant_name_spec.rb +0 -65
- data/spec/rubocop/cop/style/def_with_parentheses_spec.rb +0 -43
- data/spec/rubocop/cop/style/deprecated_hash_methods_spec.rb +0 -45
- data/spec/rubocop/cop/style/documentation_spec.rb +0 -146
- data/spec/rubocop/cop/style/dot_position_spec.rb +0 -132
- data/spec/rubocop/cop/style/double_negation_spec.rb +0 -22
- data/spec/rubocop/cop/style/each_with_object_spec.rb +0 -73
- data/spec/rubocop/cop/style/else_alignment_spec.rb +0 -506
- data/spec/rubocop/cop/style/empty_else_spec.rb +0 -100
- data/spec/rubocop/cop/style/empty_line_between_defs_spec.rb +0 -135
- data/spec/rubocop/cop/style/empty_lines_around_access_modifier_spec.rb +0 -178
- data/spec/rubocop/cop/style/empty_lines_around_block_body_spec.rb +0 -103
- data/spec/rubocop/cop/style/empty_lines_around_class_body_spec.rb +0 -135
- data/spec/rubocop/cop/style/empty_lines_around_method_body_spec.rb +0 -90
- data/spec/rubocop/cop/style/empty_lines_around_module_body_spec.rb +0 -79
- data/spec/rubocop/cop/style/empty_lines_spec.rb +0 -51
- data/spec/rubocop/cop/style/empty_literal_spec.rb +0 -117
- data/spec/rubocop/cop/style/encoding_spec.rb +0 -139
- data/spec/rubocop/cop/style/end_block_spec.rb +0 -13
- data/spec/rubocop/cop/style/end_of_line_spec.rb +0 -65
- data/spec/rubocop/cop/style/even_odd_spec.rb +0 -164
- data/spec/rubocop/cop/style/extra_spacing_spec.rb +0 -68
- data/spec/rubocop/cop/style/file_name_spec.rb +0 -84
- data/spec/rubocop/cop/style/first_parameter_indentation_spec.rb +0 -304
- data/spec/rubocop/cop/style/flip_flop_spec.rb +0 -23
- data/spec/rubocop/cop/style/for_spec.rb +0 -105
- data/spec/rubocop/cop/style/format_string_spec.rb +0 -184
- data/spec/rubocop/cop/style/global_vars_spec.rb +0 -34
- data/spec/rubocop/cop/style/guard_clause_spec.rb +0 -172
- data/spec/rubocop/cop/style/hash_syntax_spec.rb +0 -137
- data/spec/rubocop/cop/style/if_unless_modifier_spec.rb +0 -146
- data/spec/rubocop/cop/style/if_with_semicolon_spec.rb +0 -24
- data/spec/rubocop/cop/style/indent_array_spec.rb +0 -173
- data/spec/rubocop/cop/style/indent_hash_spec.rb +0 -367
- data/spec/rubocop/cop/style/indentation_consistency_spec.rb +0 -509
- data/spec/rubocop/cop/style/indentation_width_spec.rb +0 -885
- data/spec/rubocop/cop/style/infinite_loop_spec.rb +0 -48
- data/spec/rubocop/cop/style/inline_comment_spec.rb +0 -13
- data/spec/rubocop/cop/style/lambda_call_spec.rb +0 -65
- data/spec/rubocop/cop/style/lambda_spec.rb +0 -76
- data/spec/rubocop/cop/style/leading_comment_space_spec.rb +0 -64
- data/spec/rubocop/cop/style/line_end_concatenation_spec.rb +0 -184
- data/spec/rubocop/cop/style/method_call_parentheses_spec.rb +0 -59
- data/spec/rubocop/cop/style/method_called_on_do_end_block_spec.rb +0 -60
- data/spec/rubocop/cop/style/method_def_parentheses_spec.rb +0 -108
- data/spec/rubocop/cop/style/method_name_spec.rb +0 -125
- data/spec/rubocop/cop/style/module_function_spec.rb +0 -24
- data/spec/rubocop/cop/style/multiline_block_chain_spec.rb +0 -78
- data/spec/rubocop/cop/style/multiline_block_layout_spec.rb +0 -199
- data/spec/rubocop/cop/style/multiline_if_then_spec.rb +0 -134
- data/spec/rubocop/cop/style/multiline_operation_indentation_spec.rb +0 -464
- data/spec/rubocop/cop/style/multiline_ternary_operator_spec.rb +0 -18
- data/spec/rubocop/cop/style/negated_if_spec.rb +0 -102
- data/spec/rubocop/cop/style/negated_while_spec.rb +0 -64
- data/spec/rubocop/cop/style/nested_ternary_operator_spec.rb +0 -21
- data/spec/rubocop/cop/style/next_spec.rb +0 -301
- data/spec/rubocop/cop/style/nil_comparison_spec.rb +0 -29
- data/spec/rubocop/cop/style/non_nil_check_spec.rb +0 -132
- data/spec/rubocop/cop/style/not_spec.rb +0 -28
- data/spec/rubocop/cop/style/numeric_literals_spec.rb +0 -80
- data/spec/rubocop/cop/style/one_line_conditional_spec.rb +0 -13
- data/spec/rubocop/cop/style/op_method_spec.rb +0 -85
- data/spec/rubocop/cop/style/parentheses_around_condition_spec.rb +0 -161
- data/spec/rubocop/cop/style/percent_literal_delimiters_spec.rb +0 -316
- data/spec/rubocop/cop/style/percent_q_literals_spec.rb +0 -122
- data/spec/rubocop/cop/style/perl_backrefs_spec.rb +0 -22
- data/spec/rubocop/cop/style/predicate_name_spec.rb +0 -57
- data/spec/rubocop/cop/style/proc_spec.rb +0 -27
- data/spec/rubocop/cop/style/raise_args_spec.rb +0 -87
- data/spec/rubocop/cop/style/redundant_begin_spec.rb +0 -121
- data/spec/rubocop/cop/style/redundant_exception_spec.rb +0 -59
- data/spec/rubocop/cop/style/redundant_return_spec.rb +0 -171
- data/spec/rubocop/cop/style/redundant_self_spec.rb +0 -186
- data/spec/rubocop/cop/style/regexp_literal_spec.rb +0 -188
- data/spec/rubocop/cop/style/rescue_modifier_spec.rb +0 -116
- data/spec/rubocop/cop/style/self_assignment_spec.rb +0 -49
- data/spec/rubocop/cop/style/semicolon_spec.rb +0 -114
- data/spec/rubocop/cop/style/signal_exception_spec.rb +0 -289
- data/spec/rubocop/cop/style/single_line_block_params_spec.rb +0 -82
- data/spec/rubocop/cop/style/single_line_methods_spec.rb +0 -94
- data/spec/rubocop/cop/style/single_space_before_first_arg_spec.rb +0 -63
- data/spec/rubocop/cop/style/space_after_colon_spec.rb +0 -55
- data/spec/rubocop/cop/style/space_after_comma_spec.rb +0 -30
- data/spec/rubocop/cop/style/space_after_control_keyword_spec.rb +0 -84
- data/spec/rubocop/cop/style/space_after_method_name_spec.rb +0 -70
- data/spec/rubocop/cop/style/space_after_not_spec.rb +0 -22
- data/spec/rubocop/cop/style/space_after_semicolon_spec.rb +0 -23
- data/spec/rubocop/cop/style/space_around_block_parameters_spec.rb +0 -155
- data/spec/rubocop/cop/style/space_around_equals_in_parameter_default_spec.rb +0 -95
- data/spec/rubocop/cop/style/space_around_operators_spec.rb +0 -330
- data/spec/rubocop/cop/style/space_before_block_braces_spec.rb +0 -73
- data/spec/rubocop/cop/style/space_before_comma_spec.rb +0 -42
- data/spec/rubocop/cop/style/space_before_comment_spec.rb +0 -34
- data/spec/rubocop/cop/style/space_before_modifier_keyword_spec.rb +0 -70
- data/spec/rubocop/cop/style/space_before_semicolon_spec.rb +0 -28
- data/spec/rubocop/cop/style/space_inside_block_braces_spec.rb +0 -317
- data/spec/rubocop/cop/style/space_inside_brackets_spec.rb +0 -83
- data/spec/rubocop/cop/style/space_inside_hash_literal_braces_spec.rb +0 -147
- data/spec/rubocop/cop/style/space_inside_parens_spec.rb +0 -44
- data/spec/rubocop/cop/style/space_inside_range_literal_spec.rb +0 -64
- data/spec/rubocop/cop/style/special_global_vars_spec.rb +0 -62
- data/spec/rubocop/cop/style/string_literals_in_interpolation_spec.rb +0 -99
- data/spec/rubocop/cop/style/string_literals_spec.rb +0 -228
- data/spec/rubocop/cop/style/struct_inheritance_spec.rb +0 -44
- data/spec/rubocop/cop/style/symbol_array_spec.rb +0 -37
- data/spec/rubocop/cop/style/symbol_proc_spec.rb +0 -100
- data/spec/rubocop/cop/style/tab_spec.rb +0 -47
- data/spec/rubocop/cop/style/trailing_blank_lines_spec.rb +0 -83
- data/spec/rubocop/cop/style/trailing_comma_spec.rb +0 -390
- data/spec/rubocop/cop/style/trailing_whitespace_spec.rb +0 -31
- data/spec/rubocop/cop/style/trivial_accessors_spec.rb +0 -558
- data/spec/rubocop/cop/style/unless_else_spec.rb +0 -23
- data/spec/rubocop/cop/style/unneeded_capital_w_spec.rb +0 -90
- data/spec/rubocop/cop/style/unneeded_percent_q_spec.rb +0 -127
- data/spec/rubocop/cop/style/unneeded_percent_x_spec.rb +0 -34
- data/spec/rubocop/cop/style/variable_interpolation_spec.rb +0 -76
- data/spec/rubocop/cop/style/variable_name_spec.rb +0 -107
- data/spec/rubocop/cop/style/when_then_spec.rb +0 -42
- data/spec/rubocop/cop/style/while_until_do_spec.rb +0 -55
- data/spec/rubocop/cop/style/while_until_modifier_spec.rb +0 -93
- data/spec/rubocop/cop/style/word_array_spec.rb +0 -117
- data/spec/rubocop/cop/team_spec.rb +0 -190
- data/spec/rubocop/cop/util_spec.rb +0 -102
- data/spec/rubocop/cop/variable_force/assignment_spec.rb +0 -200
- data/spec/rubocop/cop/variable_force/locatable_spec.rb +0 -699
- data/spec/rubocop/cop/variable_force/reference_spec.rb +0 -19
- data/spec/rubocop/cop/variable_force/scope_spec.rb +0 -319
- data/spec/rubocop/cop/variable_force/variable_spec.rb +0 -59
- data/spec/rubocop/cop/variable_force/variable_table_spec.rb +0 -276
- data/spec/rubocop/cop/variable_force_spec.rb +0 -26
- data/spec/rubocop/formatter/base_formatter_spec.rb +0 -191
- data/spec/rubocop/formatter/clang_style_formatter_spec.rb +0 -114
- data/spec/rubocop/formatter/colorizable_spec.rb +0 -107
- data/spec/rubocop/formatter/disabled_config_formatter_spec.rb +0 -50
- data/spec/rubocop/formatter/disabled_lines_formatter_spec.rb +0 -67
- data/spec/rubocop/formatter/emacs_style_formatter_spec.rb +0 -63
- data/spec/rubocop/formatter/file_list_formatter_spec.rb +0 -33
- data/spec/rubocop/formatter/formatter_set_spec.rb +0 -141
- data/spec/rubocop/formatter/fuubar_style_formatter_spec.rb +0 -129
- data/spec/rubocop/formatter/html_formatter_spec.rb +0 -48
- data/spec/rubocop/formatter/json_formatter_spec.rb +0 -152
- data/spec/rubocop/formatter/offense_count_formatter_spec.rb +0 -75
- data/spec/rubocop/formatter/progress_formatter_spec.rb +0 -182
- data/spec/rubocop/formatter/simple_text_formatter_spec.rb +0 -135
- data/spec/rubocop/formatter/text_util_spec.rb +0 -55
- data/spec/rubocop/options_spec.rb +0 -181
- data/spec/rubocop/path_util_spec.rb +0 -77
- data/spec/rubocop/processed_source_spec.rb +0 -184
- data/spec/rubocop/rake_task_spec.rb +0 -122
- data/spec/rubocop/runner_spec.rb +0 -99
- data/spec/rubocop/string_util_spec.rb +0 -46
- data/spec/rubocop/target_finder_spec.rb +0 -245
- data/spec/rubocop/token_spec.rb +0 -29
- data/spec/spec_helper.rb +0 -39
- data/spec/support/cop_helper.rb +0 -75
- data/spec/support/cops/class_must_be_a_module_cop.rb +0 -19
- data/spec/support/cops/module_must_be_a_class_cop.rb +0 -19
- data/spec/support/coverage.rb +0 -15
- data/spec/support/custom_matchers.rb +0 -58
- data/spec/support/file_helper.rb +0 -23
- data/spec/support/jruby_workaround.rb +0 -15
- data/spec/support/mri_syntax_checker.rb +0 -73
- data/spec/support/shared_contexts.rb +0 -53
- data/spec/support/shared_examples.rb +0 -55
- data/spec/support/statement_modifier_helper.rb +0 -41
@@ -0,0 +1,64 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Performance
|
6
|
+
# This cop is used to identify usages of `count` on an
|
7
|
+
# `Array` and `Hash` and change them to `size`.
|
8
|
+
#
|
9
|
+
# @example
|
10
|
+
# # bad
|
11
|
+
# [1, 2, 3].count
|
12
|
+
#
|
13
|
+
# # bad
|
14
|
+
# {a: 1, b: 2, c: 3}.count
|
15
|
+
#
|
16
|
+
# # good
|
17
|
+
# [1, 2, 3].size
|
18
|
+
#
|
19
|
+
# # good
|
20
|
+
# {a: 1, b: 2, c: 3}.size
|
21
|
+
#
|
22
|
+
# # good
|
23
|
+
# [1, 2, 3].count { |e| e > 2 }
|
24
|
+
# TODO: Add advanced detection of variables that could
|
25
|
+
# have been assigned to an array or a hash.
|
26
|
+
class Size < Cop
|
27
|
+
MSG = 'Use `size` instead of `count`.'
|
28
|
+
|
29
|
+
def on_send(node)
|
30
|
+
receiver, method = *node
|
31
|
+
|
32
|
+
return if receiver.nil?
|
33
|
+
return unless method == :count
|
34
|
+
return unless array?(receiver) || hash?(receiver)
|
35
|
+
return if node.parent && node.parent.block_type?
|
36
|
+
|
37
|
+
add_offense(node, node.loc.selector)
|
38
|
+
end
|
39
|
+
|
40
|
+
def autocorrect(node)
|
41
|
+
@corrections << lambda do |corrector|
|
42
|
+
corrector.replace(node.loc.selector, 'size')
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def array?(node)
|
49
|
+
receiver, method = *node
|
50
|
+
_, constant = *receiver
|
51
|
+
|
52
|
+
node.array_type? || constant == :Array || method == :to_a
|
53
|
+
end
|
54
|
+
|
55
|
+
def hash?(node)
|
56
|
+
receiver, method = *node
|
57
|
+
_, constant = *receiver
|
58
|
+
|
59
|
+
node.hash_type? || constant == :Hash || method == :to_h
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,121 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Rails
|
6
|
+
# This cop checks for the correct use of Date methods,
|
7
|
+
# such as Date.today, Date.current etc.
|
8
|
+
#
|
9
|
+
# Using Date.today is dangerous, because it doesn't know anything about
|
10
|
+
# Rails time zone. You must use Time.zone.today instead.
|
11
|
+
#
|
12
|
+
# The cop also reports warnings when you are using 'to_time' method,
|
13
|
+
# because it doesn't know about Rails time zone too.
|
14
|
+
#
|
15
|
+
# Two styles are supported for this cop. When EnforcedStyle is 'always'
|
16
|
+
# then the Date methods (today, current, yesterday, tomorrow)
|
17
|
+
# are prohibited and the usage of both 'to_time'
|
18
|
+
# and 'to_time_in_current_zone' is reported as warning.
|
19
|
+
#
|
20
|
+
# When EnforcedStyle is 'acceptable' then only 'Date.today' is prohibited
|
21
|
+
# and only 'to_time' is reported as warning.
|
22
|
+
#
|
23
|
+
# @example
|
24
|
+
# # no offense
|
25
|
+
# Time.zone.today
|
26
|
+
# Time.zone.today - 1.day
|
27
|
+
#
|
28
|
+
# # acceptable
|
29
|
+
# Date.current
|
30
|
+
# Date.yesterday
|
31
|
+
#
|
32
|
+
# # always reports offense
|
33
|
+
# Date.today
|
34
|
+
# date.to_time
|
35
|
+
#
|
36
|
+
# # reports offense only when style is 'always'
|
37
|
+
# date.to_time_in_current_zone
|
38
|
+
class Date < Cop
|
39
|
+
include ConfigurableEnforcedStyle
|
40
|
+
|
41
|
+
MSG = 'Do not use `%s` without zone. Use `%s` instead.'
|
42
|
+
|
43
|
+
MSG_SEND = 'Do not use `%s` on Date objects,' \
|
44
|
+
'because it knows nothing about time zone in use.'
|
45
|
+
|
46
|
+
BAD_DAYS = [:today, :current, :yesterday, :tomorrow]
|
47
|
+
|
48
|
+
def on_const(node)
|
49
|
+
_, klass = *node.children
|
50
|
+
|
51
|
+
return unless method_send?(node)
|
52
|
+
|
53
|
+
check_date_node(node.parent) if klass == :Date
|
54
|
+
end
|
55
|
+
|
56
|
+
def on_send(node)
|
57
|
+
method_name = extract_method(node)
|
58
|
+
return unless bad_methods.include?(method_name)
|
59
|
+
|
60
|
+
add_offense(node, :selector,
|
61
|
+
format(MSG_SEND,
|
62
|
+
method_name
|
63
|
+
)
|
64
|
+
)
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
def check_date_node(node)
|
70
|
+
chain = extract_method_chain(node)
|
71
|
+
return if (chain & bad_days).empty?
|
72
|
+
|
73
|
+
method_name = *(chain & bad_days)
|
74
|
+
|
75
|
+
add_offense(node, :selector,
|
76
|
+
format(MSG,
|
77
|
+
"Date.#{method_name}",
|
78
|
+
'Time.zone.today')
|
79
|
+
)
|
80
|
+
end
|
81
|
+
|
82
|
+
def extract_method_chain(node)
|
83
|
+
chain = []
|
84
|
+
p = node
|
85
|
+
while !p.nil? && p.send_type?
|
86
|
+
chain << extract_method(p)
|
87
|
+
p = p.parent
|
88
|
+
end
|
89
|
+
chain
|
90
|
+
end
|
91
|
+
|
92
|
+
def extract_method(node)
|
93
|
+
_receiver, method_name, *_args = *node
|
94
|
+
method_name
|
95
|
+
end
|
96
|
+
|
97
|
+
# checks that parent node of send_type
|
98
|
+
# and receiver is the given node
|
99
|
+
def method_send?(node)
|
100
|
+
return false unless node.parent.send_type?
|
101
|
+
|
102
|
+
receiver, _method_name, *_args = *node.parent
|
103
|
+
|
104
|
+
receiver == node
|
105
|
+
end
|
106
|
+
|
107
|
+
def good_days
|
108
|
+
style == :always ? [] : [:current, :yesterday, :tomorrow]
|
109
|
+
end
|
110
|
+
|
111
|
+
def bad_days
|
112
|
+
BAD_DAYS - good_days
|
113
|
+
end
|
114
|
+
|
115
|
+
def bad_methods
|
116
|
+
style == :always ? [:to_time, :to_time_in_current_zone] : [:to_time]
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Rails
|
6
|
+
# This cop is used to identify usages of `where.first` and
|
7
|
+
# change them to use `find_by` instead.
|
8
|
+
#
|
9
|
+
# @example
|
10
|
+
# # bad
|
11
|
+
# User.where(name: 'Bruce').first
|
12
|
+
# User.where(name: 'Bruce').take
|
13
|
+
#
|
14
|
+
# # good
|
15
|
+
# User.find_by(name: 'Bruce')
|
16
|
+
class FindBy < Cop
|
17
|
+
MSG = 'Use `find_by` instead of `where.%s`.'
|
18
|
+
TARGET_SELECTORS = [:first, :take]
|
19
|
+
|
20
|
+
def on_send(node)
|
21
|
+
receiver, second_method, _selector = *node
|
22
|
+
return unless TARGET_SELECTORS.include?(second_method)
|
23
|
+
return if receiver.nil?
|
24
|
+
_scope, first_method = *receiver
|
25
|
+
return unless first_method == :where
|
26
|
+
begin_of_offense = receiver.loc.selector.begin_pos
|
27
|
+
end_of_offense = node.loc.selector.end_pos
|
28
|
+
range = Parser::Source::Range.new(node.loc.expression.source_buffer,
|
29
|
+
begin_of_offense,
|
30
|
+
end_of_offense)
|
31
|
+
|
32
|
+
add_offense(node, range, format(MSG, second_method))
|
33
|
+
end
|
34
|
+
|
35
|
+
def autocorrect(node)
|
36
|
+
receiver, = *node
|
37
|
+
where_loc = receiver.loc.selector
|
38
|
+
first_loc = Parser::Source::Range.new(
|
39
|
+
node.loc.expression.source_buffer,
|
40
|
+
node.loc.dot.begin_pos,
|
41
|
+
node.loc.selector.end_pos
|
42
|
+
)
|
43
|
+
|
44
|
+
@corrections << lambda do |corrector|
|
45
|
+
corrector.replace(where_loc, 'find_by')
|
46
|
+
corrector.replace(first_loc, '')
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Rails
|
6
|
+
# This cop is used to identify usages of `all.each` and
|
7
|
+
# change them to use `all.find_each` instead.
|
8
|
+
#
|
9
|
+
# @example
|
10
|
+
# # bad
|
11
|
+
# User.all.each
|
12
|
+
#
|
13
|
+
# # good
|
14
|
+
# User.all.find_each
|
15
|
+
class FindEach < Cop
|
16
|
+
MSG = 'Use `find_each` instead of `each`.'
|
17
|
+
|
18
|
+
SCOPE_METHODS = [:all, :where]
|
19
|
+
|
20
|
+
def on_send(node)
|
21
|
+
receiver, second_method, _selector = *node
|
22
|
+
return unless second_method == :each
|
23
|
+
return if receiver.nil?
|
24
|
+
|
25
|
+
_model, first_method = *receiver
|
26
|
+
return unless SCOPE_METHODS.include?(first_method)
|
27
|
+
|
28
|
+
add_offense(node, node.loc.selector, MSG)
|
29
|
+
end
|
30
|
+
|
31
|
+
def autocorrect(node)
|
32
|
+
each_loc = node.loc.selector
|
33
|
+
|
34
|
+
@corrections << lambda do |corrector|
|
35
|
+
corrector.replace(each_loc, 'find_each')
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Rails
|
6
|
+
# This cop checks for the use of Time methods without zone.
|
7
|
+
#
|
8
|
+
# Built on top of Ruby on Rails style guide (https://github.com/bbatsov/rails-style-guide#time)
|
9
|
+
# and the article http://danilenko.org/2012/7/6/rails_timezones/ .
|
10
|
+
#
|
11
|
+
# Two styles are supported for this cop. When EnforcedStyle is 'always'
|
12
|
+
# then only use of Time.zone is allowed.
|
13
|
+
#
|
14
|
+
# When EnforcedStyle is 'acceptable' then it's also allowed
|
15
|
+
# to use Time.in_time_zone.
|
16
|
+
#
|
17
|
+
# @example
|
18
|
+
# # always offense
|
19
|
+
# Time.now
|
20
|
+
# Time.parse('2015-03-02 19:05:37')
|
21
|
+
#
|
22
|
+
# # no offense
|
23
|
+
# Time.zone.now
|
24
|
+
# Time.zone.parse('2015-03-02 19:05:37')
|
25
|
+
#
|
26
|
+
# # no offense only if style is 'acceptable'
|
27
|
+
# DateTime.strptime(str, "%Y-%m-%d %H:%M %Z").in_time_zone
|
28
|
+
# Time.at(timestamp).in_time_zone
|
29
|
+
class TimeZone < Cop
|
30
|
+
include ConfigurableEnforcedStyle
|
31
|
+
|
32
|
+
MSG = 'Do not use `%s` without zone. Use `%s` instead.'
|
33
|
+
|
34
|
+
TIMECLASS = [:Time, :DateTime]
|
35
|
+
|
36
|
+
DANGER_METHODS = [:now, :local, :new, :strptime, :parse, :at]
|
37
|
+
|
38
|
+
def on_const(node)
|
39
|
+
_module, klass = *node
|
40
|
+
|
41
|
+
return unless method_send?(node)
|
42
|
+
|
43
|
+
check_time_node(klass, node.parent) if TIMECLASS.include?(klass)
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def check_time_node(klass, node)
|
49
|
+
chain = extract_method_chain(node)
|
50
|
+
return if (chain & DANGER_METHODS).empty? ||
|
51
|
+
!(chain & good_methods).empty?
|
52
|
+
|
53
|
+
method_name = *(chain & DANGER_METHODS)
|
54
|
+
|
55
|
+
add_offense(node, :selector,
|
56
|
+
format(MSG,
|
57
|
+
"#{klass}.#{method_name}",
|
58
|
+
"#Time.zone.#{method_name}")
|
59
|
+
)
|
60
|
+
end
|
61
|
+
|
62
|
+
def extract_method_chain(node)
|
63
|
+
chain = []
|
64
|
+
p = node
|
65
|
+
while !p.nil? && p.send_type?
|
66
|
+
chain << extract_method(p)
|
67
|
+
p = p.parent
|
68
|
+
end
|
69
|
+
chain
|
70
|
+
end
|
71
|
+
|
72
|
+
def extract_method(node)
|
73
|
+
_receiver, method_name, *_args = *node
|
74
|
+
method_name
|
75
|
+
end
|
76
|
+
|
77
|
+
# checks that parent node of send_type
|
78
|
+
# and receiver is the given node
|
79
|
+
def method_send?(node)
|
80
|
+
return false unless node.parent.send_type?
|
81
|
+
|
82
|
+
receiver, _method_name, *_args = *node.parent
|
83
|
+
|
84
|
+
receiver == node
|
85
|
+
end
|
86
|
+
|
87
|
+
def good_methods
|
88
|
+
style == :always ? [:zone] : [:zone, :in_time_zone]
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# This cop checks for cases when you could use a block
|
7
|
+
# accepting version of a method that does automatic
|
8
|
+
# resource cleanup.
|
9
|
+
#
|
10
|
+
# @example
|
11
|
+
#
|
12
|
+
# # bad
|
13
|
+
# f = File.open('file')
|
14
|
+
#
|
15
|
+
# # good
|
16
|
+
# f = File.open('file') do
|
17
|
+
# ...
|
18
|
+
# end
|
19
|
+
class AutoResourceCleanup < Cop
|
20
|
+
include AST::Sexp
|
21
|
+
MSG = 'Use the block version of `%s.%s`.'
|
22
|
+
|
23
|
+
TARGET_METHODS = [
|
24
|
+
[:File, :open]
|
25
|
+
]
|
26
|
+
|
27
|
+
def on_send(node)
|
28
|
+
receiver_node, method_name, *_arg_nodes = *node
|
29
|
+
|
30
|
+
TARGET_METHODS.each do |(target_class, target_method)|
|
31
|
+
target_receiver = s(:const, nil, target_class)
|
32
|
+
|
33
|
+
next if receiver_node != target_receiver
|
34
|
+
next if method_name != target_method
|
35
|
+
next if node.parent && node.parent.block_type?
|
36
|
+
|
37
|
+
add_offense(node,
|
38
|
+
:expression,
|
39
|
+
format(MSG, target_class, target_method))
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,186 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# Check for uses of braces or do/end around single line or
|
7
|
+
# multi-line blocks.
|
8
|
+
class BlockDelimiters < Cop
|
9
|
+
include ConfigurableEnforcedStyle
|
10
|
+
include AutocorrectUnlessChangingAST
|
11
|
+
|
12
|
+
def on_send(node)
|
13
|
+
_receiver, method_name, *args = *node
|
14
|
+
return unless args.any?
|
15
|
+
|
16
|
+
block = get_block(args.last)
|
17
|
+
return unless block && !parentheses?(node) && !operator?(method_name)
|
18
|
+
|
19
|
+
# If there are no parentheses around the arguments, then braces and
|
20
|
+
# do-end have different meaning due to how they bind, so we allow
|
21
|
+
# either.
|
22
|
+
ignore_node(block)
|
23
|
+
end
|
24
|
+
|
25
|
+
def on_block(node)
|
26
|
+
return if ignored_node?(node)
|
27
|
+
|
28
|
+
if proper_block_style?(node)
|
29
|
+
correct_style_detected
|
30
|
+
else
|
31
|
+
add_offense(node, :begin) { opposite_style_detected }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def message(node)
|
38
|
+
block_begin = node.loc.begin.source
|
39
|
+
block_length = Util.block_length(node)
|
40
|
+
|
41
|
+
case style
|
42
|
+
when :line_count_based
|
43
|
+
if block_length > 0
|
44
|
+
'Avoid using `{...}` for multi-line blocks.'
|
45
|
+
else
|
46
|
+
'Prefer `{...}` over `do...end` for single-line blocks.'
|
47
|
+
end
|
48
|
+
when :semantic
|
49
|
+
if block_begin == '{'
|
50
|
+
'Prefer `do...end` over `{...}` for procedural blocks.'
|
51
|
+
else
|
52
|
+
'Prefer `{...}` over `do...end` for functional blocks.'
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def correction(node)
|
58
|
+
lambda do |corrector|
|
59
|
+
b, e = node.loc.begin, node.loc.end
|
60
|
+
if b.is?('{')
|
61
|
+
# If the left brace is not preceded by a whitespace character,
|
62
|
+
# then we need a space before `do` to get valid Ruby code.
|
63
|
+
if b.source_buffer.source[b.begin_pos - 1, 1] =~ /\S/
|
64
|
+
corrector.insert_before(b, ' ')
|
65
|
+
end
|
66
|
+
corrector.replace(b, 'do')
|
67
|
+
corrector.replace(e, 'end')
|
68
|
+
else
|
69
|
+
corrector.replace(b, '{')
|
70
|
+
corrector.replace(e, '}')
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def get_block(node)
|
76
|
+
case node.type
|
77
|
+
when :block
|
78
|
+
node
|
79
|
+
when :send
|
80
|
+
receiver, _method_name, *_args = *node
|
81
|
+
get_block(receiver) if receiver
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def parentheses?(send_node)
|
86
|
+
send_node.loc.begin
|
87
|
+
end
|
88
|
+
|
89
|
+
def operator?(method_name)
|
90
|
+
method_name =~ /^\W/
|
91
|
+
end
|
92
|
+
|
93
|
+
def proper_block_style?(node)
|
94
|
+
case style
|
95
|
+
when :line_count_based
|
96
|
+
line_count_based_block_style?(node)
|
97
|
+
when :semantic
|
98
|
+
semantic_block_style?(node)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def line_count_based_block_style?(node)
|
103
|
+
block_length = Util.block_length(node)
|
104
|
+
block_begin = node.loc.begin.source
|
105
|
+
|
106
|
+
if block_length > 0
|
107
|
+
block_begin != '{'
|
108
|
+
else
|
109
|
+
block_begin == '{'
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
def semantic_block_style?(node)
|
114
|
+
method_name = extract_method_name_from_block(node)
|
115
|
+
return true if ignored_method?(method_name)
|
116
|
+
|
117
|
+
block_begin = node.loc.begin.source
|
118
|
+
|
119
|
+
if block_begin == '{'
|
120
|
+
functional_method?(method_name) || functional_block?(node)
|
121
|
+
else
|
122
|
+
procedural_method?(method_name) || !return_value_used?(node)
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
def extract_method_name_from_block(block)
|
127
|
+
node, _args, _body = *block
|
128
|
+
_receiver, method_name, *_args = *node
|
129
|
+
|
130
|
+
method_name
|
131
|
+
end
|
132
|
+
|
133
|
+
def ignored_method?(method_name)
|
134
|
+
ignored_methods.include?(method_name)
|
135
|
+
end
|
136
|
+
|
137
|
+
def functional_method?(method_name)
|
138
|
+
functional_methods.include?(method_name)
|
139
|
+
end
|
140
|
+
|
141
|
+
def functional_block?(node)
|
142
|
+
return_value_used?(node) || return_value_of_scope?(node)
|
143
|
+
end
|
144
|
+
|
145
|
+
def procedural_method?(method_name)
|
146
|
+
procedural_methods.include?(method_name)
|
147
|
+
end
|
148
|
+
|
149
|
+
def return_value_used?(node)
|
150
|
+
return unless node.parent
|
151
|
+
|
152
|
+
# If there are parentheses around the block, check if that
|
153
|
+
# is being used.
|
154
|
+
if node.parent.begin_type?
|
155
|
+
return_value_used?(node.parent)
|
156
|
+
else
|
157
|
+
Util::ASGN_NODES.include?(node.parent.type) ||
|
158
|
+
node.parent.send_type?
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
def return_value_of_scope?(node)
|
163
|
+
return unless node.parent
|
164
|
+
|
165
|
+
conditional?(node.parent) || node.parent.children.last == node
|
166
|
+
end
|
167
|
+
|
168
|
+
def procedural_methods
|
169
|
+
cop_config['ProceduralMethods'].map(&:to_sym)
|
170
|
+
end
|
171
|
+
|
172
|
+
def functional_methods
|
173
|
+
cop_config['FunctionalMethods'].map(&:to_sym)
|
174
|
+
end
|
175
|
+
|
176
|
+
def ignored_methods
|
177
|
+
cop_config['IgnoredMethods'].map(&:to_sym)
|
178
|
+
end
|
179
|
+
|
180
|
+
def conditional?(node)
|
181
|
+
node.if_type? || node.or_type? || node.and_type?
|
182
|
+
end
|
183
|
+
end
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|