rubocop 0.42.0 → 0.52.1
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 +4 -4
- data/LICENSE.txt +1 -1
- data/README.md +106 -20
- data/assets/output.html.erb +21 -10
- data/bin/rubocop +1 -2
- data/config/default.yml +914 -483
- data/config/disabled.yml +61 -41
- data/config/enabled.yml +1396 -878
- data/lib/rubocop/ast/builder.rb +72 -0
- data/lib/rubocop/ast/node/and_node.rb +37 -0
- data/lib/rubocop/ast/node/args_node.rb +29 -0
- data/lib/rubocop/ast/node/array_node.rb +57 -0
- data/lib/rubocop/ast/node/block_node.rb +116 -0
- data/lib/rubocop/ast/node/case_node.rb +64 -0
- data/lib/rubocop/ast/node/def_node.rb +71 -0
- data/lib/rubocop/ast/node/ensure_node.rb +25 -0
- data/lib/rubocop/ast/node/for_node.rb +61 -0
- data/lib/rubocop/ast/node/hash_node.rb +109 -0
- data/lib/rubocop/ast/node/if_node.rb +146 -0
- data/lib/rubocop/ast/node/keyword_splat_node.rb +45 -0
- data/lib/rubocop/ast/node/mixin/basic_literal_node.rb +16 -0
- data/lib/rubocop/ast/node/mixin/binary_operator_node.rb +23 -0
- data/lib/rubocop/ast/node/mixin/collection_node.rb +15 -0
- data/lib/rubocop/ast/node/mixin/conditional_node.rb +45 -0
- data/lib/rubocop/ast/node/mixin/hash_element_node.rb +125 -0
- data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +174 -0
- data/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +89 -0
- data/lib/rubocop/ast/node/mixin/modifier_node.rb +17 -0
- data/lib/rubocop/ast/node/mixin/parameterized_node.rb +61 -0
- data/lib/rubocop/ast/node/mixin/predicate_operator_node.rb +35 -0
- data/lib/rubocop/ast/node/or_node.rb +37 -0
- data/lib/rubocop/ast/node/pair_node.rb +64 -0
- data/lib/rubocop/ast/node/regexp_node.rb +35 -0
- data/lib/rubocop/ast/node/resbody_node.rb +25 -0
- data/lib/rubocop/ast/node/send_node.rb +45 -0
- data/lib/rubocop/ast/node/str_node.rb +14 -0
- data/lib/rubocop/ast/node/super_node.rb +21 -0
- data/lib/rubocop/ast/node/symbol_node.rb +20 -0
- data/lib/rubocop/ast/node/until_node.rb +43 -0
- data/lib/rubocop/ast/node/when_node.rb +61 -0
- data/lib/rubocop/ast/node/while_node.rb +43 -0
- data/lib/rubocop/ast/node/yield_node.rb +21 -0
- data/lib/rubocop/ast/node.rb +634 -0
- data/lib/rubocop/ast/sexp.rb +16 -0
- data/lib/rubocop/{ast_node → ast}/traversal.rb +23 -24
- data/lib/rubocop/cached_data.rb +11 -31
- data/lib/rubocop/cli.rb +116 -33
- data/lib/rubocop/comment_config.rb +4 -10
- data/lib/rubocop/config.rb +355 -102
- data/lib/rubocop/config_loader.rb +93 -78
- data/lib/rubocop/config_loader_resolver.rb +106 -7
- data/lib/rubocop/config_store.rb +4 -1
- data/lib/rubocop/cop/autocorrect_logic.rb +1 -2
- data/lib/rubocop/cop/badge.rb +73 -0
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +71 -0
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +67 -0
- data/lib/rubocop/cop/bundler/ordered_gems.rb +71 -0
- data/lib/rubocop/cop/commissioner.rb +27 -10
- data/lib/rubocop/cop/cop.rb +62 -107
- data/lib/rubocop/cop/corrector.rb +0 -1
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +121 -0
- data/lib/rubocop/cop/correctors/condition_corrector.rb +28 -0
- data/lib/rubocop/cop/correctors/empty_line_corrector.rb +26 -0
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +62 -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/punctuation_corrector.rb +29 -0
- data/lib/rubocop/cop/correctors/space_corrector.rb +34 -0
- data/lib/rubocop/cop/correctors/string_literal_corrector.rb +25 -0
- data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +31 -0
- data/lib/rubocop/cop/force.rb +0 -1
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +102 -0
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +106 -0
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +87 -0
- data/lib/rubocop/cop/generator/require_file_injector.rb +78 -0
- data/lib/rubocop/cop/generator.rb +191 -0
- data/lib/rubocop/cop/ignored_node.rb +0 -1
- data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +46 -0
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +44 -0
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +54 -0
- data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +59 -0
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +71 -0
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +52 -0
- data/lib/rubocop/cop/internal_affairs.rb +8 -0
- data/lib/rubocop/cop/{style → layout}/access_modifier_indentation.rb +39 -10
- data/lib/rubocop/cop/layout/align_array.rb +39 -0
- data/lib/rubocop/cop/layout/align_hash.rb +235 -0
- data/lib/rubocop/cop/{style → layout}/align_parameters.rb +38 -19
- data/lib/rubocop/cop/{style → layout}/block_end_newline.rb +26 -8
- data/lib/rubocop/cop/layout/case_indentation.rb +160 -0
- data/lib/rubocop/cop/layout/class_structure.rb +306 -0
- data/lib/rubocop/cop/{style → layout}/closing_parenthesis_indentation.rb +18 -13
- data/lib/rubocop/cop/{style → layout}/comment_indentation.rb +48 -6
- data/lib/rubocop/cop/{style → layout}/dot_position.rb +34 -21
- data/lib/rubocop/cop/{style → layout}/else_alignment.rb +55 -37
- data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +63 -0
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +147 -0
- data/lib/rubocop/cop/{style → layout}/empty_lines.rb +17 -4
- data/lib/rubocop/cop/{style → layout}/empty_lines_around_access_modifier.rb +40 -24
- data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +87 -0
- data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +46 -0
- data/lib/rubocop/cop/{style → layout}/empty_lines_around_block_body.rb +9 -12
- data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +68 -0
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +135 -0
- data/lib/rubocop/cop/{style → layout}/empty_lines_around_method_body.rb +10 -7
- data/lib/rubocop/cop/{style → layout}/empty_lines_around_module_body.rb +27 -9
- data/lib/rubocop/cop/layout/end_of_line.rb +52 -0
- data/lib/rubocop/cop/{style → layout}/extra_spacing.rb +63 -53
- data/lib/rubocop/cop/{style → layout}/first_array_element_line_break.rb +5 -2
- data/lib/rubocop/cop/{style → layout}/first_hash_element_line_break.rb +5 -2
- data/lib/rubocop/cop/{style → layout}/first_method_argument_line_break.rb +7 -4
- data/lib/rubocop/cop/{style → layout}/first_method_parameter_line_break.rb +8 -5
- data/lib/rubocop/cop/{style → layout}/first_parameter_indentation.rb +32 -26
- data/lib/rubocop/cop/{style → layout}/indent_array.rb +75 -25
- data/lib/rubocop/cop/{style → layout}/indent_assignment.rb +9 -6
- data/lib/rubocop/cop/{style → layout}/indent_hash.rb +80 -31
- data/lib/rubocop/cop/layout/indent_heredoc.rb +208 -0
- data/lib/rubocop/cop/{style → layout}/indentation_consistency.rb +7 -5
- data/lib/rubocop/cop/{style → layout}/indentation_width.rb +151 -117
- data/lib/rubocop/cop/layout/initial_indentation.rb +45 -0
- data/lib/rubocop/cop/layout/leading_comment_space.rb +58 -0
- data/lib/rubocop/cop/{style → layout}/multiline_array_brace_layout.rb +52 -16
- data/lib/rubocop/cop/{style → layout}/multiline_assignment_layout.rb +18 -21
- data/lib/rubocop/cop/{style → layout}/multiline_block_layout.rb +37 -43
- data/lib/rubocop/cop/{style → layout}/multiline_hash_brace_layout.rb +55 -15
- data/lib/rubocop/cop/{style → layout}/multiline_method_call_brace_layout.rb +15 -4
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +221 -0
- data/lib/rubocop/cop/{style → layout}/multiline_method_definition_brace_layout.rb +12 -5
- data/lib/rubocop/cop/{style → layout}/multiline_operation_indentation.rb +23 -13
- data/lib/rubocop/cop/{style → layout}/rescue_ensure_alignment.rb +24 -13
- data/lib/rubocop/cop/{style → layout}/space_after_colon.rb +17 -13
- data/lib/rubocop/cop/layout/space_after_comma.rb +35 -0
- data/lib/rubocop/cop/{style → layout}/space_after_method_name.rb +11 -11
- data/lib/rubocop/cop/layout/space_after_not.rb +38 -0
- data/lib/rubocop/cop/{style → layout}/space_after_semicolon.rb +14 -4
- data/lib/rubocop/cop/{style → layout}/space_around_block_parameters.rb +52 -28
- data/lib/rubocop/cop/{style → layout}/space_around_equals_in_parameter_default.rb +29 -21
- data/lib/rubocop/cop/{style → layout}/space_around_keyword.rb +33 -29
- data/lib/rubocop/cop/layout/space_around_operators.rb +159 -0
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +107 -0
- data/lib/rubocop/cop/layout/space_before_comma.rb +31 -0
- data/lib/rubocop/cop/{style → layout}/space_before_comment.rb +11 -7
- data/lib/rubocop/cop/{style → layout}/space_before_first_arg.rb +23 -20
- data/lib/rubocop/cop/layout/space_before_semicolon.rb +27 -0
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +85 -0
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +236 -0
- data/lib/rubocop/cop/{style → layout}/space_inside_array_percent_literal.rb +8 -8
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +228 -0
- data/lib/rubocop/cop/{style → layout}/space_inside_hash_literal_braces.rb +91 -51
- data/lib/rubocop/cop/layout/space_inside_parens.rb +53 -0
- data/lib/rubocop/cop/{style → layout}/space_inside_percent_literal_delimiters.rb +14 -13
- data/lib/rubocop/cop/{style → layout}/space_inside_range_literal.rb +16 -17
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +90 -0
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +80 -0
- data/lib/rubocop/cop/{style → layout}/tab.rb +8 -6
- data/lib/rubocop/cop/{style → layout}/trailing_blank_lines.rb +14 -15
- data/lib/rubocop/cop/{style → layout}/trailing_whitespace.rb +3 -4
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +59 -0
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +13 -9
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +7 -1
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +55 -25
- data/lib/rubocop/cop/lint/block_alignment.rb +75 -34
- data/lib/rubocop/cop/lint/boolean_symbol.rb +38 -0
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +17 -15
- data/lib/rubocop/cop/lint/condition_position.rb +16 -15
- data/lib/rubocop/cop/lint/debugger.rb +57 -23
- data/lib/rubocop/cop/lint/def_end_alignment.rb +28 -14
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +19 -10
- data/lib/rubocop/cop/lint/duplicate_case_condition.rb +53 -0
- data/lib/rubocop/cop/lint/duplicate_methods.rb +108 -14
- data/lib/rubocop/cop/lint/duplicated_key.rb +16 -9
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +15 -6
- data/lib/rubocop/cop/lint/else_layout.rb +27 -31
- data/lib/rubocop/cop/lint/empty_ensure.rb +44 -3
- data/lib/rubocop/cop/lint/empty_expression.rb +42 -0
- data/lib/rubocop/cop/lint/empty_interpolation.rb +16 -3
- data/lib/rubocop/cop/lint/empty_when.rb +38 -0
- data/lib/rubocop/cop/lint/end_alignment.rb +57 -39
- data/lib/rubocop/cop/lint/end_in_method.rb +24 -2
- data/lib/rubocop/cop/lint/ensure_return.rb +23 -3
- data/lib/rubocop/cop/lint/float_out_of_range.rb +10 -6
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +67 -46
- data/lib/rubocop/cop/lint/handle_exceptions.rb +41 -4
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +9 -5
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +42 -29
- data/lib/rubocop/cop/lint/inherit_exception.rb +34 -23
- data/lib/rubocop/cop/lint/interpolation_check.rb +37 -0
- data/lib/rubocop/cop/lint/{literal_in_condition.rb → literal_as_condition.rb} +51 -40
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +13 -8
- data/lib/rubocop/cop/lint/loop.rb +37 -2
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +81 -0
- data/lib/rubocop/cop/lint/multiple_compare.rb +48 -0
- data/lib/rubocop/cop/lint/nested_method_definition.rb +54 -12
- data/lib/rubocop/cop/lint/nested_percent_literal.rb +58 -0
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +7 -3
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +32 -23
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +22 -14
- data/lib/rubocop/cop/lint/percent_string_array.rb +42 -27
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +28 -19
- data/lib/rubocop/cop/lint/rand_one.rb +17 -8
- data/lib/rubocop/cop/lint/redundant_with_index.rb +80 -0
- data/lib/rubocop/cop/lint/redundant_with_object.rb +81 -0
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +29 -0
- data/lib/rubocop/cop/lint/require_parentheses.rb +24 -30
- data/lib/rubocop/cop/lint/rescue_exception.rb +21 -2
- data/lib/rubocop/cop/lint/rescue_type.rb +90 -0
- data/lib/rubocop/cop/lint/return_in_void_context.rb +74 -0
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +70 -0
- data/lib/rubocop/cop/lint/script_permission.rb +49 -0
- data/lib/rubocop/cop/lint/shadowed_argument.rb +146 -0
- data/lib/rubocop/cop/lint/shadowed_exception.rb +78 -57
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +25 -2
- data/lib/rubocop/cop/lint/string_conversion_in_interpolation.rb +18 -12
- data/lib/rubocop/cop/lint/syntax.rb +23 -21
- data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +26 -4
- data/lib/rubocop/cop/lint/unified_integer.rb +43 -0
- data/lib/rubocop/cop/lint/unneeded_disable.rb +117 -56
- data/lib/rubocop/cop/lint/unneeded_require_statement.rb +51 -0
- data/lib/rubocop/cop/lint/unneeded_splat_expansion.rb +167 -0
- data/lib/rubocop/cop/lint/unreachable_code.rb +72 -8
- data/lib/rubocop/cop/lint/unused_block_argument.rb +87 -27
- data/lib/rubocop/cop/lint/unused_method_argument.rb +18 -2
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +75 -0
- data/lib/rubocop/cop/lint/uri_regexp.rb +73 -0
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +40 -18
- data/lib/rubocop/cop/lint/useless_assignment.rb +45 -14
- data/lib/rubocop/cop/lint/useless_comparison.rb +8 -10
- data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +16 -2
- data/lib/rubocop/cop/lint/useless_setter_call.rb +57 -43
- data/lib/rubocop/cop/lint/void.rb +83 -23
- data/lib/rubocop/cop/message_annotator.rb +118 -0
- data/lib/rubocop/cop/metrics/abc_size.rb +3 -4
- data/lib/rubocop/cop/metrics/block_length.rb +32 -0
- data/lib/rubocop/cop/metrics/block_nesting.rb +21 -10
- data/lib/rubocop/cop/metrics/class_length.rb +3 -2
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +4 -4
- data/lib/rubocop/cop/metrics/line_length.rb +67 -14
- data/lib/rubocop/cop/metrics/method_length.rb +10 -10
- data/lib/rubocop/cop/metrics/module_length.rb +3 -2
- data/lib/rubocop/cop/metrics/parameter_lists.rb +15 -6
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +5 -6
- data/lib/rubocop/cop/mixin/alignment.rb +70 -0
- data/lib/rubocop/cop/mixin/annotation_comment.rb +0 -1
- data/lib/rubocop/cop/mixin/array_hash_indentation.rb +26 -22
- data/lib/rubocop/cop/mixin/array_min_size.rb +59 -0
- data/lib/rubocop/cop/mixin/array_syntax.rb +4 -12
- data/lib/rubocop/cop/mixin/check_assignment.rb +6 -7
- data/lib/rubocop/cop/mixin/classish_length.rb +0 -1
- data/lib/rubocop/cop/mixin/code_length.rb +4 -3
- data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +21 -16
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +48 -0
- data/lib/rubocop/cop/mixin/configurable_max.rb +5 -4
- data/lib/rubocop/cop/mixin/configurable_naming.rb +5 -35
- data/lib/rubocop/cop/mixin/configurable_numbering.rb +17 -0
- data/lib/rubocop/cop/mixin/def_node.rb +29 -0
- data/lib/rubocop/cop/mixin/documentation_comment.rb +46 -0
- data/lib/rubocop/cop/mixin/duplication.rb +46 -0
- data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +119 -27
- data/lib/rubocop/cop/mixin/empty_parameter.rb +23 -0
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +11 -27
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +30 -0
- data/lib/rubocop/cop/mixin/first_element_line_break.rb +15 -11
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +15 -13
- data/lib/rubocop/cop/mixin/hash_alignment.rb +116 -0
- data/lib/rubocop/cop/mixin/heredoc.rb +28 -0
- data/lib/rubocop/cop/mixin/ignored_pattern.rb +29 -0
- data/lib/rubocop/cop/mixin/integer_node.rb +2 -1
- data/lib/rubocop/cop/mixin/match_range.rb +4 -6
- data/lib/rubocop/cop/mixin/method_complexity.rb +33 -8
- data/lib/rubocop/cop/mixin/method_preference.rb +2 -1
- data/lib/rubocop/cop/mixin/min_body_length.rb +2 -1
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +100 -66
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +49 -51
- data/lib/rubocop/cop/mixin/negative_conditional.rb +18 -13
- data/lib/rubocop/cop/mixin/on_normal_if_unless.rb +1 -25
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +48 -0
- data/lib/rubocop/cop/mixin/parentheses.rb +2 -8
- data/lib/rubocop/cop/mixin/parser_diagnostic.rb +4 -2
- data/lib/rubocop/cop/mixin/percent_array.rb +52 -0
- data/lib/rubocop/cop/mixin/percent_literal.rb +69 -6
- data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +16 -5
- data/lib/rubocop/cop/mixin/rescue_node.rb +23 -0
- data/lib/rubocop/cop/mixin/safe_assignment.rb +3 -1
- data/lib/rubocop/cop/mixin/safe_mode.rb +22 -0
- data/lib/rubocop/cop/mixin/space_after_punctuation.rb +8 -10
- data/lib/rubocop/cop/mixin/space_before_punctuation.rb +10 -14
- data/lib/rubocop/cop/mixin/statement_modifier.rb +29 -32
- data/lib/rubocop/cop/mixin/string_help.rb +3 -2
- data/lib/rubocop/cop/mixin/string_literals_help.rb +3 -15
- data/lib/rubocop/cop/mixin/surrounding_space.rb +78 -9
- data/lib/rubocop/cop/mixin/target_rails_version.rb +16 -0
- data/lib/rubocop/cop/mixin/target_ruby_version.rb +16 -0
- data/lib/rubocop/cop/mixin/too_many_lines.rb +39 -0
- data/lib/rubocop/cop/mixin/trailing_comma.rb +37 -38
- data/lib/rubocop/cop/mixin/unused_argument.rb +6 -16
- data/lib/rubocop/cop/naming/accessor_method_name.rb +55 -0
- data/lib/rubocop/cop/{style → naming}/ascii_identifiers.rb +36 -5
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +42 -0
- data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +33 -0
- data/lib/rubocop/cop/naming/constant_name.rb +58 -0
- data/lib/rubocop/cop/{style → naming}/file_name.rb +72 -29
- data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +62 -0
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +59 -0
- data/lib/rubocop/cop/naming/method_name.rb +40 -0
- data/lib/rubocop/cop/naming/predicate_name.rb +101 -0
- data/lib/rubocop/cop/naming/variable_name.rb +50 -0
- data/lib/rubocop/cop/naming/variable_number.rb +61 -0
- data/lib/rubocop/cop/offense.rb +9 -5
- data/lib/rubocop/cop/performance/caller.rb +69 -0
- data/lib/rubocop/cop/performance/case_when_splat.rb +65 -89
- data/lib/rubocop/cop/performance/casecmp.rb +37 -25
- data/lib/rubocop/cop/performance/compare_with_block.rb +117 -0
- data/lib/rubocop/cop/performance/count.rb +33 -43
- data/lib/rubocop/cop/performance/detect.rb +30 -31
- data/lib/rubocop/cop/performance/double_start_end_with.rb +55 -26
- data/lib/rubocop/cop/performance/end_with.rb +9 -9
- data/lib/rubocop/cop/performance/fixed_size.rb +21 -17
- data/lib/rubocop/cop/performance/flat_map.rb +30 -33
- data/lib/rubocop/cop/performance/hash_each_methods.rb +129 -0
- data/lib/rubocop/cop/performance/lstrip_rstrip.rb +14 -14
- data/lib/rubocop/cop/performance/range_include.rb +5 -4
- data/lib/rubocop/cop/performance/redundant_block_call.rb +28 -29
- data/lib/rubocop/cop/performance/redundant_match.rb +19 -15
- data/lib/rubocop/cop/performance/redundant_merge.rb +100 -52
- data/lib/rubocop/cop/performance/redundant_sort_by.rb +17 -14
- data/lib/rubocop/cop/performance/regexp_match.rb +224 -0
- data/lib/rubocop/cop/performance/reverse_each.rb +3 -6
- data/lib/rubocop/cop/performance/sample.rb +84 -83
- data/lib/rubocop/cop/performance/size.rb +22 -15
- data/lib/rubocop/cop/performance/start_with.rb +9 -9
- data/lib/rubocop/cop/performance/string_replacement.rb +35 -70
- data/lib/rubocop/cop/performance/times_map.rb +33 -24
- data/lib/rubocop/cop/performance/unfreeze_string.rb +50 -0
- data/lib/rubocop/cop/performance/uri_default_parser.rb +47 -0
- data/lib/rubocop/cop/rails/action_filter.rb +67 -47
- data/lib/rubocop/cop/rails/active_support_aliases.rb +68 -0
- data/lib/rubocop/cop/rails/application_job.rb +40 -0
- data/lib/rubocop/cop/rails/application_record.rb +40 -0
- data/lib/rubocop/cop/rails/blank.rb +142 -0
- data/lib/rubocop/cop/rails/create_table_with_timestamps.rb +82 -0
- data/lib/rubocop/cop/rails/date.rb +47 -42
- data/lib/rubocop/cop/rails/delegate.rb +55 -33
- data/lib/rubocop/cop/rails/delegate_allow_blank.rb +51 -0
- data/lib/rubocop/cop/rails/dynamic_find_by.rb +82 -0
- data/lib/rubocop/cop/rails/enum_uniqueness.rb +45 -0
- data/lib/rubocop/cop/rails/environment_comparison.rb +66 -0
- data/lib/rubocop/cop/rails/exit.rb +17 -11
- data/lib/rubocop/cop/rails/file_path.rb +72 -0
- data/lib/rubocop/cop/rails/find_by.rb +14 -20
- data/lib/rubocop/cop/rails/find_each.rb +8 -21
- data/lib/rubocop/cop/rails/has_and_belongs_to_many.rb +9 -2
- data/lib/rubocop/cop/rails/has_many_or_has_one_dependent.rb +84 -0
- data/lib/rubocop/cop/rails/http_positional_arguments.rb +102 -0
- data/lib/rubocop/cop/rails/inverse_of.rb +218 -0
- data/lib/rubocop/cop/rails/lexically_scoped_action_filter.rb +112 -0
- data/lib/rubocop/cop/rails/not_null_column.rb +67 -0
- data/lib/rubocop/cop/rails/output.rb +15 -13
- data/lib/rubocop/cop/rails/output_safety.rb +65 -17
- data/lib/rubocop/cop/rails/pluralization_grammar.rb +30 -29
- data/lib/rubocop/cop/rails/presence.rb +118 -0
- data/lib/rubocop/cop/rails/present.rb +143 -0
- data/lib/rubocop/cop/rails/read_write_attribute.rb +20 -26
- data/lib/rubocop/cop/rails/redundant_receiver_in_with_options.rb +133 -0
- data/lib/rubocop/cop/rails/relative_date_constant.rb +88 -0
- data/lib/rubocop/cop/rails/request_referer.rb +28 -13
- data/lib/rubocop/cop/rails/reversible_migration.rb +281 -0
- data/lib/rubocop/cop/rails/safe_navigation.rb +90 -0
- data/lib/rubocop/cop/rails/save_bang.rb +104 -19
- data/lib/rubocop/cop/rails/scope_args.rb +5 -10
- data/lib/rubocop/cop/rails/skips_model_validations.rb +70 -0
- data/lib/rubocop/cop/rails/time_zone.rb +34 -21
- data/lib/rubocop/cop/rails/uniq_before_pluck.rb +17 -14
- data/lib/rubocop/cop/rails/unknown_env.rb +63 -0
- data/lib/rubocop/cop/rails/validation.rb +16 -20
- data/lib/rubocop/cop/registry.rb +172 -0
- data/lib/rubocop/cop/security/eval.rb +30 -0
- data/lib/rubocop/cop/security/json_load.rb +46 -0
- data/lib/rubocop/cop/security/marshal_load.rb +39 -0
- data/lib/rubocop/cop/security/yaml_load.rb +37 -0
- data/lib/rubocop/cop/severity.rb +1 -2
- data/lib/rubocop/cop/style/alias.rb +54 -33
- data/lib/rubocop/cop/style/and_or.rb +77 -63
- data/lib/rubocop/cop/style/array_join.rb +13 -9
- data/lib/rubocop/cop/style/ascii_comments.rb +25 -7
- data/lib/rubocop/cop/style/attr.rb +24 -11
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +21 -16
- data/lib/rubocop/cop/style/bare_percent_literals.rb +31 -11
- data/lib/rubocop/cop/style/begin_block.rb +1 -2
- data/lib/rubocop/cop/style/block_comments.rb +20 -11
- data/lib/rubocop/cop/style/block_delimiters.rb +122 -51
- data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +142 -54
- data/lib/rubocop/cop/style/case_equality.rb +15 -4
- data/lib/rubocop/cop/style/character_literal.rb +12 -5
- data/lib/rubocop/cop/style/class_and_module_children.rb +85 -6
- data/lib/rubocop/cop/style/class_check.rb +35 -19
- data/lib/rubocop/cop/style/class_methods.rb +13 -14
- data/lib/rubocop/cop/style/class_vars.rb +5 -5
- data/lib/rubocop/cop/style/collection_methods.rb +12 -13
- data/lib/rubocop/cop/style/colon_method_call.rb +24 -16
- data/lib/rubocop/cop/style/colon_method_definition.rb +36 -0
- data/lib/rubocop/cop/style/command_literal.rb +98 -32
- data/lib/rubocop/cop/style/comment_annotation.rb +41 -15
- data/lib/rubocop/cop/style/commented_keyword.rb +84 -0
- data/lib/rubocop/cop/style/conditional_assignment.rb +161 -112
- data/lib/rubocop/cop/style/copyright.rb +32 -34
- data/lib/rubocop/cop/style/date_time.rb +44 -0
- data/lib/rubocop/cop/style/def_with_parentheses.rb +32 -9
- data/lib/rubocop/cop/style/dir.rb +48 -0
- data/lib/rubocop/cop/style/documentation.rb +44 -58
- data/lib/rubocop/cop/style/documentation_method.rb +76 -0
- data/lib/rubocop/cop/style/double_negation.rb +3 -3
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +14 -13
- data/lib/rubocop/cop/style/each_with_object.rb +28 -25
- data/lib/rubocop/cop/style/empty_block_parameter.rb +47 -0
- data/lib/rubocop/cop/style/empty_case_condition.rb +18 -30
- data/lib/rubocop/cop/style/empty_else.rb +82 -51
- data/lib/rubocop/cop/style/empty_lambda_parameter.rb +43 -0
- data/lib/rubocop/cop/style/empty_literal.rb +76 -48
- data/lib/rubocop/cop/style/empty_method.rb +112 -0
- data/lib/rubocop/cop/style/encoding.rb +10 -40
- data/lib/rubocop/cop/style/end_block.rb +1 -2
- data/lib/rubocop/cop/style/eval_with_location.rb +146 -0
- data/lib/rubocop/cop/style/even_odd.rb +25 -44
- data/lib/rubocop/cop/style/flip_flop.rb +13 -3
- data/lib/rubocop/cop/style/for.rb +19 -15
- data/lib/rubocop/cop/style/format_string.rb +88 -42
- data/lib/rubocop/cop/style/format_string_token.rb +163 -0
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +90 -15
- data/lib/rubocop/cop/style/global_vars.rb +14 -5
- data/lib/rubocop/cop/style/guard_clause.rb +22 -62
- data/lib/rubocop/cop/style/hash_syntax.rb +109 -59
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +73 -32
- data/lib/rubocop/cop/style/if_inside_else.rb +16 -20
- data/lib/rubocop/cop/style/if_unless_modifier.rb +48 -39
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +6 -12
- data/lib/rubocop/cop/style/if_with_semicolon.rb +10 -2
- data/lib/rubocop/cop/style/implicit_runtime_error.rb +7 -7
- data/lib/rubocop/cop/style/infinite_loop.rb +33 -32
- data/lib/rubocop/cop/style/inline_comment.rb +17 -5
- data/lib/rubocop/cop/style/inverse_methods.rb +149 -0
- data/lib/rubocop/cop/style/lambda.rb +66 -63
- data/lib/rubocop/cop/style/lambda_call.rb +50 -20
- data/lib/rubocop/cop/style/line_end_concatenation.rb +38 -17
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +90 -0
- data/lib/rubocop/cop/style/{method_call_parentheses.rb → method_call_without_args_parentheses.rb} +32 -25
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +9 -9
- data/lib/rubocop/cop/style/method_def_parentheses.rb +101 -29
- data/lib/rubocop/cop/style/method_missing.rb +14 -20
- data/lib/rubocop/cop/style/min_max.rb +68 -0
- data/lib/rubocop/cop/style/missing_else.rb +61 -21
- data/lib/rubocop/cop/style/mixin_grouping.rb +145 -0
- data/lib/rubocop/cop/style/mixin_usage.rb +82 -0
- data/lib/rubocop/cop/style/module_function.rb +44 -18
- data/lib/rubocop/cop/style/multiline_block_chain.rb +8 -15
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +67 -0
- data/lib/rubocop/cop/style/multiline_if_then.rb +21 -14
- data/lib/rubocop/cop/style/multiline_memoization.rb +93 -0
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +21 -9
- data/lib/rubocop/cop/style/multiple_comparison.rb +77 -0
- data/lib/rubocop/cop/style/mutable_constant.rb +17 -9
- data/lib/rubocop/cop/style/negated_if.rb +76 -25
- data/lib/rubocop/cop/style/negated_while.rb +4 -22
- data/lib/rubocop/cop/style/nested_modifier.rb +17 -47
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +32 -28
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +3 -6
- data/lib/rubocop/cop/style/next.rb +72 -53
- data/lib/rubocop/cop/style/nil_comparison.rb +10 -14
- data/lib/rubocop/cop/style/non_nil_check.rb +69 -62
- data/lib/rubocop/cop/style/not.rb +19 -13
- data/lib/rubocop/cop/style/numeric_literal_prefix.rb +16 -7
- data/lib/rubocop/cop/style/numeric_literals.rb +33 -12
- data/lib/rubocop/cop/style/numeric_predicate.rb +30 -32
- data/lib/rubocop/cop/style/one_line_conditional.rb +21 -17
- data/lib/rubocop/cop/style/option_hash.rb +11 -37
- data/lib/rubocop/cop/style/optional_arguments.rb +20 -9
- data/lib/rubocop/cop/style/or_assignment.rb +88 -0
- data/lib/rubocop/cop/style/parallel_assignment.rb +83 -64
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +37 -19
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +50 -15
- data/lib/rubocop/cop/style/percent_q_literals.rb +40 -17
- data/lib/rubocop/cop/style/perl_backrefs.rb +9 -3
- data/lib/rubocop/cop/style/preferred_hash_methods.rb +48 -14
- data/lib/rubocop/cop/style/proc.rb +13 -10
- data/lib/rubocop/cop/style/raise_args.rb +46 -50
- data/lib/rubocop/cop/style/random_with_offset.rb +160 -0
- data/lib/rubocop/cop/style/redundant_begin.rb +16 -6
- data/lib/rubocop/cop/style/redundant_conditional.rb +96 -0
- data/lib/rubocop/cop/style/redundant_exception.rb +4 -5
- data/lib/rubocop/cop/style/redundant_freeze.rb +7 -10
- data/lib/rubocop/cop/style/redundant_parentheses.rb +70 -31
- data/lib/rubocop/cop/style/redundant_return.rb +61 -23
- data/lib/rubocop/cop/style/redundant_self.rb +62 -60
- data/lib/rubocop/cop/style/regexp_literal.rb +100 -34
- data/lib/rubocop/cop/style/rescue_modifier.rb +15 -17
- data/lib/rubocop/cop/style/rescue_standard_error.rb +122 -0
- data/lib/rubocop/cop/style/return_nil.rb +89 -0
- data/lib/rubocop/cop/style/safe_navigation.rb +197 -0
- data/lib/rubocop/cop/style/self_assignment.rb +20 -17
- data/lib/rubocop/cop/style/semicolon.rb +25 -17
- data/lib/rubocop/cop/style/send.rb +14 -4
- data/lib/rubocop/cop/style/signal_exception.rb +105 -7
- data/lib/rubocop/cop/style/single_line_block_params.rb +27 -21
- data/lib/rubocop/cop/style/single_line_methods.rb +45 -31
- data/lib/rubocop/cop/style/special_global_vars.rb +32 -28
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +24 -53
- data/lib/rubocop/cop/style/stderr_puts.rb +54 -0
- data/lib/rubocop/cop/style/string_hash_keys.rb +36 -0
- data/lib/rubocop/cop/style/string_literals.rb +31 -5
- data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +20 -2
- data/lib/rubocop/cop/style/string_methods.rb +22 -9
- data/lib/rubocop/cop/style/struct_inheritance.rb +5 -17
- data/lib/rubocop/cop/style/symbol_array.rb +39 -65
- data/lib/rubocop/cop/style/symbol_literal.rb +1 -2
- data/lib/rubocop/cop/style/symbol_proc.rb +35 -52
- data/lib/rubocop/cop/style/ternary_parentheses.rb +143 -42
- data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +101 -0
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +31 -20
- data/lib/rubocop/cop/style/trailing_comma_in_literal.rb +26 -8
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +95 -0
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +97 -37
- data/lib/rubocop/cop/style/trivial_accessors.rb +72 -66
- data/lib/rubocop/cop/style/unless_else.rb +19 -13
- data/lib/rubocop/cop/style/unneeded_capital_w.rb +24 -10
- data/lib/rubocop/cop/style/unneeded_interpolation.rb +22 -24
- data/lib/rubocop/cop/style/unneeded_percent_q.rb +28 -22
- data/lib/rubocop/cop/style/variable_interpolation.rb +23 -10
- data/lib/rubocop/cop/style/when_then.rb +18 -4
- data/lib/rubocop/cop/style/while_until_do.rb +34 -16
- data/lib/rubocop/cop/style/while_until_modifier.rb +32 -12
- data/lib/rubocop/cop/style/word_array.rb +45 -102
- data/lib/rubocop/cop/style/yoda_condition.rb +107 -0
- data/lib/rubocop/cop/style/zero_length_predicate.rb +55 -32
- data/lib/rubocop/cop/team.rb +33 -35
- data/lib/rubocop/cop/util.rb +120 -54
- data/lib/rubocop/cop/variable_force/assignment.rb +5 -9
- data/lib/rubocop/cop/variable_force/branch.rb +318 -0
- data/lib/rubocop/cop/variable_force/branchable.rb +21 -0
- data/lib/rubocop/cop/variable_force/reference.rb +1 -2
- data/lib/rubocop/cop/variable_force/scope.rb +37 -26
- data/lib/rubocop/cop/variable_force/variable.rb +12 -12
- data/lib/rubocop/cop/variable_force/variable_table.rb +3 -4
- data/lib/rubocop/cop/variable_force.rb +72 -39
- data/lib/rubocop/error.rb +0 -1
- data/lib/rubocop/formatter/base_formatter.rb +4 -9
- data/lib/rubocop/formatter/clang_style_formatter.rb +2 -3
- data/lib/rubocop/formatter/colorizable.rb +9 -10
- data/lib/rubocop/formatter/disabled_config_formatter.rb +48 -35
- data/lib/rubocop/formatter/disabled_lines_formatter.rb +0 -1
- data/lib/rubocop/formatter/emacs_style_formatter.rb +0 -1
- data/lib/rubocop/formatter/file_list_formatter.rb +0 -1
- data/lib/rubocop/formatter/formatter_set.rb +16 -13
- data/lib/rubocop/formatter/fuubar_style_formatter.rb +6 -1
- data/lib/rubocop/formatter/html_formatter.rb +5 -5
- data/lib/rubocop/formatter/json_formatter.rb +9 -4
- data/lib/rubocop/formatter/offense_count_formatter.rb +2 -1
- data/lib/rubocop/formatter/progress_formatter.rb +0 -1
- data/lib/rubocop/formatter/quiet_formatter.rb +13 -0
- data/lib/rubocop/formatter/simple_text_formatter.rb +7 -17
- data/lib/rubocop/formatter/tap_formatter.rb +71 -0
- data/lib/rubocop/formatter/text_util.rb +0 -1
- data/lib/rubocop/formatter/worst_offenders_formatter.rb +6 -5
- data/lib/rubocop/magic_comment.rb +210 -0
- data/lib/rubocop/name_similarity.rb +0 -1
- data/lib/rubocop/node_pattern.rb +181 -118
- data/lib/rubocop/options.rb +154 -88
- data/lib/rubocop/path_util.rb +38 -4
- data/lib/rubocop/platform.rb +11 -0
- data/lib/rubocop/processed_source.rb +23 -20
- data/lib/rubocop/rake_task.rb +16 -24
- data/lib/rubocop/remote_config.rb +40 -13
- data/lib/rubocop/result_cache.rb +33 -24
- data/lib/rubocop/rspec/cop_helper.rb +21 -7
- data/lib/rubocop/rspec/expect_offense.rb +165 -0
- data/lib/rubocop/rspec/host_environment_simulation_helper.rb +1 -2
- data/lib/rubocop/rspec/shared_contexts.rb +24 -9
- data/lib/rubocop/rspec/shared_examples.rb +10 -19
- data/lib/rubocop/rspec/support.rb +5 -5
- data/lib/rubocop/runner.rb +74 -39
- data/lib/rubocop/string_interpreter.rb +0 -1
- data/lib/rubocop/string_util.rb +11 -6
- data/lib/rubocop/target_finder.rb +70 -8
- data/lib/rubocop/token.rb +79 -2
- data/lib/rubocop/version.rb +2 -5
- data/lib/rubocop/warning.rb +0 -1
- data/lib/rubocop.rb +569 -398
- metadata +301 -112
- data/lib/rubocop/ast_node/builder.rb +0 -31
- data/lib/rubocop/ast_node/sexp.rb +0 -14
- data/lib/rubocop/ast_node.rb +0 -623
- data/lib/rubocop/cop/lint/eval.rb +0 -23
- data/lib/rubocop/cop/lint/invalid_character_literal.rb +0 -39
- data/lib/rubocop/cop/lint/useless_array_splat.rb +0 -56
- data/lib/rubocop/cop/mixin/access_modifier_node.rb +0 -42
- data/lib/rubocop/cop/mixin/autocorrect_alignment.rb +0 -152
- data/lib/rubocop/cop/mixin/hash_node.rb +0 -15
- data/lib/rubocop/cop/mixin/if_node.rb +0 -37
- data/lib/rubocop/cop/mixin/on_method_def.rb +0 -31
- data/lib/rubocop/cop/mixin/space_inside.rb +0 -79
- data/lib/rubocop/cop/performance/hash_each.rb +0 -86
- data/lib/rubocop/cop/performance/push_splat.rb +0 -47
- data/lib/rubocop/cop/style/accessor_method_name.rb +0 -46
- data/lib/rubocop/cop/style/align_array.rb +0 -21
- data/lib/rubocop/cop/style/align_hash.rb +0 -256
- data/lib/rubocop/cop/style/case_indentation.rb +0 -92
- data/lib/rubocop/cop/style/class_and_module_camel_case.rb +0 -30
- data/lib/rubocop/cop/style/constant_name.rb +0 -30
- data/lib/rubocop/cop/style/empty_line_between_defs.rb +0 -76
- data/lib/rubocop/cop/style/empty_lines_around_class_body.rb +0 -40
- data/lib/rubocop/cop/style/end_of_line.rb +0 -31
- data/lib/rubocop/cop/style/initial_indentation.rb +0 -38
- data/lib/rubocop/cop/style/leading_comment_space.rb +0 -33
- data/lib/rubocop/cop/style/method_name.rb +0 -29
- data/lib/rubocop/cop/style/multiline_method_call_indentation.rb +0 -176
- data/lib/rubocop/cop/style/op_method.rb +0 -44
- data/lib/rubocop/cop/style/predicate_name.rb +0 -68
- data/lib/rubocop/cop/style/space_after_comma.rb +0 -22
- data/lib/rubocop/cop/style/space_after_not.rb +0 -42
- data/lib/rubocop/cop/style/space_around_operators.rb +0 -132
- data/lib/rubocop/cop/style/space_before_block_braces.rb +0 -65
- data/lib/rubocop/cop/style/space_before_comma.rb +0 -17
- data/lib/rubocop/cop/style/space_before_semicolon.rb +0 -17
- data/lib/rubocop/cop/style/space_inside_block_braces.rb +0 -166
- data/lib/rubocop/cop/style/space_inside_brackets.rb +0 -21
- data/lib/rubocop/cop/style/space_inside_parens.rb +0 -17
- data/lib/rubocop/cop/style/space_inside_string_interpolation.rb +0 -52
- data/lib/rubocop/cop/style/variable_name.rb +0 -40
- data/lib/rubocop/cop/variable_force/locatable.rb +0 -197
@@ -1,9 +1,8 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
module RuboCop
|
5
4
|
module Cop
|
6
|
-
module
|
5
|
+
module Layout
|
7
6
|
# This cops checks for inconsistent indentation.
|
8
7
|
#
|
9
8
|
# @example
|
@@ -15,8 +14,7 @@ module RuboCop
|
|
15
14
|
# end
|
16
15
|
# end
|
17
16
|
class IndentationConsistency < Cop
|
18
|
-
include
|
19
|
-
include AccessModifierNode
|
17
|
+
include Alignment
|
20
18
|
include ConfigurableEnforcedStyle
|
21
19
|
|
22
20
|
MSG = 'Inconsistent indentation detected.'.freeze
|
@@ -29,6 +27,10 @@ module RuboCop
|
|
29
27
|
check(node)
|
30
28
|
end
|
31
29
|
|
30
|
+
def autocorrect(node)
|
31
|
+
AlignmentCorrector.correct(processed_source, node, column_delta)
|
32
|
+
end
|
33
|
+
|
32
34
|
private
|
33
35
|
|
34
36
|
def check(node)
|
@@ -38,7 +40,7 @@ module RuboCop
|
|
38
40
|
# the AccessModifierIndentation cop. This cop uses them as dividers
|
39
41
|
# in rails mode. Then consistency is checked only within each
|
40
42
|
# section delimited by a modifier node.
|
41
|
-
if
|
43
|
+
if child.send_type? && child.access_modifier?
|
42
44
|
children_to_check << [] if style == :rails
|
43
45
|
else
|
44
46
|
children_to_check.last << child
|
@@ -1,40 +1,70 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
module RuboCop
|
5
4
|
module Cop
|
6
|
-
module
|
7
|
-
# This cops checks for indentation that doesn't use
|
5
|
+
module Layout
|
6
|
+
# This cops checks for indentation that doesn't use the specified number
|
7
|
+
# of spaces.
|
8
8
|
#
|
9
|
-
#
|
9
|
+
# See also the IndentationConsistency cop which is the companion to this
|
10
|
+
# one.
|
10
11
|
#
|
12
|
+
# @example
|
13
|
+
# # bad
|
11
14
|
# class A
|
12
15
|
# def test
|
13
16
|
# puts 'hello'
|
14
17
|
# end
|
15
18
|
# end
|
16
|
-
|
19
|
+
#
|
20
|
+
# # good
|
21
|
+
# class A
|
22
|
+
# def test
|
23
|
+
# puts 'hello'
|
24
|
+
# end
|
25
|
+
# end
|
26
|
+
#
|
27
|
+
# @example IgnoredPatterns: ['^\s*module']
|
28
|
+
# # bad
|
29
|
+
# module A
|
30
|
+
# class B
|
31
|
+
# def test
|
32
|
+
# puts 'hello'
|
33
|
+
# end
|
34
|
+
# end
|
35
|
+
# end
|
36
|
+
#
|
37
|
+
# # good
|
38
|
+
# module A
|
39
|
+
# class B
|
40
|
+
# def test
|
41
|
+
# puts 'hello'
|
42
|
+
# end
|
43
|
+
# end
|
44
|
+
# end
|
45
|
+
class IndentationWidth < Cop
|
17
46
|
include EndKeywordAlignment
|
18
|
-
include
|
19
|
-
include OnMethodDef
|
47
|
+
include Alignment
|
20
48
|
include CheckAssignment
|
21
|
-
include
|
22
|
-
|
49
|
+
include IgnoredPattern
|
50
|
+
|
51
|
+
MSG = 'Use %<configured_indentation_width>d (not %<indentation>d) ' \
|
52
|
+
'spaces for%<name>s indentation.'.freeze
|
53
|
+
|
54
|
+
SPECIAL_MODIFIERS = %w[private protected].freeze
|
23
55
|
|
24
56
|
def on_rescue(node)
|
25
|
-
_begin_node, *
|
26
|
-
rescue_nodes.each do |rescue_node|
|
27
|
-
_, _, body = *rescue_node
|
28
|
-
check_indentation(rescue_node.loc.keyword, body)
|
29
|
-
end
|
57
|
+
_begin_node, *_rescue_nodes, else_node = *node
|
30
58
|
check_indentation(node.loc.else, else_node)
|
31
59
|
end
|
32
60
|
|
33
61
|
def on_ensure(node)
|
34
|
-
|
35
|
-
check_indentation(node.loc.keyword, ensure_body)
|
62
|
+
check_indentation(node.loc.keyword, node.body)
|
36
63
|
end
|
37
64
|
|
65
|
+
alias on_resbody on_ensure
|
66
|
+
alias on_for on_ensure
|
67
|
+
|
38
68
|
def on_kwbegin(node)
|
39
69
|
# Check indentation against end keyword but only if it's first on its
|
40
70
|
# line.
|
@@ -43,125 +73,112 @@ module RuboCop
|
|
43
73
|
end
|
44
74
|
|
45
75
|
def on_block(node)
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
76
|
+
end_loc = node.loc.end
|
77
|
+
|
78
|
+
return unless begins_its_line?(end_loc)
|
79
|
+
|
80
|
+
check_indentation(end_loc, node.body)
|
81
|
+
|
82
|
+
return unless indentation_consistency_style == 'rails'
|
83
|
+
|
84
|
+
check_members(end_loc, [node.body])
|
52
85
|
end
|
53
86
|
|
54
87
|
def on_module(node)
|
55
88
|
_module_name, *members = *node
|
56
|
-
check_members(node, members)
|
89
|
+
check_members(node.loc.keyword, members)
|
57
90
|
end
|
58
91
|
|
59
92
|
def on_class(node)
|
60
93
|
_class_name, _base_class, *members = *node
|
61
|
-
check_members(node, members)
|
62
|
-
end
|
63
|
-
|
64
|
-
def check_members(node, members)
|
65
|
-
check_indentation(node.loc.keyword, members.first)
|
66
|
-
|
67
|
-
return unless members.any? && members.first.begin_type?
|
68
|
-
style =
|
69
|
-
config.for_cop('Style/IndentationConsistency')['EnforcedStyle']
|
70
|
-
return unless style == 'rails'
|
71
|
-
|
72
|
-
special = %w(protected private) # Extra indentation step after these.
|
73
|
-
previous_modifier = nil
|
74
|
-
members.first.children.each do |m|
|
75
|
-
if modifier_node?(m) && special.include?(m.source)
|
76
|
-
previous_modifier = m
|
77
|
-
elsif previous_modifier
|
78
|
-
check_indentation(previous_modifier.source_range, m, style)
|
79
|
-
previous_modifier = nil
|
80
|
-
end
|
81
|
-
end
|
94
|
+
check_members(node.loc.keyword, members)
|
82
95
|
end
|
83
96
|
|
84
97
|
def on_send(node)
|
85
98
|
super
|
86
|
-
return unless
|
87
|
-
_, _, *args = *node
|
99
|
+
return unless node.adjacent_def_modifier?
|
88
100
|
|
89
|
-
*_, body = *
|
101
|
+
*_, body = *node.first_argument
|
90
102
|
|
91
103
|
def_end_config = config.for_cop('Lint/DefEndAlignment')
|
92
|
-
style = def_end_config['
|
93
|
-
base = style == 'def' ?
|
104
|
+
style = def_end_config['EnforcedStyleAlignWith'] || 'start_of_line'
|
105
|
+
base = style == 'def' ? node.first_argument : node
|
94
106
|
|
95
107
|
check_indentation(base.source_range, body)
|
96
|
-
ignore_node(
|
108
|
+
ignore_node(node.first_argument)
|
97
109
|
end
|
98
110
|
|
99
|
-
def
|
100
|
-
|
101
|
-
end
|
111
|
+
def on_def(node)
|
112
|
+
return if ignored_node?(node)
|
102
113
|
|
103
|
-
|
104
|
-
_variable, _collection, body = *node
|
105
|
-
check_indentation(node.loc.keyword, body)
|
114
|
+
check_indentation(node.loc.keyword, node.body)
|
106
115
|
end
|
116
|
+
alias on_defs on_def
|
107
117
|
|
108
118
|
def on_while(node, base = node)
|
109
119
|
return if ignored_node?(node)
|
110
120
|
|
111
|
-
|
112
|
-
return unless node.loc.keyword.begin_pos ==
|
113
|
-
node.source_range.begin_pos
|
121
|
+
return unless node.single_line_condition?
|
114
122
|
|
115
|
-
check_indentation(base.loc, body)
|
123
|
+
check_indentation(base.loc, node.body)
|
116
124
|
end
|
117
125
|
|
118
126
|
alias on_until on_while
|
119
127
|
|
120
|
-
def on_case(
|
121
|
-
|
122
|
-
|
123
|
-
branches.compact.each do |b|
|
124
|
-
if b.type == :when
|
125
|
-
# TODO: Revert to the original expression once the fix in Rubinius
|
126
|
-
# is released.
|
127
|
-
#
|
128
|
-
# Originally this expression was:
|
129
|
-
#
|
130
|
-
# *_conditions, body = *b
|
131
|
-
#
|
132
|
-
# However it fails on Rubinius 2.2.9 due to its bug:
|
133
|
-
#
|
134
|
-
# RuntimeError:
|
135
|
-
# can't modify frozen instance of Array
|
136
|
-
# # kernel/common/array.rb:988:in `pop'
|
137
|
-
# # ./lib/rubocop/cop/style/indentation_width.rb:99:in `on_case'
|
138
|
-
#
|
139
|
-
# It seems to be fixed on the current master (0a92c3c).
|
140
|
-
body = b.children.last
|
141
|
-
|
142
|
-
# Check "when" body against "when" keyword indentation.
|
143
|
-
check_indentation(b.loc.keyword, body)
|
144
|
-
latest_when = b
|
145
|
-
else
|
146
|
-
# Since it's not easy to get the position of the "else" keyword,
|
147
|
-
# we check "else" body against latest "when" keyword indentation.
|
148
|
-
check_indentation(latest_when.loc.keyword, b)
|
149
|
-
end
|
128
|
+
def on_case(case_node)
|
129
|
+
case_node.each_when do |when_node|
|
130
|
+
check_indentation(when_node.loc.keyword, when_node.body)
|
150
131
|
end
|
132
|
+
|
133
|
+
check_indentation(case_node.when_branches.last.loc.keyword,
|
134
|
+
case_node.else_branch)
|
151
135
|
end
|
152
136
|
|
153
137
|
def on_if(node, base = node)
|
154
|
-
return if ignored_node?(node)
|
155
|
-
return if ternary?
|
156
|
-
return if modifier_if?(node)
|
138
|
+
return if ignored_node?(node) || !node.body
|
139
|
+
return if node.ternary? || node.modifier_form?
|
157
140
|
|
158
|
-
|
141
|
+
check_if(node, node.body, node.else_branch, base.loc)
|
142
|
+
end
|
159
143
|
|
160
|
-
|
144
|
+
def autocorrect(node)
|
145
|
+
AlignmentCorrector.correct(processed_source, node, @column_delta)
|
161
146
|
end
|
162
147
|
|
163
148
|
private
|
164
149
|
|
150
|
+
def check_members(base, members)
|
151
|
+
check_indentation(base, members.first)
|
152
|
+
|
153
|
+
return unless members.any? && members.first.begin_type?
|
154
|
+
return unless indentation_consistency_style == 'rails'
|
155
|
+
|
156
|
+
each_member(members) do |member, previous_modifier|
|
157
|
+
check_indentation(previous_modifier, member,
|
158
|
+
indentation_consistency_style)
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
def each_member(members)
|
163
|
+
previous_modifier = nil
|
164
|
+
members.first.children.each do |member|
|
165
|
+
if member.send_type? && special_modifier?(member)
|
166
|
+
previous_modifier = member
|
167
|
+
elsif previous_modifier
|
168
|
+
yield member, previous_modifier.source_range
|
169
|
+
previous_modifier = nil
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
def special_modifier?(node)
|
175
|
+
node.access_modifier? && SPECIAL_MODIFIERS.include?(node.source)
|
176
|
+
end
|
177
|
+
|
178
|
+
def indentation_consistency_style
|
179
|
+
config.for_cop('Layout/IndentationConsistency')['EnforcedStyle']
|
180
|
+
end
|
181
|
+
|
165
182
|
def check_assignment(node, rhs)
|
166
183
|
# If there are method calls chained to the right hand side of the
|
167
184
|
# assignment, we let rhs be the receiver of those method calls before
|
@@ -170,7 +187,7 @@ module RuboCop
|
|
170
187
|
return unless rhs
|
171
188
|
|
172
189
|
end_config = config.for_cop('Lint/EndAlignment')
|
173
|
-
style = end_config['
|
190
|
+
style = end_config['EnforcedStyleAlignWith'] || 'keyword'
|
174
191
|
base = variable_alignment?(node.loc, rhs, style.to_sym) ? node : rhs
|
175
192
|
|
176
193
|
case rhs.type
|
@@ -183,14 +200,14 @@ module RuboCop
|
|
183
200
|
end
|
184
201
|
|
185
202
|
def check_if(node, body, else_clause, base_loc)
|
186
|
-
return if ternary?
|
203
|
+
return if node.ternary?
|
187
204
|
|
188
205
|
check_indentation(base_loc, body)
|
189
206
|
return unless else_clause
|
190
207
|
|
191
208
|
# If the else clause is an elsif, it will get its own on_if call so
|
192
209
|
# we don't need to process it here.
|
193
|
-
return if elsif?
|
210
|
+
return if else_clause.if_type? && else_clause.elsif?
|
194
211
|
|
195
212
|
check_indentation(node.loc.else, else_clause)
|
196
213
|
end
|
@@ -208,7 +225,7 @@ module RuboCop
|
|
208
225
|
def offense(body_node, indentation, style)
|
209
226
|
# This cop only auto-corrects the first statement in a def body, for
|
210
227
|
# example.
|
211
|
-
if body_node.
|
228
|
+
if body_node.begin_type? && !parentheses?(body_node)
|
212
229
|
body_node = body_node.children.first
|
213
230
|
end
|
214
231
|
|
@@ -223,11 +240,20 @@ module RuboCop
|
|
223
240
|
body_node
|
224
241
|
end
|
225
242
|
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
243
|
+
name = style == 'normal' ? '' : " #{style}"
|
244
|
+
message = message(configured_indentation_width, indentation, name)
|
245
|
+
|
246
|
+
add_offense(node, location: offending_range(body_node, indentation),
|
247
|
+
message: message)
|
248
|
+
end
|
249
|
+
|
250
|
+
def message(configured_indentation_width, indentation, name)
|
251
|
+
format(
|
252
|
+
MSG,
|
253
|
+
configured_indentation_width: configured_indentation_width,
|
254
|
+
indentation: indentation,
|
255
|
+
name: name
|
256
|
+
)
|
231
257
|
end
|
232
258
|
|
233
259
|
# Returns true if the given node is within another node that has
|
@@ -243,24 +269,29 @@ module RuboCop
|
|
243
269
|
end
|
244
270
|
|
245
271
|
def indentation_to_check?(base_loc, body_node)
|
246
|
-
return false
|
272
|
+
return false if skip_check?(base_loc, body_node)
|
273
|
+
|
274
|
+
if %i[rescue ensure].include?(body_node.type)
|
275
|
+
block_body, = *body_node
|
276
|
+
return unless block_body
|
277
|
+
end
|
278
|
+
|
279
|
+
true
|
280
|
+
end
|
281
|
+
|
282
|
+
def skip_check?(base_loc, body_node)
|
283
|
+
return true if ignored_line?(base_loc)
|
284
|
+
return true unless body_node
|
247
285
|
|
248
286
|
# Don't check if expression is on same line as "then" keyword, etc.
|
249
|
-
return
|
287
|
+
return true if body_node.loc.line == base_loc.line
|
250
288
|
|
251
|
-
return
|
289
|
+
return true if starts_with_access_modifier?(body_node)
|
252
290
|
|
253
291
|
# Don't check indentation if the line doesn't start with the body.
|
254
292
|
# For example, lines like "else do_something".
|
255
293
|
first_char_pos_on_line = body_node.source_range.source_line =~ /\S/
|
256
|
-
return
|
257
|
-
|
258
|
-
if [:rescue, :ensure].include?(body_node.type)
|
259
|
-
block_body, = *body_node
|
260
|
-
return unless block_body
|
261
|
-
end
|
262
|
-
|
263
|
-
true
|
294
|
+
return true unless body_node.loc.column == first_char_pos_on_line
|
264
295
|
end
|
265
296
|
|
266
297
|
def offending_range(body_node, indentation)
|
@@ -268,11 +299,14 @@ module RuboCop
|
|
268
299
|
begin_pos = expr.begin_pos
|
269
300
|
ind = expr.begin_pos - indentation
|
270
301
|
pos = indentation >= 0 ? ind..begin_pos : begin_pos..ind
|
271
|
-
|
302
|
+
range_between(pos.begin, pos.end)
|
272
303
|
end
|
273
304
|
|
274
305
|
def starts_with_access_modifier?(body_node)
|
275
|
-
|
306
|
+
return unless body_node.begin_type?
|
307
|
+
|
308
|
+
starting_node = body_node.children.first
|
309
|
+
starting_node.send_type? && starting_node.access_modifier?
|
276
310
|
end
|
277
311
|
|
278
312
|
def configured_indentation_width
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Layout
|
6
|
+
# This cops checks for indentation of the first non-blank non-comment
|
7
|
+
# line in a file.
|
8
|
+
class InitialIndentation < Cop
|
9
|
+
MSG = 'Indentation of first line in file detected.'.freeze
|
10
|
+
|
11
|
+
def investigate(_processed_source)
|
12
|
+
space_before(first_token) do |space|
|
13
|
+
add_offense(space, location: first_token.pos)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def autocorrect(range)
|
18
|
+
->(corrector) { corrector.remove(range) }
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def first_token
|
24
|
+
processed_source.tokens.find { |t| !t.text.start_with?('#') }
|
25
|
+
end
|
26
|
+
|
27
|
+
def space_before(token)
|
28
|
+
return unless token
|
29
|
+
return if token.column.zero?
|
30
|
+
|
31
|
+
space_range =
|
32
|
+
range_with_surrounding_space(range: token.pos,
|
33
|
+
side: :left,
|
34
|
+
newlines: false)
|
35
|
+
# If the file starts with a byte order mark (BOM), the column can be
|
36
|
+
# non-zero, but then we find out here if there's no space to the left
|
37
|
+
# of the first token.
|
38
|
+
return if space_range == token.pos
|
39
|
+
|
40
|
+
yield range_between(space_range.begin_pos, token.begin_pos)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Layout
|
6
|
+
# This cop checks whether comments have a leading space after the
|
7
|
+
# `#` denoting the start of the comment. The leading space is not
|
8
|
+
# required for some RDoc special syntax, like `#++`, `#--`,
|
9
|
+
# `#:nodoc`, `=begin`- and `=end` comments, "shebang" directives,
|
10
|
+
# or rackup options.
|
11
|
+
#
|
12
|
+
# @example
|
13
|
+
#
|
14
|
+
# # bad
|
15
|
+
# #Some comment
|
16
|
+
#
|
17
|
+
# # good
|
18
|
+
# # Some comment
|
19
|
+
class LeadingCommentSpace < Cop
|
20
|
+
MSG = 'Missing space after `#`.'.freeze
|
21
|
+
|
22
|
+
def investigate(processed_source)
|
23
|
+
processed_source.comments.each do |comment|
|
24
|
+
next unless comment.text =~ /\A#+[^#\s=:+-]/
|
25
|
+
next if comment.loc.line == 1 && allowed_on_first_line?(comment)
|
26
|
+
|
27
|
+
add_offense(comment)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def autocorrect(comment)
|
32
|
+
expr = comment.loc.expression
|
33
|
+
hash_mark = range_between(expr.begin_pos, expr.begin_pos + 1)
|
34
|
+
|
35
|
+
->(corrector) { corrector.insert_after(hash_mark, ' ') }
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def allowed_on_first_line?(comment)
|
41
|
+
shebang?(comment) || rackup_config_file? && rackup_options?(comment)
|
42
|
+
end
|
43
|
+
|
44
|
+
def shebang?(comment)
|
45
|
+
comment.text.start_with?('#!')
|
46
|
+
end
|
47
|
+
|
48
|
+
def rackup_options?(comment)
|
49
|
+
comment.text.start_with?('#\\')
|
50
|
+
end
|
51
|
+
|
52
|
+
def rackup_config_file?
|
53
|
+
File.basename(processed_source.buffer.name).eql?('config.ru')
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -1,9 +1,8 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
module RuboCop
|
5
4
|
module Cop
|
6
|
-
module
|
5
|
+
module Layout
|
7
6
|
# This cop checks that the closing brace in an array literal is either
|
8
7
|
# on the same line as the last array element, or a new line.
|
9
8
|
#
|
@@ -27,35 +26,68 @@ module RuboCop
|
|
27
26
|
# The closing brace of a multi-line array literal must be on the same
|
28
27
|
# line as the last element of the array.
|
29
28
|
#
|
30
|
-
# @example
|
29
|
+
# @example EnforcedStyle: symmetrical (default)
|
30
|
+
# # bad
|
31
|
+
# [ :a,
|
32
|
+
# :b
|
33
|
+
# ]
|
31
34
|
#
|
32
|
-
# #
|
33
|
-
#
|
34
|
-
#
|
35
|
+
# # bad
|
36
|
+
# [
|
37
|
+
# :a,
|
38
|
+
# :b ]
|
39
|
+
#
|
40
|
+
# # good
|
35
41
|
# [ :a,
|
42
|
+
# :b ]
|
43
|
+
#
|
44
|
+
# # good
|
45
|
+
# [
|
46
|
+
# :a,
|
36
47
|
# :b
|
37
48
|
# ]
|
38
49
|
#
|
39
|
-
#
|
40
|
-
# #
|
41
|
-
# # same_line: good
|
50
|
+
# @example EnforcedStyle: new_line
|
51
|
+
# # bad
|
42
52
|
# [
|
43
53
|
# :a,
|
44
54
|
# :b ]
|
45
55
|
#
|
46
|
-
# #
|
47
|
-
# # new_line: bad
|
48
|
-
# # same_line: good
|
56
|
+
# # bad
|
49
57
|
# [ :a,
|
50
58
|
# :b ]
|
51
59
|
#
|
52
|
-
# #
|
53
|
-
#
|
54
|
-
#
|
60
|
+
# # good
|
61
|
+
# [ :a,
|
62
|
+
# :b
|
63
|
+
# ]
|
64
|
+
#
|
65
|
+
# # good
|
55
66
|
# [
|
56
67
|
# :a,
|
57
68
|
# :b
|
58
69
|
# ]
|
70
|
+
#
|
71
|
+
# @example EnforcedStyle: same_line
|
72
|
+
# # bad
|
73
|
+
# [ :a,
|
74
|
+
# :b
|
75
|
+
# ]
|
76
|
+
#
|
77
|
+
# # bad
|
78
|
+
# [
|
79
|
+
# :a,
|
80
|
+
# :b
|
81
|
+
# ]
|
82
|
+
#
|
83
|
+
# # good
|
84
|
+
# [
|
85
|
+
# :a,
|
86
|
+
# :b ]
|
87
|
+
#
|
88
|
+
# # good
|
89
|
+
# [ :a,
|
90
|
+
# :b ]
|
59
91
|
class MultilineArrayBraceLayout < Cop
|
60
92
|
include MultilineLiteralBraceLayout
|
61
93
|
|
@@ -71,11 +103,15 @@ module RuboCop
|
|
71
103
|
'after the last array element.'.freeze
|
72
104
|
|
73
105
|
ALWAYS_SAME_LINE_MESSAGE = 'Closing array brace must be on the same ' \
|
74
|
-
'line as
|
106
|
+
'line as the last array element.'.freeze
|
75
107
|
|
76
108
|
def on_array(node)
|
77
109
|
check_brace_layout(node)
|
78
110
|
end
|
111
|
+
|
112
|
+
def autocorrect(node)
|
113
|
+
MultilineLiteralBraceCorrector.correct(processed_source, node)
|
114
|
+
end
|
79
115
|
end
|
80
116
|
end
|
81
117
|
end
|