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
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RuboCop
|
|
4
|
+
module Cop
|
|
5
|
+
# This mixin detects collections that are safe to "break"
|
|
6
|
+
# by inserting new lines. This is useful for breaking
|
|
7
|
+
# up long lines.
|
|
8
|
+
#
|
|
9
|
+
# Let's look at hashes as an example:
|
|
10
|
+
#
|
|
11
|
+
# We know hash keys are safe to break across lines. We can add
|
|
12
|
+
# linebreaks into hashes on lines longer than the specified maximum.
|
|
13
|
+
# Then in further passes cops can clean up the multi-line hash.
|
|
14
|
+
# For example, say the maximum line length is as indicated below:
|
|
15
|
+
#
|
|
16
|
+
# |
|
|
17
|
+
# v
|
|
18
|
+
# {foo: "0000000000", bar: "0000000000", baz: "0000000000"}
|
|
19
|
+
#
|
|
20
|
+
# In a LineLength autocorrection pass, a line is added before
|
|
21
|
+
# the first key that exceeds the column limit:
|
|
22
|
+
#
|
|
23
|
+
# {foo: "0000000000", bar: "0000000000",
|
|
24
|
+
# baz: "0000000000"}
|
|
25
|
+
#
|
|
26
|
+
# In a MultilineHashKeyLineBreaks pass, lines are inserted
|
|
27
|
+
# before all keys:
|
|
28
|
+
#
|
|
29
|
+
# {foo: "0000000000",
|
|
30
|
+
# bar: "0000000000",
|
|
31
|
+
# baz: "0000000000"}
|
|
32
|
+
#
|
|
33
|
+
# Then in future passes FirstHashElementLineBreak,
|
|
34
|
+
# MultilineHashBraceLayout, and TrailingCommaInHashLiteral will
|
|
35
|
+
# manipulate as well until we get:
|
|
36
|
+
#
|
|
37
|
+
# {
|
|
38
|
+
# foo: "0000000000",
|
|
39
|
+
# bar: "0000000000",
|
|
40
|
+
# baz: "0000000000",
|
|
41
|
+
# }
|
|
42
|
+
#
|
|
43
|
+
# (Note: Passes may not happen exactly in this sequence.)
|
|
44
|
+
module CheckLineBreakable
|
|
45
|
+
def extract_breakable_node(node, max)
|
|
46
|
+
if node.send_type?
|
|
47
|
+
args = process_args(node.arguments)
|
|
48
|
+
return extract_breakable_node_from_elements(node, args, max)
|
|
49
|
+
elsif node.array_type? || node.hash_type?
|
|
50
|
+
return extract_breakable_node_from_elements(node, node.children, max)
|
|
51
|
+
end
|
|
52
|
+
nil
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
private
|
|
56
|
+
|
|
57
|
+
def extract_breakable_node_from_elements(node, elements, max)
|
|
58
|
+
return unless breakable_collection?(node, elements)
|
|
59
|
+
return if safe_to_ignore?(node)
|
|
60
|
+
|
|
61
|
+
line = processed_source.lines[node.first_line - 1]
|
|
62
|
+
return if processed_source.commented?(node.loc.begin)
|
|
63
|
+
return if line.length <= max
|
|
64
|
+
|
|
65
|
+
extract_first_element_over_column_limit(node, elements, max)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def extract_first_element_over_column_limit(node, elements, max)
|
|
69
|
+
line = node.first_line
|
|
70
|
+
i = 0
|
|
71
|
+
i += 1 while within_column_limit?(elements[i], max, line)
|
|
72
|
+
return elements.first if i.zero?
|
|
73
|
+
|
|
74
|
+
elements[i - 1]
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def within_column_limit?(element, max, line)
|
|
78
|
+
element && element.loc.column < max && element.loc.line == line
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def safe_to_ignore?(node)
|
|
82
|
+
return true unless max
|
|
83
|
+
return true if already_on_multiple_lines?(node)
|
|
84
|
+
|
|
85
|
+
# If there's a containing breakable collection on the same
|
|
86
|
+
# line, we let that one get broken first. In a separate pass,
|
|
87
|
+
# this one might get broken as well, but to avoid conflicting
|
|
88
|
+
# or redundant edits, we only mark one offense at a time.
|
|
89
|
+
return true if contained_by_breakable_collection_on_same_line?(node)
|
|
90
|
+
|
|
91
|
+
return true if contained_by_multiline_collection_that_could_be_broken_up?(node)
|
|
92
|
+
|
|
93
|
+
false
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def breakable_collection?(node, elements)
|
|
97
|
+
# For simplicity we only want to insert breaks in normal
|
|
98
|
+
# hashes wrapped in a set of curly braces like {foo: 1}.
|
|
99
|
+
# That is, not a kwargs hash. For method calls, this ensures
|
|
100
|
+
# the method call is made with parens.
|
|
101
|
+
starts_with_bracket = node.loc.begin
|
|
102
|
+
|
|
103
|
+
# If the call has a second argument, we can insert a line
|
|
104
|
+
# break before the second argument and the rest of the
|
|
105
|
+
# argument will get auto-formatted onto separate lines
|
|
106
|
+
# by other cops.
|
|
107
|
+
has_second_element = elements.length >= 2
|
|
108
|
+
|
|
109
|
+
starts_with_bracket && has_second_element
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def contained_by_breakable_collection_on_same_line?(node)
|
|
113
|
+
node.each_ancestor.find do |ancestor|
|
|
114
|
+
# Ignore ancestors on different lines.
|
|
115
|
+
break if ancestor.first_line != node.first_line
|
|
116
|
+
|
|
117
|
+
if ancestor.hash_type? || ancestor.array_type?
|
|
118
|
+
elements = ancestor.children
|
|
119
|
+
elsif ancestor.send_type?
|
|
120
|
+
elements = process_args(ancestor.arguments)
|
|
121
|
+
else
|
|
122
|
+
next
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
return true if breakable_collection?(ancestor, elements)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
false
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def contained_by_multiline_collection_that_could_be_broken_up?(node)
|
|
132
|
+
node.each_ancestor.find do |ancestor|
|
|
133
|
+
if ancestor.hash_type? || ancestor.array_type?
|
|
134
|
+
if breakable_collection?(ancestor, ancestor.children)
|
|
135
|
+
return children_could_be_broken_up?(ancestor.children)
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
next unless ancestor.send_type?
|
|
140
|
+
|
|
141
|
+
args = process_args(ancestor.arguments)
|
|
142
|
+
return children_could_be_broken_up?(args) if breakable_collection?(ancestor, args)
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
false
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def children_could_be_broken_up?(children)
|
|
149
|
+
return false if all_on_same_line?(children)
|
|
150
|
+
|
|
151
|
+
last_seen_line = -1
|
|
152
|
+
children.each do |child|
|
|
153
|
+
return true if last_seen_line >= child.first_line
|
|
154
|
+
|
|
155
|
+
last_seen_line = child.last_line
|
|
156
|
+
end
|
|
157
|
+
false
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def all_on_same_line?(nodes)
|
|
161
|
+
return true if nodes.empty?
|
|
162
|
+
|
|
163
|
+
nodes.first.first_line == nodes.last.last_line
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def process_args(args)
|
|
167
|
+
# If there is a trailing hash arg without explicit braces, like this:
|
|
168
|
+
#
|
|
169
|
+
# method(1, 'key1' => value1, 'key2' => value2)
|
|
170
|
+
#
|
|
171
|
+
# ...then each key/value pair is treated as a method 'argument'
|
|
172
|
+
# when determining where line breaks should appear.
|
|
173
|
+
if (last_arg = args.last)
|
|
174
|
+
args = args.concat(args.pop.children) if last_arg.hash_type? && !last_arg.braces?
|
|
175
|
+
end
|
|
176
|
+
args
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
def already_on_multiple_lines?(node)
|
|
180
|
+
node.first_line != node.last_line
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
end
|
|
@@ -6,6 +6,8 @@ module RuboCop
|
|
|
6
6
|
module CodeLength
|
|
7
7
|
include ConfigurableMax
|
|
8
8
|
|
|
9
|
+
private
|
|
10
|
+
|
|
9
11
|
def max_length
|
|
10
12
|
cop_config['Max']
|
|
11
13
|
end
|
|
@@ -14,11 +16,19 @@ module RuboCop
|
|
|
14
16
|
cop_config['CountComments']
|
|
15
17
|
end
|
|
16
18
|
|
|
19
|
+
def count_as_one
|
|
20
|
+
Array(cop_config['CountAsOne']).map(&:to_sym)
|
|
21
|
+
end
|
|
22
|
+
|
|
17
23
|
def check_code_length(node)
|
|
18
24
|
length = code_length(node)
|
|
25
|
+
|
|
19
26
|
return unless length > max_length
|
|
20
27
|
|
|
21
|
-
|
|
28
|
+
location = node.casgn_type? ? :name : :expression
|
|
29
|
+
|
|
30
|
+
add_offense(node, location: location,
|
|
31
|
+
message: message(length, max_length)) do
|
|
22
32
|
self.max = length
|
|
23
33
|
end
|
|
24
34
|
end
|
|
@@ -23,7 +23,7 @@ module RuboCop
|
|
|
23
23
|
def style_detected(detected)
|
|
24
24
|
return if no_acceptable_style?
|
|
25
25
|
|
|
26
|
-
# `detected` can be a single style
|
|
26
|
+
# `detected` can be a single style or an Array of possible styles
|
|
27
27
|
# (if there is more than one which matches the observed code)
|
|
28
28
|
detected_as_strings = Array(detected).map(&:to_s)
|
|
29
29
|
|
|
@@ -60,12 +60,15 @@ module RuboCop
|
|
|
60
60
|
alias conflicting_styles_detected no_acceptable_style!
|
|
61
61
|
alias unrecognized_style_detected no_acceptable_style!
|
|
62
62
|
|
|
63
|
+
def style_configured?
|
|
64
|
+
cop_config.key?(style_parameter_name)
|
|
65
|
+
end
|
|
66
|
+
|
|
63
67
|
def style
|
|
64
|
-
@
|
|
68
|
+
@style ||= begin
|
|
65
69
|
s = cop_config[style_parameter_name].to_sym
|
|
66
|
-
unless supported_styles.include?(s)
|
|
67
|
-
|
|
68
|
-
end
|
|
70
|
+
raise "Unknown style #{s} selected!" unless supported_styles.include?(s)
|
|
71
|
+
|
|
69
72
|
s
|
|
70
73
|
end
|
|
71
74
|
end
|
|
@@ -7,12 +7,10 @@ module RuboCop
|
|
|
7
7
|
include ConfigurableEnforcedStyle
|
|
8
8
|
|
|
9
9
|
def check_name(node, name, name_range)
|
|
10
|
-
return if operator?(name)
|
|
11
|
-
|
|
12
10
|
if valid_name?(node, name)
|
|
13
11
|
correct_style_detected
|
|
14
12
|
else
|
|
15
|
-
add_offense(
|
|
13
|
+
add_offense(name_range, message: message(style)) do
|
|
16
14
|
report_opposing_styles(node, name)
|
|
17
15
|
end
|
|
18
16
|
end
|
|
@@ -20,14 +18,12 @@ module RuboCop
|
|
|
20
18
|
|
|
21
19
|
def report_opposing_styles(node, name)
|
|
22
20
|
alternative_styles.each do |alternative|
|
|
23
|
-
if valid_name?(node, name, alternative)
|
|
24
|
-
return unexpected_style_detected(alternative)
|
|
25
|
-
end
|
|
21
|
+
return unexpected_style_detected(alternative) if valid_name?(node, name, alternative)
|
|
26
22
|
end
|
|
27
23
|
end
|
|
28
24
|
|
|
29
25
|
def valid_name?(node, name, given_style = style)
|
|
30
|
-
name.match(self.class::FORMATS.fetch(given_style)) ||
|
|
26
|
+
name.match?(self.class::FORMATS.fetch(given_style)) ||
|
|
31
27
|
class_emitter_method?(node, name)
|
|
32
28
|
end
|
|
33
29
|
|
|
@@ -35,6 +31,7 @@ module RuboCop
|
|
|
35
31
|
# the method has the same name as a class defined in the class/module.
|
|
36
32
|
def class_emitter_method?(node, name)
|
|
37
33
|
return false unless node.parent && node.defs_type?
|
|
34
|
+
|
|
38
35
|
# a class emitter method may be defined inside `def self.included`,
|
|
39
36
|
# `def self.extended`, etc.
|
|
40
37
|
node = node.parent while node.parent.defs_type?
|
|
@@ -5,10 +5,14 @@ module RuboCop
|
|
|
5
5
|
# Handles `Max` configuration parameters, especially setting them to an
|
|
6
6
|
# appropriate value with --auto-gen-config.
|
|
7
7
|
module ConfigurableMax
|
|
8
|
+
private
|
|
9
|
+
|
|
8
10
|
def max=(value)
|
|
9
11
|
cfg = config_to_allow_offenses
|
|
10
|
-
|
|
11
|
-
cfg[max_parameter_name]
|
|
12
|
+
cfg[:exclude_limit] ||= {}
|
|
13
|
+
current_max = cfg[:exclude_limit][max_parameter_name]
|
|
14
|
+
value = [current_max, value].max if current_max
|
|
15
|
+
cfg[:exclude_limit][max_parameter_name] = value
|
|
12
16
|
end
|
|
13
17
|
|
|
14
18
|
def max_parameter_name
|
|
@@ -8,18 +8,24 @@ module RuboCop
|
|
|
8
8
|
|
|
9
9
|
NON_PUBLIC_MODIFIERS = %w[private protected].freeze
|
|
10
10
|
|
|
11
|
+
private
|
|
12
|
+
|
|
11
13
|
def non_public?(node)
|
|
12
14
|
non_public_modifier?(node.parent) ||
|
|
13
15
|
preceding_non_public_modifier?(node)
|
|
14
16
|
end
|
|
15
17
|
|
|
16
18
|
def preceding_non_public_modifier?(node)
|
|
17
|
-
stripped_source_upto(node.
|
|
19
|
+
stripped_source_upto(node.first_line).any? do |line|
|
|
18
20
|
NON_PUBLIC_MODIFIERS.include?(line)
|
|
19
21
|
end
|
|
20
22
|
end
|
|
21
23
|
|
|
22
|
-
|
|
24
|
+
def stripped_source_upto(index)
|
|
25
|
+
processed_source[0..index].map(&:strip)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def_node_matcher :non_public_modifier?, <<~PATTERN
|
|
23
29
|
(send nil? {:private :protected} ({def defs} ...))
|
|
24
30
|
PATTERN
|
|
25
31
|
end
|
|
@@ -7,8 +7,6 @@ module RuboCop
|
|
|
7
7
|
extend NodePattern::Macros
|
|
8
8
|
include Style::AnnotationComment
|
|
9
9
|
|
|
10
|
-
def_node_matcher :constant_definition?, '{class module casgn}'
|
|
11
|
-
|
|
12
10
|
private
|
|
13
11
|
|
|
14
12
|
def documentation_comment?(node)
|
|
@@ -23,9 +21,17 @@ module RuboCop
|
|
|
23
21
|
end
|
|
24
22
|
end
|
|
25
23
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
24
|
+
# The args node1 & node2 may represent a RuboCop::AST::Node
|
|
25
|
+
# or a Parser::Source::Comment. Both respond to #loc.
|
|
26
|
+
def preceding_comment?(node1, node2)
|
|
27
|
+
node1 && node2 && precede?(node2, node1) &&
|
|
28
|
+
comment_line?(node2.loc.expression.source)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# The args node1 & node2 may represent a RuboCop::AST::Node
|
|
32
|
+
# or a Parser::Source::Comment. Both respond to #loc.
|
|
33
|
+
def precede?(node1, node2)
|
|
34
|
+
node2.loc.line - node1.loc.line == 1
|
|
29
35
|
end
|
|
30
36
|
|
|
31
37
|
def preceding_lines(node)
|
|
@@ -35,11 +41,11 @@ module RuboCop
|
|
|
35
41
|
end
|
|
36
42
|
|
|
37
43
|
def interpreter_directive_comment?(comment)
|
|
38
|
-
|
|
44
|
+
/^#\s*(frozen_string_literal|encoding):/.match?(comment.text)
|
|
39
45
|
end
|
|
40
46
|
|
|
41
47
|
def rubocop_directive_comment?(comment)
|
|
42
|
-
comment.text
|
|
48
|
+
CommentConfig::COMMENT_DIRECTIVE_REGEXP.match?(comment.text)
|
|
43
49
|
end
|
|
44
50
|
end
|
|
45
51
|
end
|
|
@@ -8,36 +8,24 @@ module RuboCop
|
|
|
8
8
|
module EmptyLinesAroundBody
|
|
9
9
|
extend NodePattern::Macros
|
|
10
10
|
include ConfigurableEnforcedStyle
|
|
11
|
+
include RangeHelp
|
|
11
12
|
|
|
12
|
-
MSG_EXTRA = 'Extra empty line detected at
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
MSG_EXTRA = 'Extra empty line detected at %<kind>s body ' \
|
|
14
|
+
'%<location>s.'
|
|
15
|
+
MSG_MISSING = 'Empty line missing at %<kind>s body %<location>s.'
|
|
16
|
+
MSG_DEFERRED = 'Empty line missing before first %<type>s ' \
|
|
17
|
+
'definition'
|
|
18
|
+
|
|
19
|
+
private
|
|
15
20
|
|
|
16
21
|
def_node_matcher :constant_definition?, '{class module}'
|
|
17
22
|
def_node_matcher :empty_line_required?, '{def defs class module}'
|
|
18
23
|
|
|
19
|
-
def
|
|
20
|
-
|
|
21
|
-
lambda do |corrector|
|
|
22
|
-
case offense_style
|
|
23
|
-
when :no_empty_lines then
|
|
24
|
-
corrector.remove(range)
|
|
25
|
-
when :empty_lines then
|
|
26
|
-
corrector.insert_before(range, "\n")
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
private
|
|
32
|
-
|
|
33
|
-
def check(node, body)
|
|
34
|
-
# When style is `empty_lines`, if the body is empty, we don't enforce
|
|
35
|
-
# the presence OR absence of an empty line
|
|
36
|
-
# But if style is `no_empty_lines`, there must not be an empty line
|
|
37
|
-
return unless body || style == :no_empty_lines
|
|
24
|
+
def check(node, body, adjusted_first_line: nil)
|
|
25
|
+
return if valid_body_style?(body)
|
|
38
26
|
return if node.single_line?
|
|
39
27
|
|
|
40
|
-
first_line = node.source_range.first_line
|
|
28
|
+
first_line = adjusted_first_line || node.source_range.first_line
|
|
41
29
|
last_line = node.source_range.last_line
|
|
42
30
|
|
|
43
31
|
case style
|
|
@@ -60,6 +48,7 @@ module RuboCop
|
|
|
60
48
|
|
|
61
49
|
def check_empty_lines_special(body, first_line, last_line)
|
|
62
50
|
return unless body
|
|
51
|
+
|
|
63
52
|
if namespace?(body, with_one_child: true)
|
|
64
53
|
check_both(:no_empty_lines, first_line, last_line)
|
|
65
54
|
else
|
|
@@ -74,8 +63,17 @@ module RuboCop
|
|
|
74
63
|
end
|
|
75
64
|
|
|
76
65
|
def check_both(style, first_line, last_line)
|
|
77
|
-
|
|
78
|
-
|
|
66
|
+
case style
|
|
67
|
+
when :beginning_only
|
|
68
|
+
check_beginning(:empty_lines, first_line)
|
|
69
|
+
check_ending(:no_empty_lines, last_line)
|
|
70
|
+
when :ending_only
|
|
71
|
+
check_beginning(:no_empty_lines, first_line)
|
|
72
|
+
check_ending(:empty_lines, last_line)
|
|
73
|
+
else
|
|
74
|
+
check_beginning(style, first_line)
|
|
75
|
+
check_ending(style, last_line)
|
|
76
|
+
end
|
|
79
77
|
end
|
|
80
78
|
|
|
81
79
|
def check_beginning(style, first_line)
|
|
@@ -109,7 +107,7 @@ module RuboCop
|
|
|
109
107
|
node = first_empty_line_required_child(body)
|
|
110
108
|
return unless node
|
|
111
109
|
|
|
112
|
-
line = previous_line_ignoring_comments(node.
|
|
110
|
+
line = previous_line_ignoring_comments(node.first_line)
|
|
113
111
|
return if processed_source[line].empty?
|
|
114
112
|
|
|
115
113
|
range = source_range(processed_source.buffer, line + 2, 0)
|
|
@@ -124,6 +122,7 @@ module RuboCop
|
|
|
124
122
|
def namespace?(body, with_one_child: false)
|
|
125
123
|
if body.begin_type?
|
|
126
124
|
return false if with_one_child
|
|
125
|
+
|
|
127
126
|
body.children.all? { |child| constant_definition?(child) }
|
|
128
127
|
else
|
|
129
128
|
constant_definition?(body)
|
|
@@ -154,11 +153,18 @@ module RuboCop
|
|
|
154
153
|
end
|
|
155
154
|
|
|
156
155
|
def message(type, desc)
|
|
157
|
-
format(type, self.class::KIND, desc)
|
|
156
|
+
format(type, kind: self.class::KIND, location: desc)
|
|
158
157
|
end
|
|
159
158
|
|
|
160
159
|
def deferred_message(node)
|
|
161
|
-
format(MSG_DEFERRED, node.type)
|
|
160
|
+
format(MSG_DEFERRED, type: node.type)
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
def valid_body_style?(body)
|
|
164
|
+
# When style is `empty_lines`, if the body is empty, we don't enforce
|
|
165
|
+
# the presence OR absence of an empty line
|
|
166
|
+
# But if style is `no_empty_lines`, there must not be an empty line
|
|
167
|
+
body.nil? && style != :no_empty_lines
|
|
162
168
|
end
|
|
163
169
|
end
|
|
164
170
|
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RuboCop
|
|
4
|
+
module Cop
|
|
5
|
+
# Common code for empty parameter cops.
|
|
6
|
+
module EmptyParameter
|
|
7
|
+
extend NodePattern::Macros
|
|
8
|
+
|
|
9
|
+
private
|
|
10
|
+
|
|
11
|
+
def_node_matcher :empty_arguments?, <<~PATTERN
|
|
12
|
+
(block _ $(args) _)
|
|
13
|
+
PATTERN
|
|
14
|
+
|
|
15
|
+
def check(node)
|
|
16
|
+
empty_arguments?(node) do |args|
|
|
17
|
+
return if args.empty_and_without_delimiters?
|
|
18
|
+
|
|
19
|
+
add_offense(args)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -5,8 +5,10 @@ module RuboCop
|
|
|
5
5
|
# Functions for checking the alignment of the `end` keyword.
|
|
6
6
|
module EndKeywordAlignment
|
|
7
7
|
include ConfigurableEnforcedStyle
|
|
8
|
+
include RangeHelp
|
|
8
9
|
|
|
9
|
-
MSG = '`end` at
|
|
10
|
+
MSG = '`end` at %<end_line>d, %<end_col>d is not aligned with ' \
|
|
11
|
+
'`%<source>s` at %<align_line>d, %<align_col>d.'
|
|
10
12
|
|
|
11
13
|
private
|
|
12
14
|
|
|
@@ -18,7 +20,7 @@ module RuboCop
|
|
|
18
20
|
return if ignored_node?(node)
|
|
19
21
|
|
|
20
22
|
end_loc = node.loc.end
|
|
21
|
-
return
|
|
23
|
+
return if accept_end_kw_alignment?(end_loc)
|
|
22
24
|
|
|
23
25
|
matching = matching_ranges(end_loc, align_ranges)
|
|
24
26
|
|
|
@@ -33,52 +35,37 @@ module RuboCop
|
|
|
33
35
|
def matching_ranges(end_loc, align_ranges)
|
|
34
36
|
align_ranges.select do |_, range|
|
|
35
37
|
range.line == end_loc.line ||
|
|
36
|
-
|
|
38
|
+
column_offset_between(range, end_loc).zero?
|
|
37
39
|
end
|
|
38
40
|
end
|
|
39
41
|
|
|
40
42
|
def add_offense_for_misalignment(node, align_with)
|
|
41
43
|
end_loc = node.loc.end
|
|
42
|
-
msg = format(MSG, end_loc.line,
|
|
43
|
-
|
|
44
|
+
msg = format(MSG, end_line: end_loc.line,
|
|
45
|
+
end_col: end_loc.column,
|
|
46
|
+
source: align_with.source,
|
|
47
|
+
align_line: align_with.line,
|
|
48
|
+
align_col: align_with.column)
|
|
44
49
|
add_offense(node, location: end_loc, message: msg)
|
|
45
50
|
end
|
|
46
51
|
|
|
52
|
+
def accept_end_kw_alignment?(end_loc)
|
|
53
|
+
end_loc.nil? || # Discard modifier forms of if/while/until.
|
|
54
|
+
!/\A[ \t]*end/.match?(processed_source.lines[end_loc.line - 1])
|
|
55
|
+
end
|
|
56
|
+
|
|
47
57
|
def style_parameter_name
|
|
48
58
|
'EnforcedStyleAlignWith'
|
|
49
59
|
end
|
|
50
60
|
|
|
51
61
|
def variable_alignment?(whole_expression, rhs, end_alignment_style)
|
|
52
|
-
end_alignment_style == :
|
|
53
|
-
!line_break_before_keyword?(whole_expression, rhs)
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
def line_break_before_keyword?(whole_expression, rhs)
|
|
57
|
-
rhs.loc.line > whole_expression.line
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def align(node, align_to)
|
|
61
|
-
whitespace = whitespace_range(node)
|
|
62
|
-
return false unless whitespace.source.strip.empty?
|
|
62
|
+
return if end_alignment_style == :keyword
|
|
63
63
|
|
|
64
|
-
|
|
65
|
-
->(corrector) { corrector.replace(whitespace, ' ' * column) }
|
|
64
|
+
!line_break_before_keyword?(whole_expression, rhs)
|
|
66
65
|
end
|
|
67
66
|
|
|
68
|
-
def
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
range_between(begin_pos - node.loc.end.column, begin_pos)
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
def alignment_column(align_to)
|
|
75
|
-
if !align_to
|
|
76
|
-
0
|
|
77
|
-
elsif align_to.respond_to?(:loc)
|
|
78
|
-
align_to.source_range.column
|
|
79
|
-
else
|
|
80
|
-
align_to.column
|
|
81
|
-
end
|
|
67
|
+
def line_break_before_keyword?(whole_expression, rhs)
|
|
68
|
+
rhs.first_line > whole_expression.line
|
|
82
69
|
end
|
|
83
70
|
end
|
|
84
71
|
end
|
|
@@ -5,12 +5,14 @@ module RuboCop
|
|
|
5
5
|
# Common functionality for enforcing a specific superclass
|
|
6
6
|
module EnforceSuperclass
|
|
7
7
|
def self.included(base)
|
|
8
|
-
base.def_node_matcher :class_definition,
|
|
9
|
-
|
|
8
|
+
base.def_node_matcher :class_definition, <<~PATTERN
|
|
9
|
+
(class (const _ !:#{base::SUPERCLASS}) #{base::BASE_PATTERN} ...)
|
|
10
10
|
PATTERN
|
|
11
11
|
|
|
12
|
-
base.def_node_matcher :class_new_definition,
|
|
13
|
-
|
|
12
|
+
base.def_node_matcher :class_new_definition, <<~PATTERN
|
|
13
|
+
[!^(casgn {nil? cbase} :#{base::SUPERCLASS} ...)
|
|
14
|
+
!^^(casgn {nil? cbase} :#{base::SUPERCLASS} (block ...))
|
|
15
|
+
(send (const {nil? cbase} :Class) :new #{base::BASE_PATTERN})]
|
|
14
16
|
PATTERN
|
|
15
17
|
end
|
|
16
18
|
|
|
@@ -25,12 +27,6 @@ module RuboCop
|
|
|
25
27
|
add_offense(node.children.last)
|
|
26
28
|
end
|
|
27
29
|
end
|
|
28
|
-
|
|
29
|
-
def autocorrect(node)
|
|
30
|
-
lambda do |corrector|
|
|
31
|
-
corrector.replace(node.source_range, self.class::SUPERCLASS)
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
30
|
end
|
|
35
31
|
end
|
|
36
32
|
end
|
|
@@ -5,10 +5,6 @@ module RuboCop
|
|
|
5
5
|
# Common functionality for checking for a line break before the first
|
|
6
6
|
# element in a multi-line collection.
|
|
7
7
|
module FirstElementLineBreak
|
|
8
|
-
def autocorrect(node)
|
|
9
|
-
->(corrector) { corrector.insert_before(node.source_range, "\n") }
|
|
10
|
-
end
|
|
11
|
-
|
|
12
8
|
private
|
|
13
9
|
|
|
14
10
|
def check_method_line_break(node, children)
|
|
@@ -21,29 +17,29 @@ module RuboCop
|
|
|
21
17
|
|
|
22
18
|
def method_uses_parens?(node, limit)
|
|
23
19
|
source = node.source_range.source_line[0...limit.loc.column]
|
|
24
|
-
|
|
20
|
+
/\s*\(\s*$/.match?(source)
|
|
25
21
|
end
|
|
26
22
|
|
|
27
23
|
def check_children_line_break(node, children, start = node)
|
|
28
24
|
return if children.size < 2
|
|
29
25
|
|
|
30
|
-
line = start.
|
|
26
|
+
line = start.first_line
|
|
31
27
|
|
|
32
28
|
min = first_by_line(children)
|
|
33
|
-
return if line != min.
|
|
29
|
+
return if line != min.first_line
|
|
34
30
|
|
|
35
31
|
max = last_by_line(children)
|
|
36
|
-
return if line == max.
|
|
32
|
+
return if line == max.last_line
|
|
37
33
|
|
|
38
34
|
add_offense(min)
|
|
39
35
|
end
|
|
40
36
|
|
|
41
37
|
def first_by_line(nodes)
|
|
42
|
-
nodes.min_by
|
|
38
|
+
nodes.min_by(&:first_line)
|
|
43
39
|
end
|
|
44
40
|
|
|
45
41
|
def last_by_line(nodes)
|
|
46
|
-
nodes.max_by
|
|
42
|
+
nodes.max_by(&:last_line)
|
|
47
43
|
end
|
|
48
44
|
end
|
|
49
45
|
end
|