rubocop 0.51.0 → 0.87.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.
- checksums.yaml +5 -5
- data/LICENSE.txt +1 -1
- data/README.md +53 -42
- data/assets/output.html.erb +1 -1
- data/bin/console +10 -0
- data/bin/setup +7 -0
- data/config/default.yml +3137 -552
- data/lib/rubocop/ast_aliases.rb +8 -0
- data/lib/rubocop/cached_data.rb +2 -2
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +140 -0
- data/lib/rubocop/cli/command/base.rb +33 -0
- data/lib/rubocop/cli/command/execute_runner.rb +76 -0
- data/lib/rubocop/cli/command/init_dotfile.rb +45 -0
- data/lib/rubocop/cli/command/show_cops.rb +76 -0
- data/lib/rubocop/cli/command/version.rb +17 -0
- data/lib/rubocop/cli/command.rb +21 -0
- data/lib/rubocop/cli/environment.rb +21 -0
- data/lib/rubocop/cli.rb +58 -131
- data/lib/rubocop/comment_config.rb +65 -14
- data/lib/rubocop/config.rb +106 -342
- data/lib/rubocop/config_loader.rb +122 -153
- data/lib/rubocop/config_loader_resolver.rb +198 -8
- data/lib/rubocop/config_obsoletion.rb +277 -0
- data/lib/rubocop/config_store.rb +12 -2
- data/lib/rubocop/config_validator.rb +223 -0
- data/lib/rubocop/cop/autocorrect_logic.rb +73 -4
- data/lib/rubocop/cop/badge.rb +6 -6
- data/lib/rubocop/cop/base.rb +399 -0
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +12 -10
- data/lib/rubocop/cop/bundler/gem_comment.rb +133 -0
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +21 -28
- data/lib/rubocop/cop/bundler/ordered_gems.rb +16 -5
- data/lib/rubocop/cop/commissioner.rb +68 -67
- data/lib/rubocop/cop/cop.rb +101 -208
- data/lib/rubocop/cop/corrector.rb +82 -98
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +142 -0
- data/lib/rubocop/cop/correctors/condition_corrector.rb +27 -0
- data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +53 -0
- data/lib/rubocop/cop/correctors/empty_line_corrector.rb +26 -0
- data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +73 -0
- data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +136 -0
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +61 -0
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +68 -0
- data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +44 -0
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +31 -0
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +117 -0
- data/lib/rubocop/cop/correctors/punctuation_corrector.rb +29 -0
- data/lib/rubocop/cop/correctors/space_corrector.rb +46 -0
- data/lib/rubocop/cop/correctors/string_literal_corrector.rb +25 -0
- data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +43 -0
- data/lib/rubocop/cop/force.rb +1 -0
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +104 -0
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +16 -8
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +85 -0
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +55 -0
- data/lib/rubocop/cop/generator/configuration_injector.rb +66 -0
- data/lib/rubocop/cop/generator/require_file_injector.rb +78 -0
- data/lib/rubocop/cop/generator.rb +81 -99
- data/lib/rubocop/cop/ignored_node.rb +1 -3
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +59 -0
- data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +44 -0
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +13 -16
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +11 -10
- data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +7 -18
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +6 -4
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +3 -3
- data/lib/rubocop/cop/internal_affairs.rb +2 -1
- data/lib/rubocop/cop/layout/access_modifier_indentation.rb +22 -33
- data/lib/rubocop/cop/layout/{align_parameters.rb → argument_alignment.rb} +26 -24
- data/lib/rubocop/cop/layout/array_alignment.rb +82 -0
- data/lib/rubocop/cop/layout/{indent_assignment.rb → assignment_indentation.rb} +18 -5
- data/lib/rubocop/cop/{lint → layout}/block_alignment.rb +38 -32
- data/lib/rubocop/cop/layout/block_end_newline.rb +16 -13
- data/lib/rubocop/cop/layout/case_indentation.rb +26 -29
- data/lib/rubocop/cop/layout/class_structure.rb +343 -0
- data/lib/rubocop/cop/layout/closing_heredoc_indentation.rb +126 -0
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +145 -30
- data/lib/rubocop/cop/layout/comment_indentation.rb +76 -8
- data/lib/rubocop/cop/{lint → layout}/condition_position.rb +15 -5
- data/lib/rubocop/cop/{lint → layout}/def_end_alignment.rb +10 -14
- data/lib/rubocop/cop/layout/dot_position.rb +34 -22
- data/lib/rubocop/cop/layout/else_alignment.rb +37 -20
- data/lib/rubocop/cop/layout/empty_comment.rb +151 -0
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +157 -0
- data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +6 -5
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +30 -25
- data/lib/rubocop/cop/layout/empty_lines.rb +20 -4
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +138 -33
- data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +99 -0
- data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +121 -0
- data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +8 -5
- data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +13 -11
- data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +60 -11
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +13 -4
- data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +8 -4
- data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +29 -11
- data/lib/rubocop/cop/{lint → layout}/end_alignment.rb +53 -21
- data/lib/rubocop/cop/layout/end_of_line.rb +48 -8
- data/lib/rubocop/cop/layout/extra_spacing.rb +66 -102
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +251 -0
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +171 -0
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +6 -2
- data/lib/rubocop/cop/layout/{indent_hash.rb → first_hash_element_indentation.rb} +83 -33
- data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +5 -1
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +8 -4
- data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +5 -1
- data/lib/rubocop/cop/layout/first_parameter_indentation.rb +61 -73
- data/lib/rubocop/cop/layout/hash_alignment.rb +365 -0
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +285 -0
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +173 -0
- data/lib/rubocop/cop/layout/indentation_consistency.rb +160 -8
- data/lib/rubocop/cop/layout/indentation_style.rb +117 -0
- data/lib/rubocop/cop/layout/indentation_width.rb +100 -45
- data/lib/rubocop/cop/layout/initial_indentation.rb +24 -8
- data/lib/rubocop/cop/layout/leading_comment_space.rb +67 -6
- data/lib/rubocop/cop/layout/leading_empty_lines.rb +53 -0
- data/lib/rubocop/cop/layout/line_length.rb +280 -0
- data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +61 -24
- data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +39 -0
- data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +21 -14
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +63 -28
- data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +54 -21
- data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +50 -0
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +52 -0
- data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +70 -33
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +20 -18
- data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +82 -33
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +34 -6
- data/lib/rubocop/cop/layout/parameter_alignment.rb +118 -0
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +125 -22
- data/lib/rubocop/cop/layout/space_after_colon.rb +6 -6
- data/lib/rubocop/cop/layout/space_after_comma.rb +7 -3
- data/lib/rubocop/cop/layout/space_after_method_name.rb +10 -7
- data/lib/rubocop/cop/layout/space_after_not.rb +4 -2
- data/lib/rubocop/cop/layout/space_after_semicolon.rb +12 -1
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +74 -49
- data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +41 -17
- data/lib/rubocop/cop/layout/space_around_keyword.rb +36 -20
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +131 -0
- data/lib/rubocop/cop/layout/space_around_operators.rb +142 -46
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +54 -11
- data/lib/rubocop/cop/layout/space_before_comma.rb +16 -1
- data/lib/rubocop/cop/layout/space_before_comment.rb +6 -7
- data/lib/rubocop/cop/layout/space_before_first_arg.rb +15 -4
- data/lib/rubocop/cop/layout/space_before_semicolon.rb +5 -1
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +30 -39
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +229 -0
- data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +5 -5
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +110 -19
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +93 -46
- data/lib/rubocop/cop/layout/space_inside_parens.rb +92 -4
- data/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb +3 -3
- data/lib/rubocop/cop/layout/space_inside_range_literal.rb +17 -17
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +148 -0
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +37 -41
- data/lib/rubocop/cop/layout/{trailing_blank_lines.rb → trailing_empty_lines.rb} +54 -21
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +51 -2
- data/lib/rubocop/cop/legacy/corrections_proxy.rb +49 -0
- data/lib/rubocop/cop/legacy/corrector.rb +29 -0
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +16 -22
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +42 -1
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +15 -1
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +29 -26
- data/lib/rubocop/cop/lint/big_decimal_new.rb +44 -0
- data/lib/rubocop/cop/lint/boolean_symbol.rb +14 -2
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +2 -2
- data/lib/rubocop/cop/lint/constant_resolution.rb +89 -0
- data/lib/rubocop/cop/lint/debugger.rb +8 -10
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +34 -13
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +137 -0
- data/lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb +81 -0
- data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -1
- data/lib/rubocop/cop/lint/{duplicated_key.rb → duplicate_hash_key.rb} +2 -2
- data/lib/rubocop/cop/lint/duplicate_methods.rb +38 -25
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +5 -2
- data/lib/rubocop/cop/lint/else_layout.rb +4 -3
- data/lib/rubocop/cop/lint/empty_ensure.rb +1 -1
- data/lib/rubocop/cop/lint/empty_expression.rb +1 -1
- data/lib/rubocop/cop/lint/empty_interpolation.rb +5 -5
- data/lib/rubocop/cop/lint/empty_when.rb +30 -7
- data/lib/rubocop/cop/lint/ensure_return.rb +23 -3
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +162 -0
- data/lib/rubocop/cop/lint/flip_flop.rb +32 -0
- data/lib/rubocop/cop/lint/float_out_of_range.rb +2 -2
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +62 -44
- data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +156 -0
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +21 -15
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +37 -59
- data/lib/rubocop/cop/lint/inherit_exception.rb +32 -16
- data/lib/rubocop/cop/lint/interpolation_check.rb +19 -3
- data/lib/rubocop/cop/lint/literal_as_condition.rb +16 -22
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +33 -11
- data/lib/rubocop/cop/lint/loop.rb +8 -6
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +84 -0
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +69 -0
- data/lib/rubocop/cop/lint/{multiple_compare.rb → multiple_comparison.rb} +4 -4
- data/lib/rubocop/cop/lint/nested_method_definition.rb +8 -7
- data/lib/rubocop/cop/lint/nested_percent_literal.rb +51 -0
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +2 -2
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +89 -0
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +14 -16
- data/lib/rubocop/cop/lint/number_conversion.rb +81 -0
- data/lib/rubocop/cop/lint/ordered_magic_comments.rb +86 -0
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +45 -15
- data/lib/rubocop/cop/lint/percent_string_array.rb +18 -22
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +18 -15
- data/lib/rubocop/cop/lint/raise_exception.rb +83 -0
- data/lib/rubocop/cop/lint/rand_one.rb +5 -5
- data/lib/rubocop/cop/lint/{unneeded_disable.rb → redundant_cop_disable_directive.rb} +87 -61
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +119 -0
- data/lib/rubocop/cop/lint/{unneeded_require_statement.rb → redundant_require_statement.rb} +10 -10
- data/lib/rubocop/cop/lint/{unneeded_splat_expansion.rb → redundant_splat_expansion.rb} +58 -27
- data/lib/rubocop/cop/lint/{string_conversion_in_interpolation.rb → redundant_string_coercion.rb} +18 -17
- data/lib/rubocop/cop/lint/redundant_with_index.rb +13 -8
- data/lib/rubocop/cop/lint/redundant_with_object.rb +9 -7
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +7 -1
- data/lib/rubocop/cop/lint/require_parentheses.rb +7 -2
- data/lib/rubocop/cop/lint/rescue_exception.rb +3 -2
- data/lib/rubocop/cop/lint/rescue_type.rb +10 -6
- data/lib/rubocop/cop/lint/return_in_void_context.rb +3 -3
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +23 -28
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +94 -0
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +46 -0
- data/lib/rubocop/cop/lint/script_permission.rb +33 -11
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +91 -0
- data/lib/rubocop/cop/lint/shadowed_argument.rb +182 -0
- data/lib/rubocop/cop/lint/shadowed_exception.rb +42 -23
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +2 -2
- data/lib/rubocop/cop/lint/struct_new_override.rb +58 -0
- data/lib/rubocop/cop/lint/suppressed_exception.rb +92 -0
- data/lib/rubocop/cop/lint/syntax.rb +12 -28
- data/lib/rubocop/cop/lint/to_json.rb +41 -0
- data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +26 -6
- data/lib/rubocop/cop/lint/unified_integer.rb +3 -3
- data/lib/rubocop/cop/lint/unreachable_code.rb +9 -7
- data/lib/rubocop/cop/lint/unused_block_argument.rb +26 -6
- data/lib/rubocop/cop/lint/unused_method_argument.rb +62 -12
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +17 -15
- data/lib/rubocop/cop/lint/uri_regexp.rb +7 -7
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +96 -37
- data/lib/rubocop/cop/lint/useless_assignment.rb +8 -10
- data/lib/rubocop/cop/lint/useless_comparison.rb +1 -1
- data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +9 -1
- data/lib/rubocop/cop/lint/useless_setter_call.rb +14 -11
- data/lib/rubocop/cop/lint/void.rb +62 -30
- data/lib/rubocop/cop/message_annotator.rb +26 -13
- data/lib/rubocop/cop/metrics/abc_size.rb +4 -19
- data/lib/rubocop/cop/metrics/block_length.rb +42 -2
- data/lib/rubocop/cop/metrics/block_nesting.rb +2 -1
- data/lib/rubocop/cop/metrics/class_length.rb +37 -2
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +37 -4
- data/lib/rubocop/cop/metrics/method_length.rb +29 -2
- data/lib/rubocop/cop/metrics/module_length.rb +37 -2
- data/lib/rubocop/cop/metrics/parameter_lists.rb +9 -2
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +5 -5
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +84 -0
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +129 -0
- data/lib/rubocop/cop/metrics/utils/iterating_block.rb +61 -0
- data/lib/rubocop/cop/migration/department_name.rb +85 -0
- data/lib/rubocop/cop/mixin/alignment.rb +72 -0
- data/lib/rubocop/cop/mixin/allowed_methods.rb +19 -0
- data/lib/rubocop/cop/mixin/annotation_comment.rb +1 -0
- data/lib/rubocop/cop/mixin/array_min_size.rb +1 -3
- data/lib/rubocop/cop/mixin/array_syntax.rb +3 -1
- data/lib/rubocop/cop/mixin/auto_corrector.rb +12 -0
- data/lib/rubocop/cop/mixin/check_assignment.rb +13 -9
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +184 -0
- data/lib/rubocop/cop/mixin/code_length.rb +11 -1
- data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +8 -5
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +4 -7
- data/lib/rubocop/cop/mixin/configurable_max.rb +6 -2
- data/lib/rubocop/cop/mixin/configurable_naming.rb +1 -1
- data/lib/rubocop/cop/mixin/def_node.rb +8 -2
- data/lib/rubocop/cop/mixin/documentation_comment.rb +13 -7
- data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +34 -28
- data/lib/rubocop/cop/mixin/empty_parameter.rb +24 -0
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +19 -32
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +6 -10
- data/lib/rubocop/cop/mixin/first_element_line_break.rb +6 -10
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +32 -7
- data/lib/rubocop/cop/mixin/{hash_alignment.rb → hash_alignment_styles.rb} +38 -7
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +178 -0
- data/lib/rubocop/cop/mixin/heredoc.rb +22 -18
- data/lib/rubocop/cop/mixin/ignored_methods.rb +19 -0
- data/lib/rubocop/cop/mixin/ignored_pattern.rb +3 -1
- data/lib/rubocop/cop/mixin/integer_node.rb +3 -1
- data/lib/rubocop/cop/mixin/interpolation.rb +27 -0
- data/lib/rubocop/cop/mixin/line_length_help.rb +89 -0
- data/lib/rubocop/cop/mixin/match_range.rb +4 -0
- data/lib/rubocop/cop/mixin/method_complexity.rb +38 -8
- data/lib/rubocop/cop/mixin/method_preference.rb +2 -1
- data/lib/rubocop/cop/mixin/min_body_length.rb +3 -1
- data/lib/rubocop/cop/mixin/{array_hash_indentation.rb → multiline_element_indentation.rb} +5 -2
- data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +33 -0
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +50 -15
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +15 -50
- data/lib/rubocop/cop/mixin/negative_conditional.rb +5 -16
- data/lib/rubocop/cop/mixin/nil_methods.rb +23 -0
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +30 -32
- data/lib/rubocop/cop/mixin/parentheses.rb +3 -9
- data/lib/rubocop/cop/mixin/parser_diagnostic.rb +1 -1
- data/lib/rubocop/cop/mixin/percent_array.rb +2 -2
- data/lib/rubocop/cop/mixin/percent_literal.rb +3 -65
- data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +98 -6
- data/lib/rubocop/cop/mixin/preferred_delimiters.rb +53 -0
- data/lib/rubocop/cop/mixin/range_help.rb +117 -0
- data/lib/rubocop/cop/mixin/rational_literal.rb +18 -0
- data/lib/rubocop/cop/mixin/regexp_literal_help.rb +43 -0
- data/lib/rubocop/cop/mixin/rescue_node.rb +4 -3
- data/lib/rubocop/cop/mixin/safe_assignment.rb +4 -1
- data/lib/rubocop/cop/mixin/space_after_punctuation.rb +13 -14
- data/lib/rubocop/cop/mixin/space_before_punctuation.rb +16 -16
- data/lib/rubocop/cop/mixin/statement_modifier.rb +20 -33
- data/lib/rubocop/cop/mixin/string_help.rb +2 -0
- data/lib/rubocop/cop/mixin/string_literals_help.rb +4 -14
- data/lib/rubocop/cop/mixin/surrounding_space.rb +120 -9
- data/lib/rubocop/cop/mixin/target_ruby_version.rb +5 -1
- data/lib/rubocop/cop/mixin/too_many_lines.rb +5 -19
- data/lib/rubocop/cop/mixin/trailing_body.rb +26 -0
- data/lib/rubocop/cop/mixin/trailing_comma.rb +96 -45
- data/lib/rubocop/cop/mixin/uncommunicative_name.rb +113 -0
- data/lib/rubocop/cop/mixin/unused_argument.rb +3 -53
- data/lib/rubocop/cop/naming/accessor_method_name.rb +20 -10
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +64 -5
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +11 -9
- data/lib/rubocop/cop/naming/block_parameter_name.rb +49 -0
- data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +28 -14
- data/lib/rubocop/cop/naming/constant_name.rb +59 -6
- data/lib/rubocop/cop/naming/file_name.rb +72 -36
- data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +10 -16
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +8 -12
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +171 -0
- data/lib/rubocop/cop/naming/method_name.rb +58 -13
- data/lib/rubocop/cop/naming/method_parameter_name.rb +58 -0
- data/lib/rubocop/cop/naming/predicate_name.rb +22 -13
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +112 -0
- data/lib/rubocop/cop/naming/variable_name.rb +20 -3
- data/lib/rubocop/cop/naming/variable_number.rb +12 -29
- data/lib/rubocop/cop/offense.rb +55 -13
- data/lib/rubocop/cop/registry.rb +118 -14
- data/lib/rubocop/cop/security/eval.rb +3 -2
- data/lib/rubocop/cop/security/json_load.rb +7 -5
- data/lib/rubocop/cop/security/marshal_load.rb +5 -3
- data/lib/rubocop/cop/security/open.rb +71 -0
- data/lib/rubocop/cop/security/yaml_load.rb +2 -2
- data/lib/rubocop/cop/severity.rb +2 -3
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +132 -0
- data/lib/rubocop/cop/style/accessor_grouping.rb +136 -0
- data/lib/rubocop/cop/style/alias.rb +41 -37
- data/lib/rubocop/cop/style/and_or.rb +44 -38
- data/lib/rubocop/cop/style/array_join.rb +12 -3
- data/lib/rubocop/cop/style/ascii_comments.rb +29 -6
- data/lib/rubocop/cop/style/attr.rb +26 -8
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +14 -5
- data/lib/rubocop/cop/style/bare_percent_literals.rb +34 -13
- data/lib/rubocop/cop/style/begin_block.rb +7 -1
- data/lib/rubocop/cop/style/bisected_attr_accessor.rb +121 -0
- data/lib/rubocop/cop/style/block_comments.rb +27 -5
- data/lib/rubocop/cop/style/block_delimiters.rb +189 -30
- data/lib/rubocop/cop/style/case_equality.rb +37 -2
- data/lib/rubocop/cop/style/character_literal.rb +13 -3
- data/lib/rubocop/cop/style/class_and_module_children.rb +92 -10
- data/lib/rubocop/cop/style/class_check.rb +28 -9
- data/lib/rubocop/cop/style/class_methods.rb +20 -28
- data/lib/rubocop/cop/style/class_vars.rb +49 -3
- data/lib/rubocop/cop/style/collection_methods.rb +32 -2
- data/lib/rubocop/cop/style/colon_method_call.rb +19 -4
- data/lib/rubocop/cop/style/colon_method_definition.rb +37 -0
- data/lib/rubocop/cop/style/command_literal.rb +85 -28
- data/lib/rubocop/cop/style/comment_annotation.rb +51 -19
- data/lib/rubocop/cop/style/commented_keyword.rb +22 -30
- data/lib/rubocop/cop/style/conditional_assignment.rb +62 -92
- data/lib/rubocop/cop/style/constant_visibility.rb +77 -0
- data/lib/rubocop/cop/style/copyright.rb +39 -29
- data/lib/rubocop/cop/style/date_time.rb +44 -11
- data/lib/rubocop/cop/style/def_with_parentheses.rb +28 -3
- data/lib/rubocop/cop/style/dir.rb +7 -7
- data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +49 -0
- data/lib/rubocop/cop/style/documentation.rb +72 -16
- data/lib/rubocop/cop/style/documentation_method.rb +51 -2
- data/lib/rubocop/cop/style/double_cop_disable_directive.rb +55 -0
- data/lib/rubocop/cop/style/double_negation.rb +43 -6
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +9 -9
- data/lib/rubocop/cop/style/each_with_object.rb +25 -11
- data/lib/rubocop/cop/style/empty_block_parameter.rb +48 -0
- data/lib/rubocop/cop/style/empty_case_condition.rb +30 -5
- data/lib/rubocop/cop/style/empty_else.rb +62 -26
- data/lib/rubocop/cop/style/empty_lambda_parameter.rb +45 -0
- data/lib/rubocop/cop/style/empty_literal.rb +32 -18
- data/lib/rubocop/cop/style/empty_method.rb +14 -21
- data/lib/rubocop/cop/style/encoding.rb +13 -5
- data/lib/rubocop/cop/style/end_block.rb +15 -1
- data/lib/rubocop/cop/style/eval_with_location.rb +148 -0
- data/lib/rubocop/cop/style/even_odd.rb +9 -7
- data/lib/rubocop/cop/style/expand_path_arguments.rb +194 -0
- data/lib/rubocop/cop/style/exponential_notation.rb +119 -0
- data/lib/rubocop/cop/style/float_division.rb +94 -0
- data/lib/rubocop/cop/style/for.rb +54 -19
- data/lib/rubocop/cop/style/format_string.rb +63 -32
- data/lib/rubocop/cop/style/format_string_token.rb +45 -67
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +170 -32
- data/lib/rubocop/cop/style/global_vars.rb +14 -4
- data/lib/rubocop/cop/style/guard_clause.rb +66 -13
- data/lib/rubocop/cop/style/hash_each_methods.rb +89 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +69 -61
- data/lib/rubocop/cop/style/hash_transform_keys.rb +83 -0
- data/lib/rubocop/cop/style/hash_transform_values.rb +80 -0
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +17 -21
- data/lib/rubocop/cop/style/if_inside_else.rb +52 -10
- data/lib/rubocop/cop/style/if_unless_modifier.rb +132 -24
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +14 -2
- data/lib/rubocop/cop/style/if_with_semicolon.rb +28 -2
- data/lib/rubocop/cop/style/implicit_runtime_error.rb +5 -5
- data/lib/rubocop/cop/style/infinite_loop.rb +51 -14
- data/lib/rubocop/cop/style/inline_comment.rb +5 -3
- data/lib/rubocop/cop/style/inverse_methods.rb +70 -22
- data/lib/rubocop/cop/style/ip_addresses.rb +76 -0
- data/lib/rubocop/cop/style/lambda.rb +25 -112
- data/lib/rubocop/cop/style/lambda_call.rb +13 -27
- data/lib/rubocop/cop/style/line_end_concatenation.rb +22 -16
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +169 -0
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +52 -0
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +134 -34
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +12 -14
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +5 -2
- data/lib/rubocop/cop/style/method_def_parentheses.rb +102 -13
- data/lib/rubocop/cop/style/method_missing_super.rb +34 -0
- data/lib/rubocop/cop/style/min_max.rb +14 -14
- data/lib/rubocop/cop/style/missing_else.rb +79 -12
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +46 -0
- data/lib/rubocop/cop/style/mixin_grouping.rb +46 -33
- data/lib/rubocop/cop/style/mixin_usage.rb +32 -15
- data/lib/rubocop/cop/style/module_function.rb +102 -20
- data/lib/rubocop/cop/style/multiline_block_chain.rb +14 -3
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +7 -7
- data/lib/rubocop/cop/style/multiline_if_then.rb +16 -14
- data/lib/rubocop/cop/style/multiline_memoization.rb +12 -17
- data/lib/rubocop/cop/style/multiline_method_signature.rb +61 -0
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +31 -1
- data/lib/rubocop/cop/style/multiline_when_then.rb +74 -0
- data/lib/rubocop/cop/style/multiple_comparison.rb +19 -4
- data/lib/rubocop/cop/style/mutable_constant.rb +123 -15
- data/lib/rubocop/cop/style/negated_if.rb +26 -34
- data/lib/rubocop/cop/style/negated_unless.rb +89 -0
- data/lib/rubocop/cop/style/negated_while.rb +22 -6
- data/lib/rubocop/cop/style/nested_modifier.rb +28 -8
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +25 -24
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +39 -1
- data/lib/rubocop/cop/style/next.rb +64 -35
- data/lib/rubocop/cop/style/nil_comparison.rb +51 -11
- data/lib/rubocop/cop/style/non_nil_check.rb +42 -27
- data/lib/rubocop/cop/style/not.rb +21 -8
- data/lib/rubocop/cop/style/numeric_literal_prefix.rb +46 -23
- data/lib/rubocop/cop/style/numeric_literals.rb +31 -18
- data/lib/rubocop/cop/style/numeric_predicate.rb +26 -32
- data/lib/rubocop/cop/style/one_line_conditional.rb +36 -18
- data/lib/rubocop/cop/style/option_hash.rb +22 -14
- data/lib/rubocop/cop/style/optional_arguments.rb +3 -6
- data/lib/rubocop/cop/style/or_assignment.rb +17 -9
- data/lib/rubocop/cop/style/parallel_assignment.rb +16 -16
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +65 -5
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +33 -6
- data/lib/rubocop/cop/style/percent_q_literals.rb +29 -8
- data/lib/rubocop/cop/style/perl_backrefs.rb +10 -3
- data/lib/rubocop/cop/style/preferred_hash_methods.rb +7 -10
- data/lib/rubocop/cop/style/proc.rb +12 -4
- data/lib/rubocop/cop/style/raise_args.rb +27 -21
- data/lib/rubocop/cop/style/random_with_offset.rb +152 -0
- data/lib/rubocop/cop/style/redundant_assignment.rb +117 -0
- data/lib/rubocop/cop/style/redundant_begin.rb +48 -5
- data/lib/rubocop/cop/style/{unneeded_capital_w.rb → redundant_capital_w.rb} +19 -9
- data/lib/rubocop/cop/style/redundant_condition.rb +124 -0
- data/lib/rubocop/cop/style/redundant_conditional.rb +17 -14
- data/lib/rubocop/cop/style/redundant_exception.rb +26 -17
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +122 -0
- data/lib/rubocop/cop/style/redundant_freeze.rb +24 -2
- data/lib/rubocop/cop/style/{unneeded_interpolation.rb → redundant_interpolation.rb} +20 -24
- data/lib/rubocop/cop/style/redundant_parentheses.rb +59 -27
- data/lib/rubocop/cop/style/{unneeded_percent_q.rb → redundant_percent_q.rb} +40 -24
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +90 -0
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +121 -0
- data/lib/rubocop/cop/style/redundant_return.rb +87 -51
- data/lib/rubocop/cop/style/redundant_self.rb +56 -41
- data/lib/rubocop/cop/style/redundant_sort.rb +165 -0
- data/lib/rubocop/cop/{performance → style}/redundant_sort_by.rb +9 -7
- data/lib/rubocop/cop/style/regexp_literal.rb +126 -20
- data/lib/rubocop/cop/style/rescue_modifier.rb +39 -3
- data/lib/rubocop/cop/style/rescue_standard_error.rb +124 -0
- data/lib/rubocop/cop/style/return_nil.rb +8 -12
- data/lib/rubocop/cop/style/safe_navigation.rb +123 -31
- data/lib/rubocop/cop/{performance → style}/sample.rb +17 -13
- data/lib/rubocop/cop/style/self_assignment.rb +14 -14
- data/lib/rubocop/cop/style/semicolon.rb +45 -14
- data/lib/rubocop/cop/style/send.rb +12 -2
- data/lib/rubocop/cop/style/signal_exception.rb +104 -3
- data/lib/rubocop/cop/style/single_line_block_params.rb +22 -2
- data/lib/rubocop/cop/style/single_line_methods.rb +41 -31
- data/lib/rubocop/cop/style/slicing_with_range.rb +39 -0
- data/lib/rubocop/cop/style/special_global_vars.rb +75 -24
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +13 -21
- data/lib/rubocop/cop/style/stderr_puts.rb +14 -5
- data/lib/rubocop/cop/style/string_hash_keys.rb +50 -0
- data/lib/rubocop/cop/style/string_literals.rb +29 -3
- data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +7 -9
- data/lib/rubocop/cop/style/string_methods.rb +19 -7
- data/lib/rubocop/cop/{performance/lstrip_rstrip.rb → style/strip.rb} +10 -7
- data/lib/rubocop/cop/style/struct_inheritance.rb +36 -8
- data/lib/rubocop/cop/style/symbol_array.rb +51 -17
- data/lib/rubocop/cop/style/symbol_literal.rb +3 -3
- data/lib/rubocop/cop/style/symbol_proc.rb +32 -54
- data/lib/rubocop/cop/style/ternary_parentheses.rb +69 -53
- data/lib/rubocop/cop/style/trailing_body_on_class.rb +43 -0
- data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +54 -0
- data/lib/rubocop/cop/style/trailing_body_on_module.rb +43 -0
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +69 -24
- data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +99 -0
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +88 -0
- data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +100 -0
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +91 -0
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +19 -9
- data/lib/rubocop/cop/style/trivial_accessors.rb +51 -20
- data/lib/rubocop/cop/style/unless_else.rb +21 -5
- data/lib/rubocop/cop/style/unpack_first.rb +61 -0
- data/lib/rubocop/cop/style/variable_interpolation.rb +22 -21
- data/lib/rubocop/cop/style/when_then.rb +15 -2
- data/lib/rubocop/cop/style/while_until_do.rb +26 -4
- data/lib/rubocop/cop/style/while_until_modifier.rb +26 -7
- data/lib/rubocop/cop/style/word_array.rb +22 -18
- data/lib/rubocop/cop/style/yoda_condition.rb +96 -36
- data/lib/rubocop/cop/style/zero_length_predicate.rb +40 -20
- data/lib/rubocop/cop/team.rb +159 -91
- data/lib/rubocop/cop/util.rb +51 -209
- data/lib/rubocop/cop/utils/format_string.rb +137 -0
- data/lib/rubocop/cop/variable_force/assignment.rb +9 -2
- data/lib/rubocop/cop/variable_force/branch.rb +5 -3
- data/lib/rubocop/cop/variable_force/branchable.rb +2 -0
- data/lib/rubocop/cop/variable_force/scope.rb +8 -5
- data/lib/rubocop/cop/variable_force/variable.rb +21 -10
- data/lib/rubocop/cop/variable_force/variable_table.rb +4 -3
- data/lib/rubocop/cop/variable_force.rb +41 -36
- data/lib/rubocop/core_ext/string.rb +23 -0
- data/lib/rubocop/error.rb +23 -0
- data/lib/rubocop/ext/processed_source.rb +18 -0
- data/lib/rubocop/file_finder.rb +42 -0
- data/lib/rubocop/formatter/auto_gen_config_formatter.rb +16 -0
- data/lib/rubocop/formatter/base_formatter.rb +3 -7
- data/lib/rubocop/formatter/clang_style_formatter.rb +9 -6
- data/lib/rubocop/formatter/disabled_config_formatter.rb +84 -49
- data/lib/rubocop/formatter/emacs_style_formatter.rb +22 -9
- data/lib/rubocop/formatter/file_list_formatter.rb +2 -1
- data/lib/rubocop/formatter/formatter_set.rb +17 -16
- data/lib/rubocop/formatter/fuubar_style_formatter.rb +2 -2
- data/lib/rubocop/formatter/html_formatter.rb +13 -6
- data/lib/rubocop/formatter/json_formatter.rb +16 -9
- data/lib/rubocop/formatter/junit_formatter.rb +84 -0
- data/lib/rubocop/formatter/offense_count_formatter.rb +17 -0
- data/lib/rubocop/formatter/pacman_formatter.rb +80 -0
- data/lib/rubocop/formatter/progress_formatter.rb +1 -1
- data/lib/rubocop/formatter/quiet_formatter.rb +13 -0
- data/lib/rubocop/formatter/simple_text_formatter.rb +18 -5
- data/lib/rubocop/formatter/tap_formatter.rb +17 -6
- data/lib/rubocop/magic_comment.rb +15 -11
- data/lib/rubocop/name_similarity.rb +17 -10
- data/lib/rubocop/options.rb +267 -139
- data/lib/rubocop/path_util.rb +45 -7
- data/lib/rubocop/platform.rb +1 -1
- data/lib/rubocop/rake_task.rb +7 -9
- data/lib/rubocop/remote_config.rb +23 -9
- data/lib/rubocop/result_cache.rb +50 -23
- data/lib/rubocop/rspec/cop_helper.rb +10 -37
- data/lib/rubocop/rspec/expect_offense.rb +124 -12
- data/lib/rubocop/rspec/host_environment_simulation_helper.rb +1 -5
- data/lib/rubocop/rspec/shared_contexts.rb +78 -39
- data/lib/rubocop/rspec/support.rb +5 -1
- data/lib/rubocop/runner.rb +109 -59
- data/lib/rubocop/string_interpreter.rb +8 -8
- data/lib/rubocop/target_finder.rb +62 -68
- data/lib/rubocop/target_ruby.rb +154 -0
- data/lib/rubocop/version.rb +8 -4
- data/lib/rubocop/yaml_duplication_checker.rb +39 -0
- data/lib/rubocop.rb +188 -149
- metadata +257 -182
- data/config/disabled.yml +0 -118
- data/config/enabled.yml +0 -1892
- data/lib/rubocop/ast/builder.rb +0 -70
- data/lib/rubocop/ast/node/and_node.rb +0 -37
- data/lib/rubocop/ast/node/args_node.rb +0 -12
- data/lib/rubocop/ast/node/array_node.rb +0 -57
- data/lib/rubocop/ast/node/block_node.rb +0 -116
- data/lib/rubocop/ast/node/case_node.rb +0 -64
- data/lib/rubocop/ast/node/def_node.rb +0 -71
- data/lib/rubocop/ast/node/ensure_node.rb +0 -25
- data/lib/rubocop/ast/node/for_node.rb +0 -61
- data/lib/rubocop/ast/node/hash_node.rb +0 -109
- data/lib/rubocop/ast/node/if_node.rb +0 -146
- data/lib/rubocop/ast/node/keyword_splat_node.rb +0 -45
- data/lib/rubocop/ast/node/mixin/binary_operator_node.rb +0 -23
- data/lib/rubocop/ast/node/mixin/collection_node.rb +0 -15
- data/lib/rubocop/ast/node/mixin/conditional_node.rb +0 -45
- data/lib/rubocop/ast/node/mixin/hash_element_node.rb +0 -125
- data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +0 -174
- data/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +0 -89
- data/lib/rubocop/ast/node/mixin/modifier_node.rb +0 -17
- data/lib/rubocop/ast/node/mixin/parameterized_node.rb +0 -61
- data/lib/rubocop/ast/node/mixin/predicate_operator_node.rb +0 -35
- data/lib/rubocop/ast/node/or_node.rb +0 -37
- data/lib/rubocop/ast/node/pair_node.rb +0 -64
- data/lib/rubocop/ast/node/regexp_node.rb +0 -35
- data/lib/rubocop/ast/node/resbody_node.rb +0 -25
- data/lib/rubocop/ast/node/send_node.rb +0 -25
- data/lib/rubocop/ast/node/super_node.rb +0 -21
- data/lib/rubocop/ast/node/until_node.rb +0 -43
- data/lib/rubocop/ast/node/when_node.rb +0 -61
- data/lib/rubocop/ast/node/while_node.rb +0 -43
- data/lib/rubocop/ast/node/yield_node.rb +0 -21
- data/lib/rubocop/ast/node.rb +0 -604
- data/lib/rubocop/ast/sexp.rb +0 -16
- data/lib/rubocop/ast/traversal.rb +0 -171
- data/lib/rubocop/cop/internal_affairs/deprecated_positional_arguments.rb +0 -81
- data/lib/rubocop/cop/layout/align_array.rb +0 -35
- data/lib/rubocop/cop/layout/align_hash.rb +0 -235
- data/lib/rubocop/cop/layout/indent_array.rb +0 -114
- data/lib/rubocop/cop/layout/indent_heredoc.rb +0 -168
- data/lib/rubocop/cop/layout/space_inside_brackets.rb +0 -20
- data/lib/rubocop/cop/layout/tab.rb +0 -60
- data/lib/rubocop/cop/lint/end_in_method.rb +0 -40
- data/lib/rubocop/cop/lint/handle_exceptions.rb +0 -56
- data/lib/rubocop/cop/lint/rescue_without_error_class.rb +0 -41
- data/lib/rubocop/cop/metrics/line_length.rb +0 -171
- data/lib/rubocop/cop/mixin/autocorrect_alignment.rb +0 -149
- data/lib/rubocop/cop/mixin/classish_length.rb +0 -36
- data/lib/rubocop/cop/mixin/safe_mode.rb +0 -22
- data/lib/rubocop/cop/mixin/space_inside.rb +0 -76
- data/lib/rubocop/cop/mixin/target_rails_version.rb +0 -16
- data/lib/rubocop/cop/performance/caller.rb +0 -69
- data/lib/rubocop/cop/performance/case_when_splat.rb +0 -176
- data/lib/rubocop/cop/performance/casecmp.rb +0 -107
- data/lib/rubocop/cop/performance/compare_with_block.rb +0 -111
- data/lib/rubocop/cop/performance/count.rb +0 -100
- data/lib/rubocop/cop/performance/detect.rb +0 -107
- data/lib/rubocop/cop/performance/double_start_end_with.rb +0 -99
- data/lib/rubocop/cop/performance/end_with.rb +0 -55
- data/lib/rubocop/cop/performance/fixed_size.rb +0 -56
- data/lib/rubocop/cop/performance/flat_map.rb +0 -75
- data/lib/rubocop/cop/performance/hash_each_methods.rb +0 -128
- data/lib/rubocop/cop/performance/range_include.rb +0 -41
- data/lib/rubocop/cop/performance/redundant_block_call.rb +0 -93
- data/lib/rubocop/cop/performance/redundant_match.rb +0 -56
- data/lib/rubocop/cop/performance/redundant_merge.rb +0 -167
- data/lib/rubocop/cop/performance/regexp_match.rb +0 -223
- data/lib/rubocop/cop/performance/reverse_each.rb +0 -40
- data/lib/rubocop/cop/performance/size.rb +0 -71
- data/lib/rubocop/cop/performance/start_with.rb +0 -58
- data/lib/rubocop/cop/performance/string_replacement.rb +0 -170
- data/lib/rubocop/cop/performance/times_map.rb +0 -72
- data/lib/rubocop/cop/performance/unfreeze_string.rb +0 -50
- data/lib/rubocop/cop/performance/uri_default_parser.rb +0 -47
- data/lib/rubocop/cop/rails/action_filter.rb +0 -94
- data/lib/rubocop/cop/rails/active_support_aliases.rb +0 -67
- data/lib/rubocop/cop/rails/application_job.rb +0 -32
- data/lib/rubocop/cop/rails/application_record.rb +0 -32
- data/lib/rubocop/cop/rails/blank.rb +0 -141
- data/lib/rubocop/cop/rails/date.rb +0 -128
- data/lib/rubocop/cop/rails/delegate.rb +0 -135
- data/lib/rubocop/cop/rails/delegate_allow_blank.rb +0 -51
- data/lib/rubocop/cop/rails/dynamic_find_by.rb +0 -81
- data/lib/rubocop/cop/rails/enum_uniqueness.rb +0 -43
- data/lib/rubocop/cop/rails/exit.rb +0 -61
- data/lib/rubocop/cop/rails/file_path.rb +0 -72
- data/lib/rubocop/cop/rails/find_by.rb +0 -52
- data/lib/rubocop/cop/rails/find_each.rb +0 -47
- data/lib/rubocop/cop/rails/has_and_belongs_to_many.rb +0 -18
- data/lib/rubocop/cop/rails/has_many_or_has_one_dependent.rb +0 -72
- data/lib/rubocop/cop/rails/http_positional_arguments.rb +0 -107
- data/lib/rubocop/cop/rails/not_null_column.rb +0 -67
- data/lib/rubocop/cop/rails/output.rb +0 -23
- data/lib/rubocop/cop/rails/output_safety.rb +0 -99
- data/lib/rubocop/cop/rails/pluralization_grammar.rb +0 -106
- data/lib/rubocop/cop/rails/present.rb +0 -140
- data/lib/rubocop/cop/rails/read_write_attribute.rb +0 -65
- data/lib/rubocop/cop/rails/relative_date_constant.rb +0 -88
- data/lib/rubocop/cop/rails/request_referer.rb +0 -56
- data/lib/rubocop/cop/rails/reversible_migration.rb +0 -282
- data/lib/rubocop/cop/rails/safe_navigation.rb +0 -91
- data/lib/rubocop/cop/rails/save_bang.rb +0 -162
- data/lib/rubocop/cop/rails/scope_args.rb +0 -29
- data/lib/rubocop/cop/rails/skips_model_validations.rb +0 -70
- data/lib/rubocop/cop/rails/time_zone.rb +0 -198
- data/lib/rubocop/cop/rails/uniq_before_pluck.rb +0 -95
- data/lib/rubocop/cop/rails/unknown_env.rb +0 -63
- data/lib/rubocop/cop/rails/validation.rb +0 -64
- data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +0 -141
- data/lib/rubocop/cop/style/flip_flop.rb +0 -20
- data/lib/rubocop/cop/style/method_missing.rb +0 -68
- data/lib/rubocop/cop/style/trailing_comma_in_literal.rb +0 -56
- data/lib/rubocop/formatter/disabled_lines_formatter.rb +0 -57
- data/lib/rubocop/node_pattern.rb +0 -561
- data/lib/rubocop/processed_source.rb +0 -147
- data/lib/rubocop/rspec/shared_examples.rb +0 -92
- data/lib/rubocop/string_util.rb +0 -158
- data/lib/rubocop/token.rb +0 -25
- /data/{bin → exe}/rubocop +0 -0
|
@@ -6,6 +6,10 @@ module RuboCop
|
|
|
6
6
|
# This cop checks for setter call to local variable as the final
|
|
7
7
|
# expression of a function definition.
|
|
8
8
|
#
|
|
9
|
+
# NOTE: There are edge cases in which the local variable references a
|
|
10
|
+
# value that is also accessible outside the local scope. This is not
|
|
11
|
+
# detected by the cop, and it can yield a false positive.
|
|
12
|
+
#
|
|
9
13
|
# @example
|
|
10
14
|
#
|
|
11
15
|
# # bad
|
|
@@ -25,7 +29,7 @@ module RuboCop
|
|
|
25
29
|
# x
|
|
26
30
|
# end
|
|
27
31
|
class UselessSetterCall < Cop
|
|
28
|
-
MSG = 'Useless setter call to local variable
|
|
32
|
+
MSG = 'Useless setter call to local variable `%<variable>s`.'
|
|
29
33
|
ASSIGNMENT_TYPES = %i[lvasgn ivasgn cvasgn gvasgn].freeze
|
|
30
34
|
|
|
31
35
|
def on_def(node)
|
|
@@ -42,26 +46,23 @@ module RuboCop
|
|
|
42
46
|
add_offense(
|
|
43
47
|
receiver,
|
|
44
48
|
location: :name,
|
|
45
|
-
message: format(MSG, receiver.loc.name.source)
|
|
49
|
+
message: format(MSG, variable: receiver.loc.name.source)
|
|
46
50
|
)
|
|
47
51
|
end
|
|
48
52
|
alias on_defs on_def
|
|
49
53
|
|
|
50
54
|
private
|
|
51
55
|
|
|
56
|
+
def_node_matcher :setter_call_to_local_variable?, <<~PATTERN
|
|
57
|
+
[(send (lvar _) ...) setter_method?]
|
|
58
|
+
PATTERN
|
|
59
|
+
|
|
52
60
|
def last_expression(body)
|
|
53
61
|
expression = body.begin_type? ? body.children : body
|
|
54
62
|
|
|
55
63
|
expression.is_a?(Array) ? expression.last : expression
|
|
56
64
|
end
|
|
57
65
|
|
|
58
|
-
def setter_call_to_local_variable?(node)
|
|
59
|
-
return unless node && node.send_type?
|
|
60
|
-
return unless node.receiver && node.receiver.lvar_type?
|
|
61
|
-
|
|
62
|
-
node.method_name =~ /(?:\w|\[\])=$/
|
|
63
|
-
end
|
|
64
|
-
|
|
65
66
|
# This class tracks variable assignments in a method body
|
|
66
67
|
# and if a variable contains object passed as argument at the end of
|
|
67
68
|
# the method.
|
|
@@ -127,6 +128,7 @@ module RuboCop
|
|
|
127
128
|
def process_logical_operator_assignment(asgn_node)
|
|
128
129
|
lhs_node, rhs_node = *asgn_node
|
|
129
130
|
return unless ASSIGNMENT_TYPES.include?(lhs_node.type)
|
|
131
|
+
|
|
130
132
|
process_assignment(lhs_node, rhs_node)
|
|
131
133
|
|
|
132
134
|
throw :skip_children
|
|
@@ -135,6 +137,7 @@ module RuboCop
|
|
|
135
137
|
def process_binary_operator_assignment(op_asgn_node)
|
|
136
138
|
lhs_node, = *op_asgn_node
|
|
137
139
|
return unless ASSIGNMENT_TYPES.include?(lhs_node.type)
|
|
140
|
+
|
|
138
141
|
lhs_variable_name, = *lhs_node
|
|
139
142
|
@local[lhs_variable_name] = true
|
|
140
143
|
|
|
@@ -155,8 +158,8 @@ module RuboCop
|
|
|
155
158
|
def constructor?(node)
|
|
156
159
|
return true if node.literal?
|
|
157
160
|
return false unless node.send_type?
|
|
158
|
-
|
|
159
|
-
method
|
|
161
|
+
|
|
162
|
+
node.method?(:new)
|
|
160
163
|
end
|
|
161
164
|
end
|
|
162
165
|
end
|
|
@@ -3,55 +3,70 @@
|
|
|
3
3
|
module RuboCop
|
|
4
4
|
module Cop
|
|
5
5
|
module Lint
|
|
6
|
-
# This cop checks for operators, variables and
|
|
7
|
-
# in void context.
|
|
8
|
-
#
|
|
9
|
-
# @example
|
|
6
|
+
# This cop checks for operators, variables, literals, and nonmutating
|
|
7
|
+
# methods used in void context.
|
|
10
8
|
#
|
|
9
|
+
# @example CheckForMethodsWithNoSideEffects: false (default)
|
|
11
10
|
# # bad
|
|
12
|
-
#
|
|
13
11
|
# def some_method
|
|
14
12
|
# some_num * 10
|
|
15
13
|
# do_something
|
|
16
14
|
# end
|
|
17
15
|
#
|
|
18
|
-
# @example
|
|
19
|
-
#
|
|
20
|
-
# # bad
|
|
21
|
-
#
|
|
22
16
|
# def some_method(some_var)
|
|
23
17
|
# some_var
|
|
24
18
|
# do_something
|
|
25
19
|
# end
|
|
26
20
|
#
|
|
27
|
-
# @example
|
|
21
|
+
# @example CheckForMethodsWithNoSideEffects: true
|
|
22
|
+
# # bad
|
|
23
|
+
# def some_method(some_array)
|
|
24
|
+
# some_array.sort
|
|
25
|
+
# do_something(some_array)
|
|
26
|
+
# end
|
|
28
27
|
#
|
|
29
28
|
# # good
|
|
30
|
-
#
|
|
31
29
|
# def some_method
|
|
32
30
|
# do_something
|
|
33
31
|
# some_num * 10
|
|
34
32
|
# end
|
|
35
33
|
#
|
|
36
|
-
# @example
|
|
37
|
-
#
|
|
38
|
-
# # good
|
|
39
|
-
#
|
|
40
34
|
# def some_method(some_var)
|
|
41
35
|
# do_something
|
|
42
36
|
# some_var
|
|
43
37
|
# end
|
|
38
|
+
#
|
|
39
|
+
# def some_method(some_array)
|
|
40
|
+
# some_array.sort!
|
|
41
|
+
# do_something(some_array)
|
|
42
|
+
# end
|
|
44
43
|
class Void < Cop
|
|
45
|
-
OP_MSG = 'Operator
|
|
46
|
-
VAR_MSG = 'Variable
|
|
47
|
-
LIT_MSG = 'Literal
|
|
48
|
-
SELF_MSG = '`self` used in void context.'
|
|
49
|
-
DEFINED_MSG = '
|
|
44
|
+
OP_MSG = 'Operator `%<op>s` used in void context.'
|
|
45
|
+
VAR_MSG = 'Variable `%<var>s` used in void context.'
|
|
46
|
+
LIT_MSG = 'Literal `%<lit>s` used in void context.'
|
|
47
|
+
SELF_MSG = '`self` used in void context.'
|
|
48
|
+
DEFINED_MSG = '`%<defined>s` used in void context.'
|
|
49
|
+
NONMUTATING_MSG = 'Method `#%<method>s` used in void context. ' \
|
|
50
|
+
'Did you mean `#%<method>s!`?'
|
|
50
51
|
|
|
51
52
|
BINARY_OPERATORS = %i[* / % + - == === != < > <= >= <=>].freeze
|
|
52
53
|
UNARY_OPERATORS = %i[+@ -@ ~ !].freeze
|
|
53
54
|
OPERATORS = (BINARY_OPERATORS + UNARY_OPERATORS).freeze
|
|
54
55
|
VOID_CONTEXT_TYPES = %i[def for block].freeze
|
|
56
|
+
NONMUTATING_METHODS = %i[capitalize chomp chop collect compact
|
|
57
|
+
delete_prefix delete_suffix downcase
|
|
58
|
+
encode flatten gsub lstrip map merge next
|
|
59
|
+
reject reverse rotate rstrip scrub select
|
|
60
|
+
shuffle slice sort sort_by squeeze strip sub
|
|
61
|
+
succ swapcase tr tr_s transform_values
|
|
62
|
+
unicode_normalize uniq upcase].freeze
|
|
63
|
+
|
|
64
|
+
def on_block(node)
|
|
65
|
+
return unless node.body && !node.body.begin_type?
|
|
66
|
+
return unless in_void_context?(node.body)
|
|
67
|
+
|
|
68
|
+
check_expression(node.body)
|
|
69
|
+
end
|
|
55
70
|
|
|
56
71
|
def on_begin(node)
|
|
57
72
|
check_begin(node)
|
|
@@ -62,22 +77,29 @@ module RuboCop
|
|
|
62
77
|
|
|
63
78
|
def check_begin(node)
|
|
64
79
|
expressions = *node
|
|
65
|
-
expressions
|
|
80
|
+
expressions.pop unless in_void_context?(node)
|
|
66
81
|
expressions.each do |expr|
|
|
67
|
-
|
|
68
|
-
check_literal(expr)
|
|
69
|
-
check_var(expr)
|
|
70
|
-
check_self(expr)
|
|
71
|
-
check_defined(expr)
|
|
82
|
+
check_expression(expr)
|
|
72
83
|
end
|
|
73
84
|
end
|
|
74
85
|
|
|
86
|
+
def check_expression(expr)
|
|
87
|
+
check_void_op(expr)
|
|
88
|
+
check_literal(expr)
|
|
89
|
+
check_var(expr)
|
|
90
|
+
check_self(expr)
|
|
91
|
+
check_defined(expr)
|
|
92
|
+
return unless cop_config['CheckForMethodsWithNoSideEffects']
|
|
93
|
+
|
|
94
|
+
check_nonmutating(expr)
|
|
95
|
+
end
|
|
96
|
+
|
|
75
97
|
def check_void_op(node)
|
|
76
98
|
return unless node.send_type? && OPERATORS.include?(node.method_name)
|
|
77
99
|
|
|
78
100
|
add_offense(node,
|
|
79
101
|
location: :selector,
|
|
80
|
-
message: format(OP_MSG, node.method_name))
|
|
102
|
+
message: format(OP_MSG, op: node.method_name))
|
|
81
103
|
end
|
|
82
104
|
|
|
83
105
|
def check_var(node)
|
|
@@ -85,13 +107,13 @@ module RuboCop
|
|
|
85
107
|
|
|
86
108
|
add_offense(node,
|
|
87
109
|
location: :name,
|
|
88
|
-
message: format(VAR_MSG, node.loc.name.source))
|
|
110
|
+
message: format(VAR_MSG, var: node.loc.name.source))
|
|
89
111
|
end
|
|
90
112
|
|
|
91
113
|
def check_literal(node)
|
|
92
114
|
return if !node.literal? || node.xstr_type?
|
|
93
115
|
|
|
94
|
-
add_offense(node, message: format(LIT_MSG, node.source))
|
|
116
|
+
add_offense(node, message: format(LIT_MSG, lit: node.source))
|
|
95
117
|
end
|
|
96
118
|
|
|
97
119
|
def check_self(node)
|
|
@@ -103,7 +125,17 @@ module RuboCop
|
|
|
103
125
|
def check_defined(node)
|
|
104
126
|
return unless node.defined_type?
|
|
105
127
|
|
|
106
|
-
add_offense(node, message: format(DEFINED_MSG, node.source))
|
|
128
|
+
add_offense(node, message: format(DEFINED_MSG, defined: node.source))
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def check_nonmutating(node)
|
|
132
|
+
unless node.send_type? &&
|
|
133
|
+
NONMUTATING_METHODS.include?(node.method_name)
|
|
134
|
+
return
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
add_offense(node, message: format(NONMUTATING_MSG,
|
|
138
|
+
method: node.method_name))
|
|
107
139
|
end
|
|
108
140
|
|
|
109
141
|
def in_void_context?(node)
|
|
@@ -9,11 +9,11 @@ module RuboCop
|
|
|
9
9
|
#
|
|
10
10
|
# @example
|
|
11
11
|
# RuboCop::Cop::MessageAnnotator.new(
|
|
12
|
-
# config, cop_config, @options
|
|
13
|
-
# ).annotate('message'
|
|
12
|
+
# config, cop_name, cop_config, @options
|
|
13
|
+
# ).annotate('message')
|
|
14
14
|
# #=> 'Cop/CopName: message (http://example.org/styleguide)'
|
|
15
15
|
class MessageAnnotator
|
|
16
|
-
attr_reader :options, :config, :cop_config
|
|
16
|
+
attr_reader :options, :config, :cop_name, :cop_config
|
|
17
17
|
|
|
18
18
|
@style_guide_urls = {}
|
|
19
19
|
|
|
@@ -29,6 +29,7 @@ module RuboCop
|
|
|
29
29
|
# :ExtraDetails [Boolean] Include cop details
|
|
30
30
|
# :DisplayCopNames [Boolean] Include cop name
|
|
31
31
|
#
|
|
32
|
+
# @param [String] cop_name for specific cop name
|
|
32
33
|
# @param [Hash] cop_config configs for specific cop, from config#for_cop
|
|
33
34
|
# @option cop_config [String] :StyleGuide Extension of base styleguide URL
|
|
34
35
|
# @option cop_config [String] :Reference Full reference URL
|
|
@@ -43,8 +44,9 @@ module RuboCop
|
|
|
43
44
|
# Include debug output
|
|
44
45
|
# @option options [Boolean] :display_cop_names
|
|
45
46
|
# Include cop name
|
|
46
|
-
def initialize(config, cop_config, options)
|
|
47
|
+
def initialize(config, cop_name, cop_config, options)
|
|
47
48
|
@config = config
|
|
49
|
+
@cop_name = cop_name
|
|
48
50
|
@cop_config = cop_config || {}
|
|
49
51
|
@options = options
|
|
50
52
|
end
|
|
@@ -53,8 +55,8 @@ module RuboCop
|
|
|
53
55
|
# based on params passed into initializer
|
|
54
56
|
#
|
|
55
57
|
# @return [String] annotated message
|
|
56
|
-
def annotate(message
|
|
57
|
-
message = "#{
|
|
58
|
+
def annotate(message)
|
|
59
|
+
message = "#{cop_name}: #{message}" if display_cop_names?
|
|
58
60
|
message += " #{details}" if extra_details? && details
|
|
59
61
|
if display_style_guide?
|
|
60
62
|
links = urls.join(', ')
|
|
@@ -64,7 +66,7 @@ module RuboCop
|
|
|
64
66
|
end
|
|
65
67
|
|
|
66
68
|
def urls
|
|
67
|
-
[style_guide_url,
|
|
69
|
+
[style_guide_url, *reference_urls].compact
|
|
68
70
|
end
|
|
69
71
|
|
|
70
72
|
private
|
|
@@ -74,7 +76,7 @@ module RuboCop
|
|
|
74
76
|
return nil if url.nil? || url.empty?
|
|
75
77
|
|
|
76
78
|
self.class.style_guide_urls[url] ||= begin
|
|
77
|
-
base_url =
|
|
79
|
+
base_url = style_guide_base_url
|
|
78
80
|
if base_url.nil? || base_url.empty?
|
|
79
81
|
url
|
|
80
82
|
else
|
|
@@ -83,15 +85,22 @@ module RuboCop
|
|
|
83
85
|
end
|
|
84
86
|
end
|
|
85
87
|
|
|
88
|
+
def style_guide_base_url
|
|
89
|
+
department_name = cop_name.split('/').first
|
|
90
|
+
|
|
91
|
+
config.for_department(department_name)['StyleGuideBaseURL'] ||
|
|
92
|
+
config.for_all_cops['StyleGuideBaseURL']
|
|
93
|
+
end
|
|
94
|
+
|
|
86
95
|
def display_style_guide?
|
|
87
96
|
(options[:display_style_guide] ||
|
|
88
97
|
config.for_all_cops['DisplayStyleGuide']) &&
|
|
89
98
|
!urls.empty?
|
|
90
99
|
end
|
|
91
100
|
|
|
92
|
-
def
|
|
93
|
-
|
|
94
|
-
|
|
101
|
+
def reference_urls
|
|
102
|
+
urls = Array(cop_config['Reference'])
|
|
103
|
+
urls.nil? || urls.empty? ? nil : urls.reject(&:empty?)
|
|
95
104
|
end
|
|
96
105
|
|
|
97
106
|
def extra_details?
|
|
@@ -103,8 +112,12 @@ module RuboCop
|
|
|
103
112
|
end
|
|
104
113
|
|
|
105
114
|
def display_cop_names?
|
|
106
|
-
|
|
107
|
-
|
|
115
|
+
return true if debug?
|
|
116
|
+
return false if options[:display_cop_names] == false
|
|
117
|
+
return true if options[:display_cop_names]
|
|
118
|
+
return false if options[:format] == 'json'
|
|
119
|
+
|
|
120
|
+
config.for_all_cops['DisplayCopNames']
|
|
108
121
|
end
|
|
109
122
|
|
|
110
123
|
def details
|
|
@@ -6,32 +6,17 @@ module RuboCop
|
|
|
6
6
|
# This cop checks that the ABC size of methods is not higher than the
|
|
7
7
|
# configured maximum. The ABC size is based on assignments, branches
|
|
8
8
|
# (method calls), and conditions. See http://c2.com/cgi/wiki?AbcMetric
|
|
9
|
+
# and https://en.wikipedia.org/wiki/ABC_Software_Metric.
|
|
9
10
|
class AbcSize < Cop
|
|
10
11
|
include MethodComplexity
|
|
11
12
|
|
|
12
|
-
MSG = 'Assignment Branch Condition size for
|
|
13
|
-
'[
|
|
14
|
-
BRANCH_NODES = %i[send csend].freeze
|
|
15
|
-
CONDITION_NODES = CyclomaticComplexity::COUNTED_NODES.freeze
|
|
13
|
+
MSG = 'Assignment Branch Condition size for %<method>s is too high. ' \
|
|
14
|
+
'[%<abc_vector>s %<complexity>.4g/%<max>.4g]'
|
|
16
15
|
|
|
17
16
|
private
|
|
18
17
|
|
|
19
18
|
def complexity(node)
|
|
20
|
-
|
|
21
|
-
branch = 0
|
|
22
|
-
condition = 0
|
|
23
|
-
|
|
24
|
-
node.each_node do |child|
|
|
25
|
-
if child.assignment?
|
|
26
|
-
assignment += 1
|
|
27
|
-
elsif BRANCH_NODES.include?(child.type)
|
|
28
|
-
branch += 1
|
|
29
|
-
elsif CONDITION_NODES.include?(child.type)
|
|
30
|
-
condition += 1
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
Math.sqrt(assignment**2 + branch**2 + condition**2).round(2)
|
|
19
|
+
Utils::AbcSizeCalculator.calculate(node)
|
|
35
20
|
end
|
|
36
21
|
end
|
|
37
22
|
end
|
|
@@ -7,18 +7,58 @@ module RuboCop
|
|
|
7
7
|
# Comment lines can optionally be ignored.
|
|
8
8
|
# The maximum allowed length is configurable.
|
|
9
9
|
# The cop can be configured to ignore blocks passed to certain methods.
|
|
10
|
+
#
|
|
11
|
+
# You can set literals you want to fold with `CountAsOne`.
|
|
12
|
+
# Available are: 'array', 'hash', and 'heredoc'. Each literal
|
|
13
|
+
# will be counted as one line regardless of its actual size.
|
|
14
|
+
#
|
|
15
|
+
# @example CountAsOne: ['array', 'heredoc']
|
|
16
|
+
#
|
|
17
|
+
# something do
|
|
18
|
+
# array = [ # +1
|
|
19
|
+
# 1,
|
|
20
|
+
# 2
|
|
21
|
+
# ]
|
|
22
|
+
#
|
|
23
|
+
# hash = { # +3
|
|
24
|
+
# key: 'value'
|
|
25
|
+
# }
|
|
26
|
+
#
|
|
27
|
+
# msg = <<~HEREDOC # +1
|
|
28
|
+
# Heredoc
|
|
29
|
+
# content.
|
|
30
|
+
# HEREDOC
|
|
31
|
+
# end # 5 points
|
|
10
32
|
class BlockLength < Cop
|
|
11
33
|
include TooManyLines
|
|
12
34
|
|
|
13
|
-
LABEL = 'Block'
|
|
35
|
+
LABEL = 'Block'
|
|
14
36
|
|
|
15
37
|
def on_block(node)
|
|
16
|
-
return if
|
|
38
|
+
return if excluded_method?(node)
|
|
39
|
+
return if node.class_constructor?
|
|
40
|
+
|
|
17
41
|
check_code_length(node)
|
|
18
42
|
end
|
|
19
43
|
|
|
20
44
|
private
|
|
21
45
|
|
|
46
|
+
def excluded_method?(node)
|
|
47
|
+
node_receiver = node.receiver&.source&.gsub(/\s+/, '')
|
|
48
|
+
node_method = String(node.method_name)
|
|
49
|
+
|
|
50
|
+
excluded_methods.any? do |config|
|
|
51
|
+
receiver, method = config.split('.')
|
|
52
|
+
|
|
53
|
+
unless method
|
|
54
|
+
method = receiver
|
|
55
|
+
receiver = node_receiver
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
method == node_method && receiver == node_receiver
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
22
62
|
def excluded_methods
|
|
23
63
|
cop_config['ExcludedMethods'] || []
|
|
24
64
|
end
|
|
@@ -6,17 +6,52 @@ module RuboCop
|
|
|
6
6
|
# This cop checks if the length a class exceeds some maximum value.
|
|
7
7
|
# Comment lines can optionally be ignored.
|
|
8
8
|
# The maximum allowed length is configurable.
|
|
9
|
+
#
|
|
10
|
+
# You can set literals you want to fold with `CountAsOne`.
|
|
11
|
+
# Available are: 'array', 'hash', and 'heredoc'. Each literal
|
|
12
|
+
# will be counted as one line regardless of its actual size.
|
|
13
|
+
#
|
|
14
|
+
# @example CountAsOne: ['array', 'heredoc']
|
|
15
|
+
#
|
|
16
|
+
# class Foo
|
|
17
|
+
# ARRAY = [ # +1
|
|
18
|
+
# 1,
|
|
19
|
+
# 2
|
|
20
|
+
# ]
|
|
21
|
+
#
|
|
22
|
+
# HASH = { # +3
|
|
23
|
+
# key: 'value'
|
|
24
|
+
# }
|
|
25
|
+
#
|
|
26
|
+
# MSG = <<~HEREDOC # +1
|
|
27
|
+
# Heredoc
|
|
28
|
+
# content.
|
|
29
|
+
# HEREDOC
|
|
30
|
+
# end # 5 points
|
|
31
|
+
#
|
|
9
32
|
class ClassLength < Cop
|
|
10
|
-
include
|
|
33
|
+
include TooManyLines
|
|
11
34
|
|
|
12
35
|
def on_class(node)
|
|
13
36
|
check_code_length(node)
|
|
14
37
|
end
|
|
15
38
|
|
|
39
|
+
def on_casgn(node)
|
|
40
|
+
class_definition?(node) do
|
|
41
|
+
check_code_length(node)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
16
45
|
private
|
|
17
46
|
|
|
47
|
+
def_node_matcher :class_definition?, <<~PATTERN
|
|
48
|
+
(casgn nil? _ (block (send (const {nil? cbase} :Class) :new) ...))
|
|
49
|
+
PATTERN
|
|
50
|
+
|
|
18
51
|
def message(length, max_length)
|
|
19
|
-
format('Class has too many lines. [
|
|
52
|
+
format('Class has too many lines. [%<length>d/%<max>d]',
|
|
53
|
+
length: length,
|
|
54
|
+
max: max_length)
|
|
20
55
|
end
|
|
21
56
|
end
|
|
22
57
|
end
|
|
@@ -13,18 +13,51 @@ module RuboCop
|
|
|
13
13
|
# operator (or keyword and) can be converted to a nested if statement,
|
|
14
14
|
# and ||/or is shorthand for a sequence of ifs, so they also add one.
|
|
15
15
|
# Loops can be said to have an exit condition, so they add one.
|
|
16
|
+
# Blocks that are calls to builtin iteration methods
|
|
17
|
+
# (e.g. `ary.map{...}) also add one, others are ignored.
|
|
18
|
+
#
|
|
19
|
+
# def each_child_node(*types) # count begins: 1
|
|
20
|
+
# unless block_given? # unless: +1
|
|
21
|
+
# return to_enum(__method__, *types)
|
|
22
|
+
#
|
|
23
|
+
# children.each do |child| # each{}: +1
|
|
24
|
+
# next unless child.is_a?(Node) # unless: +1
|
|
25
|
+
#
|
|
26
|
+
# yield child if types.empty? || # if: +1, ||: +1
|
|
27
|
+
# types.include?(child.type)
|
|
28
|
+
# end
|
|
29
|
+
#
|
|
30
|
+
# self
|
|
31
|
+
# end # total: 6
|
|
16
32
|
class CyclomaticComplexity < Cop
|
|
17
33
|
include MethodComplexity
|
|
34
|
+
include Utils::IteratingBlock
|
|
18
35
|
|
|
19
|
-
MSG = 'Cyclomatic complexity for
|
|
20
|
-
|
|
21
|
-
|
|
36
|
+
MSG = 'Cyclomatic complexity for %<method>s is too high. ' \
|
|
37
|
+
'[%<complexity>d/%<max>d]'
|
|
38
|
+
COUNTED_NODES = %i[if while until for csend block block_pass
|
|
39
|
+
rescue when and or or_asgn and_asgn].freeze
|
|
22
40
|
|
|
23
41
|
private
|
|
24
42
|
|
|
25
|
-
def complexity_score_for(
|
|
43
|
+
def complexity_score_for(node)
|
|
44
|
+
return 0 if iterating_block?(node) == false
|
|
45
|
+
|
|
26
46
|
1
|
|
27
47
|
end
|
|
48
|
+
|
|
49
|
+
def block_method(node)
|
|
50
|
+
case node.type
|
|
51
|
+
when :block
|
|
52
|
+
node.method_name
|
|
53
|
+
when :block_pass
|
|
54
|
+
node.parent.method_name
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def count_block?(block)
|
|
59
|
+
KNOWN_ITERATING_METHODS.include? block.method_name
|
|
60
|
+
end
|
|
28
61
|
end
|
|
29
62
|
end
|
|
30
63
|
end
|
|
@@ -6,18 +6,45 @@ module RuboCop
|
|
|
6
6
|
# This cop checks if the length of a method exceeds some maximum value.
|
|
7
7
|
# Comment lines can optionally be ignored.
|
|
8
8
|
# The maximum allowed length is configurable.
|
|
9
|
+
#
|
|
10
|
+
# You can set literals you want to fold with `CountAsOne`.
|
|
11
|
+
# Available are: 'array', 'hash', and 'heredoc'. Each literal
|
|
12
|
+
# will be counted as one line regardless of its actual size.
|
|
13
|
+
#
|
|
14
|
+
# @example CountAsOne: ['array', 'heredoc']
|
|
15
|
+
#
|
|
16
|
+
# def m
|
|
17
|
+
# array = [ # +1
|
|
18
|
+
# 1,
|
|
19
|
+
# 2
|
|
20
|
+
# ]
|
|
21
|
+
#
|
|
22
|
+
# hash = { # +3
|
|
23
|
+
# key: 'value'
|
|
24
|
+
# }
|
|
25
|
+
#
|
|
26
|
+
# <<~HEREDOC # +1
|
|
27
|
+
# Heredoc
|
|
28
|
+
# content.
|
|
29
|
+
# HEREDOC
|
|
30
|
+
# end # 5 points
|
|
31
|
+
#
|
|
9
32
|
class MethodLength < Cop
|
|
10
33
|
include TooManyLines
|
|
11
34
|
|
|
12
|
-
LABEL = 'Method'
|
|
35
|
+
LABEL = 'Method'
|
|
13
36
|
|
|
14
37
|
def on_def(node)
|
|
38
|
+
excluded_methods = cop_config['ExcludedMethods']
|
|
39
|
+
return if excluded_methods.include?(String(node.method_name))
|
|
40
|
+
|
|
15
41
|
check_code_length(node)
|
|
16
42
|
end
|
|
17
43
|
alias on_defs on_def
|
|
18
44
|
|
|
19
45
|
def on_block(node)
|
|
20
|
-
return unless node.send_node.
|
|
46
|
+
return unless node.send_node.method?(:define_method)
|
|
47
|
+
|
|
21
48
|
check_code_length(node)
|
|
22
49
|
end
|
|
23
50
|
|
|
@@ -6,17 +6,52 @@ module RuboCop
|
|
|
6
6
|
# This cop checks if the length a module exceeds some maximum value.
|
|
7
7
|
# Comment lines can optionally be ignored.
|
|
8
8
|
# The maximum allowed length is configurable.
|
|
9
|
+
#
|
|
10
|
+
# You can set literals you want to fold with `CountAsOne`.
|
|
11
|
+
# Available are: 'array', 'hash', and 'heredoc'. Each literal
|
|
12
|
+
# will be counted as one line regardless of its actual size.
|
|
13
|
+
#
|
|
14
|
+
# @example CountAsOne: ['array', 'heredoc']
|
|
15
|
+
#
|
|
16
|
+
# module M
|
|
17
|
+
# ARRAY = [ # +1
|
|
18
|
+
# 1,
|
|
19
|
+
# 2
|
|
20
|
+
# ]
|
|
21
|
+
#
|
|
22
|
+
# HASH = { # +3
|
|
23
|
+
# key: 'value'
|
|
24
|
+
# }
|
|
25
|
+
#
|
|
26
|
+
# MSG = <<~HEREDOC # +1
|
|
27
|
+
# Heredoc
|
|
28
|
+
# content.
|
|
29
|
+
# HEREDOC
|
|
30
|
+
# end # 5 points
|
|
31
|
+
#
|
|
9
32
|
class ModuleLength < Cop
|
|
10
|
-
include
|
|
33
|
+
include TooManyLines
|
|
11
34
|
|
|
12
35
|
def on_module(node)
|
|
13
36
|
check_code_length(node)
|
|
14
37
|
end
|
|
15
38
|
|
|
39
|
+
def on_casgn(node)
|
|
40
|
+
module_definition?(node) do
|
|
41
|
+
check_code_length(node)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
16
45
|
private
|
|
17
46
|
|
|
47
|
+
def_node_matcher :module_definition?, <<~PATTERN
|
|
48
|
+
(casgn nil? _ (block (send (const {nil? cbase} :Module) :new) ...))
|
|
49
|
+
PATTERN
|
|
50
|
+
|
|
18
51
|
def message(length, max_length)
|
|
19
|
-
format('Module has too many lines. [
|
|
52
|
+
format('Module has too many lines. [%<length>d/%<max>d]',
|
|
53
|
+
length: length,
|
|
54
|
+
max: max_length)
|
|
20
55
|
end
|
|
21
56
|
end
|
|
22
57
|
end
|