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,251 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RuboCop
|
|
4
|
+
module Cop
|
|
5
|
+
module Layout
|
|
6
|
+
# This cop checks the indentation of the first argument in a method call.
|
|
7
|
+
# Arguments after the first one are checked by Layout/ArgumentAlignment,
|
|
8
|
+
# not by this cop.
|
|
9
|
+
#
|
|
10
|
+
# For indenting the first parameter of method _definitions_, check out
|
|
11
|
+
# Layout/FirstParameterIndentation.
|
|
12
|
+
#
|
|
13
|
+
# @example
|
|
14
|
+
#
|
|
15
|
+
# # bad
|
|
16
|
+
# some_method(
|
|
17
|
+
# first_param,
|
|
18
|
+
# second_param)
|
|
19
|
+
#
|
|
20
|
+
# foo = some_method(
|
|
21
|
+
# first_param,
|
|
22
|
+
# second_param)
|
|
23
|
+
#
|
|
24
|
+
# foo = some_method(nested_call(
|
|
25
|
+
# nested_first_param),
|
|
26
|
+
# second_param)
|
|
27
|
+
#
|
|
28
|
+
# foo = some_method(
|
|
29
|
+
# nested_call(
|
|
30
|
+
# nested_first_param),
|
|
31
|
+
# second_param)
|
|
32
|
+
#
|
|
33
|
+
# some_method nested_call(
|
|
34
|
+
# nested_first_param),
|
|
35
|
+
# second_param
|
|
36
|
+
#
|
|
37
|
+
# @example EnforcedStyle: consistent
|
|
38
|
+
# # The first argument should always be indented one step more than the
|
|
39
|
+
# # preceding line.
|
|
40
|
+
#
|
|
41
|
+
# # good
|
|
42
|
+
# some_method(
|
|
43
|
+
# first_param,
|
|
44
|
+
# second_param)
|
|
45
|
+
#
|
|
46
|
+
# foo = some_method(
|
|
47
|
+
# first_param,
|
|
48
|
+
# second_param)
|
|
49
|
+
#
|
|
50
|
+
# foo = some_method(nested_call(
|
|
51
|
+
# nested_first_param),
|
|
52
|
+
# second_param)
|
|
53
|
+
#
|
|
54
|
+
# foo = some_method(
|
|
55
|
+
# nested_call(
|
|
56
|
+
# nested_first_param),
|
|
57
|
+
# second_param)
|
|
58
|
+
#
|
|
59
|
+
# some_method nested_call(
|
|
60
|
+
# nested_first_param),
|
|
61
|
+
# second_param
|
|
62
|
+
#
|
|
63
|
+
# @example EnforcedStyle: consistent_relative_to_receiver
|
|
64
|
+
# # The first argument should always be indented one level relative to
|
|
65
|
+
# # the parent that is receiving the argument
|
|
66
|
+
#
|
|
67
|
+
# # good
|
|
68
|
+
# some_method(
|
|
69
|
+
# first_param,
|
|
70
|
+
# second_param)
|
|
71
|
+
#
|
|
72
|
+
# foo = some_method(
|
|
73
|
+
# first_param,
|
|
74
|
+
# second_param)
|
|
75
|
+
#
|
|
76
|
+
# foo = some_method(nested_call(
|
|
77
|
+
# nested_first_param),
|
|
78
|
+
# second_param)
|
|
79
|
+
#
|
|
80
|
+
# foo = some_method(
|
|
81
|
+
# nested_call(
|
|
82
|
+
# nested_first_param),
|
|
83
|
+
# second_param)
|
|
84
|
+
#
|
|
85
|
+
# some_method nested_call(
|
|
86
|
+
# nested_first_param),
|
|
87
|
+
# second_params
|
|
88
|
+
#
|
|
89
|
+
# @example EnforcedStyle: special_for_inner_method_call
|
|
90
|
+
# # The first argument should normally be indented one step more than
|
|
91
|
+
# # the preceding line, but if it's a argument for a method call that
|
|
92
|
+
# # is itself a argument in a method call, then the inner argument
|
|
93
|
+
# # should be indented relative to the inner method.
|
|
94
|
+
#
|
|
95
|
+
# # good
|
|
96
|
+
# some_method(
|
|
97
|
+
# first_param,
|
|
98
|
+
# second_param)
|
|
99
|
+
#
|
|
100
|
+
# foo = some_method(
|
|
101
|
+
# first_param,
|
|
102
|
+
# second_param)
|
|
103
|
+
#
|
|
104
|
+
# foo = some_method(nested_call(
|
|
105
|
+
# nested_first_param),
|
|
106
|
+
# second_param)
|
|
107
|
+
#
|
|
108
|
+
# foo = some_method(
|
|
109
|
+
# nested_call(
|
|
110
|
+
# nested_first_param),
|
|
111
|
+
# second_param)
|
|
112
|
+
#
|
|
113
|
+
# some_method nested_call(
|
|
114
|
+
# nested_first_param),
|
|
115
|
+
# second_param
|
|
116
|
+
#
|
|
117
|
+
# @example EnforcedStyle: special_for_inner_method_call_in_parentheses (default)
|
|
118
|
+
# # Same as `special_for_inner_method_call` except that the special rule
|
|
119
|
+
# # only applies if the outer method call encloses its arguments in
|
|
120
|
+
# # parentheses.
|
|
121
|
+
#
|
|
122
|
+
# # good
|
|
123
|
+
# some_method(
|
|
124
|
+
# first_param,
|
|
125
|
+
# second_param)
|
|
126
|
+
#
|
|
127
|
+
# foo = some_method(
|
|
128
|
+
# first_param,
|
|
129
|
+
# second_param)
|
|
130
|
+
#
|
|
131
|
+
# foo = some_method(nested_call(
|
|
132
|
+
# nested_first_param),
|
|
133
|
+
# second_param)
|
|
134
|
+
#
|
|
135
|
+
# foo = some_method(
|
|
136
|
+
# nested_call(
|
|
137
|
+
# nested_first_param),
|
|
138
|
+
# second_param)
|
|
139
|
+
#
|
|
140
|
+
# some_method nested_call(
|
|
141
|
+
# nested_first_param),
|
|
142
|
+
# second_param
|
|
143
|
+
#
|
|
144
|
+
class FirstArgumentIndentation < Cop
|
|
145
|
+
include Alignment
|
|
146
|
+
include ConfigurableEnforcedStyle
|
|
147
|
+
include RangeHelp
|
|
148
|
+
|
|
149
|
+
MSG = 'Indent the first argument one step more than %<base>s.'
|
|
150
|
+
|
|
151
|
+
def on_send(node)
|
|
152
|
+
return if !node.arguments? || node.operator_method?
|
|
153
|
+
|
|
154
|
+
indent = base_indentation(node) + configured_indentation_width
|
|
155
|
+
|
|
156
|
+
check_alignment([node.first_argument], indent)
|
|
157
|
+
end
|
|
158
|
+
alias on_csend on_send
|
|
159
|
+
|
|
160
|
+
def autocorrect(node)
|
|
161
|
+
AlignmentCorrector.correct(processed_source, node, column_delta)
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
private
|
|
165
|
+
|
|
166
|
+
def message(arg_node)
|
|
167
|
+
return 'Bad indentation of the first argument.' unless arg_node
|
|
168
|
+
|
|
169
|
+
send_node = arg_node.parent
|
|
170
|
+
text = base_range(send_node, arg_node).source.strip
|
|
171
|
+
base = if !/\n/.match?(text) && special_inner_call_indentation?(send_node)
|
|
172
|
+
"`#{text}`"
|
|
173
|
+
elsif comment_line?(text.lines.reverse_each.first)
|
|
174
|
+
'the start of the previous line (not counting the comment)'
|
|
175
|
+
else
|
|
176
|
+
'the start of the previous line'
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
format(MSG, base: base)
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
def base_indentation(node)
|
|
183
|
+
if special_inner_call_indentation?(node)
|
|
184
|
+
column_of(base_range(node, node.first_argument))
|
|
185
|
+
else
|
|
186
|
+
previous_code_line(node.first_argument.first_line) =~ /\S/
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
def special_inner_call_indentation?(node)
|
|
191
|
+
return false if style == :consistent
|
|
192
|
+
return true if style == :consistent_relative_to_receiver
|
|
193
|
+
|
|
194
|
+
parent = node.parent
|
|
195
|
+
|
|
196
|
+
return false unless eligible_method_call?(parent)
|
|
197
|
+
return false if !parent.parenthesized? &&
|
|
198
|
+
style == :special_for_inner_method_call_in_parentheses
|
|
199
|
+
|
|
200
|
+
# The node must begin inside the parent, otherwise node is the first
|
|
201
|
+
# part of a chained method call.
|
|
202
|
+
node.source_range.begin_pos > parent.source_range.begin_pos
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
def_node_matcher :eligible_method_call?, <<~PATTERN
|
|
206
|
+
(send _ !:[]= ...)
|
|
207
|
+
PATTERN
|
|
208
|
+
|
|
209
|
+
def base_range(send_node, arg_node)
|
|
210
|
+
range_between(send_node.source_range.begin_pos,
|
|
211
|
+
arg_node.source_range.begin_pos)
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
# Returns the column of the given range. For single line ranges, this
|
|
215
|
+
# is simple. For ranges with line breaks, we look a the last code line.
|
|
216
|
+
def column_of(range)
|
|
217
|
+
source = range.source.strip
|
|
218
|
+
if source.include?("\n")
|
|
219
|
+
previous_code_line(range.line + source.count("\n") + 1) =~ /\S/
|
|
220
|
+
else
|
|
221
|
+
display_column(range)
|
|
222
|
+
end
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
# Takes the line number of a given code line and returns a string
|
|
226
|
+
# containing the previous line that's not a comment line or a blank
|
|
227
|
+
# line.
|
|
228
|
+
def previous_code_line(line_number)
|
|
229
|
+
line = ''
|
|
230
|
+
while line.blank? || comment_lines.include?(line_number)
|
|
231
|
+
line_number -= 1
|
|
232
|
+
line = processed_source.lines[line_number - 1]
|
|
233
|
+
end
|
|
234
|
+
line
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
def comment_lines
|
|
238
|
+
@comment_lines ||=
|
|
239
|
+
processed_source
|
|
240
|
+
.comments
|
|
241
|
+
.select { |c| begins_its_line?(c.loc.expression) }
|
|
242
|
+
.map { |c| c.loc.line }
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
def on_new_investigation
|
|
246
|
+
@comment_lines = nil
|
|
247
|
+
end
|
|
248
|
+
end
|
|
249
|
+
end
|
|
250
|
+
end
|
|
251
|
+
end
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RuboCop
|
|
4
|
+
module Cop
|
|
5
|
+
module Layout
|
|
6
|
+
# This cop checks the indentation of the first element in an array literal
|
|
7
|
+
# where the opening bracket and the first element are on separate lines.
|
|
8
|
+
# The other elements' indentations are handled by the ArrayAlignment cop.
|
|
9
|
+
#
|
|
10
|
+
# By default, array literals that are arguments in a method call with
|
|
11
|
+
# parentheses, and where the opening square bracket of the array is on the
|
|
12
|
+
# same line as the opening parenthesis of the method call, shall have
|
|
13
|
+
# their first element indented one step (two spaces) more than the
|
|
14
|
+
# position inside the opening parenthesis.
|
|
15
|
+
#
|
|
16
|
+
# Other array literals shall have their first element indented one step
|
|
17
|
+
# more than the start of the line where the opening square bracket is.
|
|
18
|
+
#
|
|
19
|
+
# This default style is called 'special_inside_parentheses'. Alternative
|
|
20
|
+
# styles are 'consistent' and 'align_brackets'. Here are examples:
|
|
21
|
+
#
|
|
22
|
+
# @example EnforcedStyle: special_inside_parentheses (default)
|
|
23
|
+
# # The `special_inside_parentheses` style enforces that the first
|
|
24
|
+
# # element in an array literal where the opening bracket and first
|
|
25
|
+
# # element are on separate lines is indented one step (two spaces) more
|
|
26
|
+
# # than the position inside the opening parenthesis.
|
|
27
|
+
#
|
|
28
|
+
# #bad
|
|
29
|
+
# array = [
|
|
30
|
+
# :value
|
|
31
|
+
# ]
|
|
32
|
+
# and_in_a_method_call([
|
|
33
|
+
# :no_difference
|
|
34
|
+
# ])
|
|
35
|
+
#
|
|
36
|
+
# #good
|
|
37
|
+
# array = [
|
|
38
|
+
# :value
|
|
39
|
+
# ]
|
|
40
|
+
# but_in_a_method_call([
|
|
41
|
+
# :its_like_this
|
|
42
|
+
# ])
|
|
43
|
+
#
|
|
44
|
+
# @example EnforcedStyle: consistent
|
|
45
|
+
# # The `consistent` style enforces that the first element in an array
|
|
46
|
+
# # literal where the opening bracket and the first element are on
|
|
47
|
+
# # separate lines is indented the same as an array literal which is not
|
|
48
|
+
# # defined inside a method call.
|
|
49
|
+
#
|
|
50
|
+
# #bad
|
|
51
|
+
# # consistent
|
|
52
|
+
# array = [
|
|
53
|
+
# :value
|
|
54
|
+
# ]
|
|
55
|
+
# but_in_a_method_call([
|
|
56
|
+
# :its_like_this
|
|
57
|
+
# ])
|
|
58
|
+
#
|
|
59
|
+
# #good
|
|
60
|
+
# array = [
|
|
61
|
+
# :value
|
|
62
|
+
# ]
|
|
63
|
+
# and_in_a_method_call([
|
|
64
|
+
# :no_difference
|
|
65
|
+
# ])
|
|
66
|
+
#
|
|
67
|
+
# @example EnforcedStyle: align_brackets
|
|
68
|
+
# # The `align_brackets` style enforces that the opening and closing
|
|
69
|
+
# # brackets are indented to the same position.
|
|
70
|
+
#
|
|
71
|
+
# #bad
|
|
72
|
+
# # align_brackets
|
|
73
|
+
# and_now_for_something = [
|
|
74
|
+
# :completely_different
|
|
75
|
+
# ]
|
|
76
|
+
#
|
|
77
|
+
# #good
|
|
78
|
+
# # align_brackets
|
|
79
|
+
# and_now_for_something = [
|
|
80
|
+
# :completely_different
|
|
81
|
+
# ]
|
|
82
|
+
class FirstArrayElementIndentation < Cop
|
|
83
|
+
include Alignment
|
|
84
|
+
include ConfigurableEnforcedStyle
|
|
85
|
+
include MultilineElementIndentation
|
|
86
|
+
|
|
87
|
+
MSG = 'Use %<configured_indentation_width>d spaces for indentation ' \
|
|
88
|
+
'in an array, relative to %<base_description>s.'
|
|
89
|
+
|
|
90
|
+
def on_array(node)
|
|
91
|
+
check(node, nil) if node.loc.begin
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def on_send(node)
|
|
95
|
+
each_argument_node(node, :array) do |array_node, left_parenthesis|
|
|
96
|
+
check(array_node, left_parenthesis)
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
alias on_csend on_send
|
|
100
|
+
|
|
101
|
+
def autocorrect(node)
|
|
102
|
+
AlignmentCorrector.correct(processed_source, node, @column_delta)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
private
|
|
106
|
+
|
|
107
|
+
def brace_alignment_style
|
|
108
|
+
:align_brackets
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def check(array_node, left_parenthesis)
|
|
112
|
+
return if ignored_node?(array_node)
|
|
113
|
+
|
|
114
|
+
left_bracket = array_node.loc.begin
|
|
115
|
+
first_elem = array_node.values.first
|
|
116
|
+
if first_elem
|
|
117
|
+
return if first_elem.source_range.line == left_bracket.line
|
|
118
|
+
|
|
119
|
+
check_first(first_elem, left_bracket, left_parenthesis, 0)
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
check_right_bracket(array_node.loc.end, left_bracket,
|
|
123
|
+
left_parenthesis)
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def check_right_bracket(right_bracket, left_bracket, left_parenthesis)
|
|
127
|
+
# if the right bracket is on the same line as the last value, accept
|
|
128
|
+
return if /\S/.match?(right_bracket.source_line[0...right_bracket.column])
|
|
129
|
+
|
|
130
|
+
expected_column = base_column(left_bracket, left_parenthesis)
|
|
131
|
+
@column_delta = expected_column - right_bracket.column
|
|
132
|
+
return if @column_delta.zero?
|
|
133
|
+
|
|
134
|
+
msg = msg(left_parenthesis)
|
|
135
|
+
add_offense(right_bracket, location: right_bracket, message: msg)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# Returns the description of what the correct indentation is based on.
|
|
139
|
+
def base_description(left_parenthesis)
|
|
140
|
+
if style == :align_brackets
|
|
141
|
+
'the position of the opening bracket'
|
|
142
|
+
elsif left_parenthesis && style == :special_inside_parentheses
|
|
143
|
+
'the first position after the preceding left parenthesis'
|
|
144
|
+
else
|
|
145
|
+
'the start of the line where the left square bracket is'
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def message(base_description)
|
|
150
|
+
format(
|
|
151
|
+
MSG,
|
|
152
|
+
configured_indentation_width: configured_indentation_width,
|
|
153
|
+
base_description: base_description
|
|
154
|
+
)
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def msg(left_parenthesis)
|
|
158
|
+
if style == :align_brackets
|
|
159
|
+
'Indent the right bracket the same as the left bracket.'
|
|
160
|
+
elsif style == :special_inside_parentheses && left_parenthesis
|
|
161
|
+
'Indent the right bracket the same as the first position ' \
|
|
162
|
+
'after the preceding left parenthesis.'
|
|
163
|
+
else
|
|
164
|
+
'Indent the right bracket the same as the start of the line' \
|
|
165
|
+
' where the left bracket is.'
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
end
|
|
@@ -21,7 +21,7 @@ module RuboCop
|
|
|
21
21
|
include FirstElementLineBreak
|
|
22
22
|
|
|
23
23
|
MSG = 'Add a line break before the first element of a ' \
|
|
24
|
-
'multi-line array.'
|
|
24
|
+
'multi-line array.'
|
|
25
25
|
|
|
26
26
|
def on_array(node)
|
|
27
27
|
return if !node.loc.begin && !assignment_on_same_line?(node)
|
|
@@ -29,11 +29,15 @@ module RuboCop
|
|
|
29
29
|
check_children_line_break(node, node.children)
|
|
30
30
|
end
|
|
31
31
|
|
|
32
|
+
def autocorrect(node)
|
|
33
|
+
EmptyLineCorrector.insert_before(node)
|
|
34
|
+
end
|
|
35
|
+
|
|
32
36
|
private
|
|
33
37
|
|
|
34
38
|
def assignment_on_same_line?(node)
|
|
35
39
|
source = node.source_range.source_line[0...node.loc.column]
|
|
36
|
-
|
|
40
|
+
/\s*=\s*$/.match?(source)
|
|
37
41
|
end
|
|
38
42
|
end
|
|
39
43
|
end
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
module RuboCop
|
|
4
4
|
module Cop
|
|
5
5
|
module Layout
|
|
6
|
-
# This
|
|
6
|
+
# This cop checks the indentation of the first key in a hash literal
|
|
7
7
|
# where the opening brace and the first key are on separate lines. The
|
|
8
|
-
# other keys' indentations are handled by the
|
|
8
|
+
# other keys' indentations are handled by the HashAlignment cop.
|
|
9
9
|
#
|
|
10
10
|
# By default, Hash literals that are arguments in a method call with
|
|
11
11
|
# parentheses, and where the opening curly brace of the hash is on the
|
|
@@ -19,29 +19,71 @@ module RuboCop
|
|
|
19
19
|
# This default style is called 'special_inside_parentheses'. Alternative
|
|
20
20
|
# styles are 'consistent' and 'align_braces'. Here are examples:
|
|
21
21
|
#
|
|
22
|
-
#
|
|
23
|
-
#
|
|
24
|
-
#
|
|
25
|
-
#
|
|
26
|
-
#
|
|
27
|
-
# its_like: :this
|
|
28
|
-
# })
|
|
29
|
-
# # consistent
|
|
30
|
-
# hash = {
|
|
31
|
-
# key: :value
|
|
32
|
-
# }
|
|
33
|
-
# and_in_a_method_call({
|
|
34
|
-
# no: :difference
|
|
35
|
-
# })
|
|
36
|
-
# # align_braces
|
|
37
|
-
# and_now_for_something = {
|
|
38
|
-
# completely: :different
|
|
39
|
-
# }
|
|
22
|
+
# @example EnforcedStyle: special_inside_parentheses (default)
|
|
23
|
+
# # The `special_inside_parentheses` style enforces that the first key
|
|
24
|
+
# # in a hash literal where the opening brace and the first key are on
|
|
25
|
+
# # separate lines is indented one step (two spaces) more than the
|
|
26
|
+
# # position inside the opening parentheses.
|
|
40
27
|
#
|
|
41
|
-
|
|
42
|
-
|
|
28
|
+
# # bad
|
|
29
|
+
# hash = {
|
|
30
|
+
# key: :value
|
|
31
|
+
# }
|
|
32
|
+
# and_in_a_method_call({
|
|
33
|
+
# no: :difference
|
|
34
|
+
# })
|
|
35
|
+
#
|
|
36
|
+
# # good
|
|
37
|
+
# special_inside_parentheses
|
|
38
|
+
# hash = {
|
|
39
|
+
# key: :value
|
|
40
|
+
# }
|
|
41
|
+
# but_in_a_method_call({
|
|
42
|
+
# its_like: :this
|
|
43
|
+
# })
|
|
44
|
+
#
|
|
45
|
+
# @example EnforcedStyle: consistent
|
|
46
|
+
# # The `consistent` style enforces that the first key in a hash
|
|
47
|
+
# # literal where the opening brace and the first key are on
|
|
48
|
+
# # separate lines is indented the same as a hash literal which is not
|
|
49
|
+
# # defined inside a method call.
|
|
50
|
+
#
|
|
51
|
+
# # bad
|
|
52
|
+
# hash = {
|
|
53
|
+
# key: :value
|
|
54
|
+
# }
|
|
55
|
+
# but_in_a_method_call({
|
|
56
|
+
# its_like: :this
|
|
57
|
+
# })
|
|
58
|
+
#
|
|
59
|
+
# # good
|
|
60
|
+
# hash = {
|
|
61
|
+
# key: :value
|
|
62
|
+
# }
|
|
63
|
+
# and_in_a_method_call({
|
|
64
|
+
# no: :difference
|
|
65
|
+
# })
|
|
66
|
+
#
|
|
67
|
+
# @example EnforcedStyle: align_braces
|
|
68
|
+
# # The `align_brackets` style enforces that the opening and closing
|
|
69
|
+
# # braces are indented to the same position.
|
|
70
|
+
#
|
|
71
|
+
# # bad
|
|
72
|
+
# and_now_for_something = {
|
|
73
|
+
# completely: :different
|
|
74
|
+
# }
|
|
75
|
+
#
|
|
76
|
+
# # good
|
|
77
|
+
# and_now_for_something = {
|
|
78
|
+
# completely: :different
|
|
79
|
+
# }
|
|
80
|
+
class FirstHashElementIndentation < Cop
|
|
81
|
+
include Alignment
|
|
43
82
|
include ConfigurableEnforcedStyle
|
|
44
|
-
include
|
|
83
|
+
include MultilineElementIndentation
|
|
84
|
+
|
|
85
|
+
MSG = 'Use %<configured_indentation_width>d spaces for indentation ' \
|
|
86
|
+
'in a hash, relative to %<base_description>s.'
|
|
45
87
|
|
|
46
88
|
def on_hash(node)
|
|
47
89
|
check(node, nil) if node.loc.begin
|
|
@@ -52,6 +94,11 @@ module RuboCop
|
|
|
52
94
|
check(hash_node, left_parenthesis)
|
|
53
95
|
end
|
|
54
96
|
end
|
|
97
|
+
alias on_csend on_send
|
|
98
|
+
|
|
99
|
+
def autocorrect(node)
|
|
100
|
+
AlignmentCorrector.correct(processed_source, node, @column_delta)
|
|
101
|
+
end
|
|
55
102
|
|
|
56
103
|
private
|
|
57
104
|
|
|
@@ -66,10 +113,10 @@ module RuboCop
|
|
|
66
113
|
first_pair = hash_node.pairs.first
|
|
67
114
|
|
|
68
115
|
if first_pair
|
|
69
|
-
return if first_pair.
|
|
116
|
+
return if first_pair.first_line == left_brace.line
|
|
70
117
|
|
|
71
118
|
if separator_style?(first_pair)
|
|
72
|
-
check_based_on_longest_key(hash_node
|
|
119
|
+
check_based_on_longest_key(hash_node, left_brace,
|
|
73
120
|
left_parenthesis)
|
|
74
121
|
else
|
|
75
122
|
check_first(first_pair, left_brace, left_parenthesis, 0)
|
|
@@ -81,7 +128,7 @@ module RuboCop
|
|
|
81
128
|
|
|
82
129
|
def check_right_brace(right_brace, left_brace, left_parenthesis)
|
|
83
130
|
# if the right brace is on the same line as the last value, accept
|
|
84
|
-
return if right_brace.source_line[0...right_brace.column]
|
|
131
|
+
return if /\S/.match?(right_brace.source_line[0...right_brace.column])
|
|
85
132
|
|
|
86
133
|
expected_column = base_column(left_brace, left_parenthesis)
|
|
87
134
|
@column_delta = expected_column - right_brace.column
|
|
@@ -102,14 +149,14 @@ module RuboCop
|
|
|
102
149
|
def separator_style?(first_pair)
|
|
103
150
|
separator = first_pair.loc.operator
|
|
104
151
|
key = "Enforced#{separator.is?(':') ? 'Colon' : 'HashRocket'}Style"
|
|
105
|
-
config.for_cop('Layout/
|
|
152
|
+
config.for_cop('Layout/HashAlignment')[key] == 'separator'
|
|
106
153
|
end
|
|
107
154
|
|
|
108
|
-
def check_based_on_longest_key(
|
|
109
|
-
key_lengths =
|
|
110
|
-
|
|
155
|
+
def check_based_on_longest_key(hash_node, left_brace, left_parenthesis)
|
|
156
|
+
key_lengths = hash_node.keys.map do |key|
|
|
157
|
+
key.source_range.length
|
|
111
158
|
end
|
|
112
|
-
check_first(pairs.first, left_brace, left_parenthesis,
|
|
159
|
+
check_first(hash_node.pairs.first, left_brace, left_parenthesis,
|
|
113
160
|
key_lengths.max - key_lengths.first)
|
|
114
161
|
end
|
|
115
162
|
|
|
@@ -125,8 +172,11 @@ module RuboCop
|
|
|
125
172
|
end
|
|
126
173
|
|
|
127
174
|
def message(base_description)
|
|
128
|
-
format(
|
|
129
|
-
|
|
175
|
+
format(
|
|
176
|
+
MSG,
|
|
177
|
+
configured_indentation_width: configured_indentation_width,
|
|
178
|
+
base_description: base_description
|
|
179
|
+
)
|
|
130
180
|
end
|
|
131
181
|
end
|
|
132
182
|
end
|
|
@@ -20,13 +20,17 @@ module RuboCop
|
|
|
20
20
|
include FirstElementLineBreak
|
|
21
21
|
|
|
22
22
|
MSG = 'Add a line break before the first element of a ' \
|
|
23
|
-
'multi-line hash.'
|
|
23
|
+
'multi-line hash.'
|
|
24
24
|
|
|
25
25
|
def on_hash(node)
|
|
26
26
|
# node.loc.begin tells us whether the hash opens with a {
|
|
27
27
|
# If it doesn't, Style/FirstMethodArgumentLineBreak will handle it
|
|
28
28
|
check_children_line_break(node, node.children) if node.loc.begin
|
|
29
29
|
end
|
|
30
|
+
|
|
31
|
+
def autocorrect(node)
|
|
32
|
+
EmptyLineCorrector.insert_before(node)
|
|
33
|
+
end
|
|
30
34
|
end
|
|
31
35
|
end
|
|
32
36
|
end
|
|
@@ -24,7 +24,7 @@ module RuboCop
|
|
|
24
24
|
include FirstElementLineBreak
|
|
25
25
|
|
|
26
26
|
MSG = 'Add a line break before the first argument of a ' \
|
|
27
|
-
'multi-line method argument list.'
|
|
27
|
+
'multi-line method argument list.'
|
|
28
28
|
|
|
29
29
|
def on_send(node)
|
|
30
30
|
args = node.arguments
|
|
@@ -36,13 +36,17 @@ module RuboCop
|
|
|
36
36
|
# ...then each key/value pair is treated as a method 'argument'
|
|
37
37
|
# when determining where line breaks should appear.
|
|
38
38
|
if (last_arg = args.last)
|
|
39
|
-
if last_arg.hash_type? && !last_arg.braces?
|
|
40
|
-
args = args.concat(args.pop.children)
|
|
41
|
-
end
|
|
39
|
+
args = args.concat(args.pop.children) if last_arg.hash_type? && !last_arg.braces?
|
|
42
40
|
end
|
|
43
41
|
|
|
44
42
|
check_method_line_break(node, args)
|
|
45
43
|
end
|
|
44
|
+
alias on_csend on_send
|
|
45
|
+
alias on_super on_send
|
|
46
|
+
|
|
47
|
+
def autocorrect(node)
|
|
48
|
+
EmptyLineCorrector.insert_before(node)
|
|
49
|
+
end
|
|
46
50
|
end
|
|
47
51
|
end
|
|
48
52
|
end
|
|
@@ -30,12 +30,16 @@ module RuboCop
|
|
|
30
30
|
include FirstElementLineBreak
|
|
31
31
|
|
|
32
32
|
MSG = 'Add a line break before the first parameter of a ' \
|
|
33
|
-
'multi-line method parameter list.'
|
|
33
|
+
'multi-line method parameter list.'
|
|
34
34
|
|
|
35
35
|
def on_def(node)
|
|
36
36
|
check_method_line_break(node, node.arguments)
|
|
37
37
|
end
|
|
38
38
|
alias on_defs on_def
|
|
39
|
+
|
|
40
|
+
def autocorrect(node)
|
|
41
|
+
EmptyLineCorrector.insert_before(node)
|
|
42
|
+
end
|
|
39
43
|
end
|
|
40
44
|
end
|
|
41
45
|
end
|