rubocop 0.87.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 +7 -0
- data/LICENSE.txt +20 -0
- data/README.md +225 -0
- data/assets/logo.png +0 -0
- data/assets/output.html.erb +261 -0
- data/bin/console +10 -0
- data/bin/setup +7 -0
- data/config/default.yml +4203 -0
- data/exe/rubocop +17 -0
- data/lib/rubocop.rb +598 -0
- data/lib/rubocop/ast_aliases.rb +8 -0
- data/lib/rubocop/cached_data.rb +58 -0
- data/lib/rubocop/cli.rb +131 -0
- data/lib/rubocop/cli/command.rb +21 -0
- 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/environment.rb +21 -0
- data/lib/rubocop/comment_config.rb +206 -0
- data/lib/rubocop/config.rb +281 -0
- data/lib/rubocop/config_loader.rb +236 -0
- data/lib/rubocop/config_loader_resolver.rb +234 -0
- data/lib/rubocop/config_obsoletion.rb +277 -0
- data/lib/rubocop/config_store.rb +58 -0
- data/lib/rubocop/config_validator.rb +223 -0
- data/lib/rubocop/cop/autocorrect_logic.rb +95 -0
- data/lib/rubocop/cop/badge.rb +73 -0
- data/lib/rubocop/cop/base.rb +399 -0
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +73 -0
- data/lib/rubocop/cop/bundler/gem_comment.rb +133 -0
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +59 -0
- data/lib/rubocop/cop/bundler/ordered_gems.rb +73 -0
- data/lib/rubocop/cop/commissioner.rb +122 -0
- data/lib/rubocop/cop/cop.rb +160 -0
- data/lib/rubocop/cop/corrector.rb +119 -0
- 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 +42 -0
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +104 -0
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +104 -0
- 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.rb +223 -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/ignored_node.rb +36 -0
- data/lib/rubocop/cop/internal_affairs.rb +9 -0
- 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 +41 -0
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +54 -0
- data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +48 -0
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +73 -0
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +52 -0
- data/lib/rubocop/cop/layout/access_modifier_indentation.rb +98 -0
- data/lib/rubocop/cop/layout/argument_alignment.rb +93 -0
- data/lib/rubocop/cop/layout/array_alignment.rb +82 -0
- data/lib/rubocop/cop/layout/assignment_indentation.rb +55 -0
- data/lib/rubocop/cop/layout/block_alignment.rb +244 -0
- data/lib/rubocop/cop/layout/block_end_newline.rb +64 -0
- data/lib/rubocop/cop/layout/case_indentation.rb +160 -0
- data/lib/rubocop/cop/layout/class_structure.rb +308 -0
- data/lib/rubocop/cop/layout/closing_heredoc_indentation.rb +126 -0
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +203 -0
- data/lib/rubocop/cop/layout/comment_indentation.rb +141 -0
- data/lib/rubocop/cop/layout/condition_position.rb +66 -0
- data/lib/rubocop/cop/layout/def_end_alignment.rb +74 -0
- data/lib/rubocop/cop/layout/dot_position.rb +105 -0
- data/lib/rubocop/cop/layout/else_alignment.rb +142 -0
- 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 +64 -0
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +152 -0
- data/lib/rubocop/cop/layout/empty_lines.rb +76 -0
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +211 -0
- 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 +45 -0
- data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +41 -0
- data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +88 -0
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +136 -0
- data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +45 -0
- data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +62 -0
- data/lib/rubocop/cop/layout/end_alignment.rb +189 -0
- data/lib/rubocop/cop/layout/end_of_line.rb +92 -0
- data/lib/rubocop/cop/layout/extra_spacing.rb +201 -0
- 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 +45 -0
- data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +184 -0
- data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +37 -0
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +53 -0
- data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +46 -0
- data/lib/rubocop/cop/layout/first_parameter_indentation.rb +100 -0
- 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 +202 -0
- data/lib/rubocop/cop/layout/indentation_style.rb +117 -0
- data/lib/rubocop/cop/layout/indentation_width.rb +362 -0
- data/lib/rubocop/cop/layout/initial_indentation.rb +59 -0
- data/lib/rubocop/cop/layout/leading_comment_space.rb +119 -0
- 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 +118 -0
- data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +39 -0
- data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +95 -0
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +154 -0
- data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +118 -0
- 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 +134 -0
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +220 -0
- data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +131 -0
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +123 -0
- data/lib/rubocop/cop/layout/parameter_alignment.rb +118 -0
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +191 -0
- data/lib/rubocop/cop/layout/space_after_colon.rb +47 -0
- data/lib/rubocop/cop/layout/space_after_comma.rb +35 -0
- data/lib/rubocop/cop/layout/space_after_method_name.rb +42 -0
- data/lib/rubocop/cop/layout/space_after_not.rb +40 -0
- data/lib/rubocop/cop/layout/space_after_semicolon.rb +32 -0
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +163 -0
- data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +92 -0
- data/lib/rubocop/cop/layout/space_around_keyword.rb +244 -0
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +131 -0
- data/lib/rubocop/cop/layout/space_around_operators.rb +242 -0
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +150 -0
- data/lib/rubocop/cop/layout/space_before_comma.rb +31 -0
- data/lib/rubocop/cop/layout/space_before_comment.rb +33 -0
- data/lib/rubocop/cop/layout/space_before_first_arg.rb +75 -0
- data/lib/rubocop/cop/layout/space_before_semicolon.rb +27 -0
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +82 -0
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +229 -0
- data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +53 -0
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +248 -0
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +200 -0
- data/lib/rubocop/cop/layout/space_inside_parens.rb +113 -0
- data/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb +65 -0
- data/lib/rubocop/cop/layout/space_inside_range_literal.rb +63 -0
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +148 -0
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +65 -0
- data/lib/rubocop/cop/layout/trailing_empty_lines.rb +113 -0
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +77 -0
- 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 +62 -0
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +96 -0
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +57 -0
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +97 -0
- data/lib/rubocop/cop/lint/big_decimal_new.rb +44 -0
- data/lib/rubocop/cop/lint/boolean_symbol.rb +50 -0
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +72 -0
- data/lib/rubocop/cop/lint/constant_resolution.rb +89 -0
- data/lib/rubocop/cop/lint/debugger.rb +77 -0
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +111 -0
- 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 +53 -0
- data/lib/rubocop/cop/lint/duplicate_hash_key.rb +38 -0
- data/lib/rubocop/cop/lint/duplicate_methods.rb +235 -0
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +42 -0
- data/lib/rubocop/cop/lint/else_layout.rb +66 -0
- data/lib/rubocop/cop/lint/empty_ensure.rb +60 -0
- data/lib/rubocop/cop/lint/empty_expression.rb +42 -0
- data/lib/rubocop/cop/lint/empty_interpolation.rb +36 -0
- data/lib/rubocop/cop/lint/empty_when.rb +61 -0
- data/lib/rubocop/cop/lint/ensure_return.rb +63 -0
- 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 +35 -0
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +195 -0
- data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +156 -0
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +101 -0
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +127 -0
- data/lib/rubocop/cop/lint/inherit_exception.rb +100 -0
- data/lib/rubocop/cop/lint/interpolation_check.rb +53 -0
- data/lib/rubocop/cop/lint/literal_as_condition.rb +135 -0
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +98 -0
- data/lib/rubocop/cop/lint/loop.rb +65 -0
- 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_comparison.rb +48 -0
- data/lib/rubocop/cop/lint/nested_method_definition.rb +104 -0
- data/lib/rubocop/cop/lint/nested_percent_literal.rb +51 -0
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +50 -0
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +89 -0
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +83 -0
- 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 +91 -0
- data/lib/rubocop/cop/lint/percent_string_array.rb +71 -0
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +69 -0
- data/lib/rubocop/cop/lint/raise_exception.rb +83 -0
- data/lib/rubocop/cop/lint/rand_one.rb +45 -0
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +264 -0
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +119 -0
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +50 -0
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +172 -0
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +59 -0
- data/lib/rubocop/cop/lint/redundant_with_index.rb +82 -0
- data/lib/rubocop/cop/lint/redundant_with_object.rb +83 -0
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +35 -0
- data/lib/rubocop/cop/lint/require_parentheses.rb +66 -0
- data/lib/rubocop/cop/lint/rescue_exception.rb +46 -0
- data/lib/rubocop/cop/lint/rescue_type.rb +94 -0
- data/lib/rubocop/cop/lint/return_in_void_context.rb +74 -0
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +65 -0
- 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 +70 -0
- 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 +178 -0
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +53 -0
- 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 +42 -0
- data/lib/rubocop/cop/lint/to_json.rb +41 -0
- data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +82 -0
- data/lib/rubocop/cop/lint/unified_integer.rb +43 -0
- data/lib/rubocop/cop/lint/unreachable_code.rb +99 -0
- data/lib/rubocop/cop/lint/unused_block_argument.rb +165 -0
- data/lib/rubocop/cop/lint/unused_method_argument.rb +112 -0
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +76 -0
- data/lib/rubocop/cop/lint/uri_regexp.rb +73 -0
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +284 -0
- data/lib/rubocop/cop/lint/useless_assignment.rb +130 -0
- data/lib/rubocop/cop/lint/useless_comparison.rb +28 -0
- data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +54 -0
- data/lib/rubocop/cop/lint/useless_setter_call.rb +168 -0
- data/lib/rubocop/cop/lint/void.rb +151 -0
- data/lib/rubocop/cop/message_annotator.rb +129 -0
- data/lib/rubocop/cop/metrics/abc_size.rb +24 -0
- data/lib/rubocop/cop/metrics/block_length.rb +72 -0
- data/lib/rubocop/cop/metrics/block_nesting.rb +65 -0
- data/lib/rubocop/cop/metrics/class_length.rb +59 -0
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +64 -0
- data/lib/rubocop/cop/metrics/method_length.rb +59 -0
- data/lib/rubocop/cop/metrics/module_length.rb +59 -0
- data/lib/rubocop/cop/metrics/parameter_lists.rb +54 -0
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +61 -0
- 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 +37 -0
- data/lib/rubocop/cop/mixin/array_min_size.rb +57 -0
- data/lib/rubocop/cop/mixin/array_syntax.rb +17 -0
- data/lib/rubocop/cop/mixin/auto_corrector.rb +12 -0
- data/lib/rubocop/cop/mixin/check_assignment.rb +44 -0
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +184 -0
- data/lib/rubocop/cop/mixin/code_length.rb +42 -0
- data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +100 -0
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +45 -0
- data/lib/rubocop/cop/mixin/configurable_max.rb +23 -0
- data/lib/rubocop/cop/mixin/configurable_naming.rb +16 -0
- data/lib/rubocop/cop/mixin/configurable_numbering.rb +17 -0
- data/lib/rubocop/cop/mixin/def_node.rb +33 -0
- data/lib/rubocop/cop/mixin/documentation_comment.rb +52 -0
- data/lib/rubocop/cop/mixin/duplication.rb +46 -0
- data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +172 -0
- data/lib/rubocop/cop/mixin/empty_parameter.rb +24 -0
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +72 -0
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +32 -0
- data/lib/rubocop/cop/mixin/first_element_line_break.rb +46 -0
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +62 -0
- data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +147 -0
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +178 -0
- data/lib/rubocop/cop/mixin/heredoc.rb +32 -0
- data/lib/rubocop/cop/mixin/ignored_methods.rb +19 -0
- data/lib/rubocop/cop/mixin/ignored_pattern.rb +29 -0
- data/lib/rubocop/cop/mixin/integer_node.rb +14 -0
- 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 +26 -0
- data/lib/rubocop/cop/mixin/method_complexity.rb +62 -0
- data/lib/rubocop/cop/mixin/method_preference.rb +31 -0
- data/lib/rubocop/cop/mixin/min_body_length.rb +21 -0
- data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +86 -0
- data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +33 -0
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +255 -0
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +141 -0
- data/lib/rubocop/cop/mixin/negative_conditional.rb +32 -0
- data/lib/rubocop/cop/mixin/nil_methods.rb +23 -0
- data/lib/rubocop/cop/mixin/on_normal_if_unless.rb +14 -0
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +61 -0
- data/lib/rubocop/cop/mixin/parentheses.rb +16 -0
- data/lib/rubocop/cop/mixin/parser_diagnostic.rb +37 -0
- data/lib/rubocop/cop/mixin/percent_array.rb +52 -0
- data/lib/rubocop/cop/mixin/percent_literal.rb +38 -0
- data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +181 -0
- 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 +22 -0
- data/lib/rubocop/cop/mixin/safe_assignment.rb +23 -0
- data/lib/rubocop/cop/mixin/space_after_punctuation.rb +55 -0
- data/lib/rubocop/cop/mixin/space_before_punctuation.rb +49 -0
- data/lib/rubocop/cop/mixin/statement_modifier.rb +56 -0
- data/lib/rubocop/cop/mixin/string_help.rb +35 -0
- data/lib/rubocop/cop/mixin/string_literals_help.rb +23 -0
- data/lib/rubocop/cop/mixin/surrounding_space.rb +151 -0
- data/lib/rubocop/cop/mixin/target_ruby_version.rb +20 -0
- data/lib/rubocop/cop/mixin/too_many_lines.rb +25 -0
- data/lib/rubocop/cop/mixin/trailing_body.rb +26 -0
- data/lib/rubocop/cop/mixin/trailing_comma.rb +212 -0
- data/lib/rubocop/cop/mixin/uncommunicative_name.rb +113 -0
- data/lib/rubocop/cop/mixin/unused_argument.rb +33 -0
- data/lib/rubocop/cop/mixin/visibility_help.rb +50 -0
- data/lib/rubocop/cop/naming/accessor_method_name.rb +55 -0
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +95 -0
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +43 -0
- data/lib/rubocop/cop/naming/block_parameter_name.rb +49 -0
- data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +43 -0
- data/lib/rubocop/cop/naming/constant_name.rb +82 -0
- data/lib/rubocop/cop/naming/file_name.rb +223 -0
- data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +62 -0
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +55 -0
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +171 -0
- data/lib/rubocop/cop/naming/method_name.rb +79 -0
- data/lib/rubocop/cop/naming/method_parameter_name.rb +58 -0
- data/lib/rubocop/cop/naming/predicate_name.rb +106 -0
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +112 -0
- data/lib/rubocop/cop/naming/variable_name.rb +52 -0
- data/lib/rubocop/cop/naming/variable_number.rb +61 -0
- data/lib/rubocop/cop/offense.rb +230 -0
- data/lib/rubocop/cop/registry.rb +276 -0
- data/lib/rubocop/cop/security/eval.rb +31 -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/open.rb +71 -0
- data/lib/rubocop/cop/security/yaml_load.rb +37 -0
- data/lib/rubocop/cop/severity.rb +75 -0
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +132 -0
- data/lib/rubocop/cop/style/accessor_grouping.rb +140 -0
- data/lib/rubocop/cop/style/alias.rb +147 -0
- data/lib/rubocop/cop/style/and_or.rb +145 -0
- data/lib/rubocop/cop/style/array_join.rb +39 -0
- data/lib/rubocop/cop/style/ascii_comments.rb +61 -0
- data/lib/rubocop/cop/style/attr.rb +68 -0
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +51 -0
- data/lib/rubocop/cop/style/bare_percent_literals.rb +78 -0
- data/lib/rubocop/cop/style/begin_block.rb +22 -0
- data/lib/rubocop/cop/style/bisected_attr_accessor.rb +145 -0
- data/lib/rubocop/cop/style/block_comments.rb +70 -0
- data/lib/rubocop/cop/style/block_delimiters.rb +382 -0
- data/lib/rubocop/cop/style/case_equality.rb +53 -0
- data/lib/rubocop/cop/style/character_literal.rb +53 -0
- data/lib/rubocop/cop/style/class_and_module_children.rb +151 -0
- data/lib/rubocop/cop/style/class_check.rb +59 -0
- data/lib/rubocop/cop/style/class_methods.rb +60 -0
- data/lib/rubocop/cop/style/class_vars.rb +69 -0
- data/lib/rubocop/cop/style/collection_methods.rb +79 -0
- data/lib/rubocop/cop/style/colon_method_call.rb +48 -0
- data/lib/rubocop/cop/style/colon_method_definition.rb +37 -0
- data/lib/rubocop/cop/style/command_literal.rb +187 -0
- data/lib/rubocop/cop/style/comment_annotation.rb +97 -0
- data/lib/rubocop/cop/style/commented_keyword.rb +73 -0
- data/lib/rubocop/cop/style/conditional_assignment.rb +666 -0
- data/lib/rubocop/cop/style/constant_visibility.rb +77 -0
- data/lib/rubocop/cop/style/copyright.rb +99 -0
- data/lib/rubocop/cop/style/date_time.rb +77 -0
- data/lib/rubocop/cop/style/def_with_parentheses.rb +57 -0
- data/lib/rubocop/cop/style/dir.rb +48 -0
- data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +49 -0
- data/lib/rubocop/cop/style/documentation.rb +135 -0
- data/lib/rubocop/cop/style/documentation_method.rb +125 -0
- data/lib/rubocop/cop/style/double_cop_disable_directive.rb +55 -0
- data/lib/rubocop/cop/style/double_negation.rb +72 -0
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +58 -0
- data/lib/rubocop/cop/style/each_with_object.rb +110 -0
- data/lib/rubocop/cop/style/empty_block_parameter.rb +48 -0
- data/lib/rubocop/cop/style/empty_case_condition.rb +109 -0
- data/lib/rubocop/cop/style/empty_else.rb +175 -0
- data/lib/rubocop/cop/style/empty_lambda_parameter.rb +45 -0
- data/lib/rubocop/cop/style/empty_literal.rb +121 -0
- data/lib/rubocop/cop/style/empty_method.rb +111 -0
- data/lib/rubocop/cop/style/encoding.rb +56 -0
- data/lib/rubocop/cop/style/end_block.rb +31 -0
- data/lib/rubocop/cop/style/eval_with_location.rb +148 -0
- data/lib/rubocop/cop/style/even_odd.rb +58 -0
- 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 +88 -0
- data/lib/rubocop/cop/style/format_string.rb +127 -0
- data/lib/rubocop/cop/style/format_string_token.rb +120 -0
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +234 -0
- data/lib/rubocop/cop/style/global_vars.rb +80 -0
- data/lib/rubocop/cop/style/guard_clause.rb +145 -0
- data/lib/rubocop/cop/style/hash_each_methods.rb +89 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +221 -0
- 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 +130 -0
- data/lib/rubocop/cop/style/if_inside_else.rb +87 -0
- data/lib/rubocop/cop/style/if_unless_modifier.rb +189 -0
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +51 -0
- data/lib/rubocop/cop/style/if_with_semicolon.rb +46 -0
- data/lib/rubocop/cop/style/implicit_runtime_error.rb +32 -0
- data/lib/rubocop/cop/style/infinite_loop.rb +128 -0
- data/lib/rubocop/cop/style/inline_comment.rb +34 -0
- data/lib/rubocop/cop/style/inverse_methods.rb +197 -0
- data/lib/rubocop/cop/style/ip_addresses.rb +76 -0
- data/lib/rubocop/cop/style/lambda.rb +132 -0
- data/lib/rubocop/cop/style/lambda_call.rb +73 -0
- data/lib/rubocop/cop/style/line_end_concatenation.rb +125 -0
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +190 -0
- 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_without_args_parentheses.rb +75 -0
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +46 -0
- data/lib/rubocop/cop/style/method_def_parentheses.rb +166 -0
- data/lib/rubocop/cop/style/method_missing_super.rb +34 -0
- data/lib/rubocop/cop/style/min_max.rb +68 -0
- data/lib/rubocop/cop/style/missing_else.rb +180 -0
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +46 -0
- data/lib/rubocop/cop/style/mixin_grouping.rb +148 -0
- data/lib/rubocop/cop/style/mixin_usage.rb +90 -0
- data/lib/rubocop/cop/style/module_function.rb +150 -0
- data/lib/rubocop/cop/style/multiline_block_chain.rb +49 -0
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +67 -0
- data/lib/rubocop/cop/style/multiline_if_then.rb +50 -0
- data/lib/rubocop/cop/style/multiline_memoization.rb +94 -0
- data/lib/rubocop/cop/style/multiline_method_signature.rb +61 -0
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +49 -0
- data/lib/rubocop/cop/style/multiline_when_then.rb +74 -0
- data/lib/rubocop/cop/style/multiple_comparison.rb +92 -0
- data/lib/rubocop/cop/style/mutable_constant.rb +172 -0
- data/lib/rubocop/cop/style/negated_if.rb +99 -0
- data/lib/rubocop/cop/style/negated_unless.rb +89 -0
- data/lib/rubocop/cop/style/negated_while.rb +48 -0
- data/lib/rubocop/cop/style/nested_modifier.rb +107 -0
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +64 -0
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +59 -0
- data/lib/rubocop/cop/style/next.rb +244 -0
- data/lib/rubocop/cop/style/nil_comparison.rb +75 -0
- data/lib/rubocop/cop/style/non_nil_check.rb +136 -0
- data/lib/rubocop/cop/style/not.rb +82 -0
- data/lib/rubocop/cop/style/numeric_literal_prefix.rb +124 -0
- data/lib/rubocop/cop/style/numeric_literals.rb +114 -0
- data/lib/rubocop/cop/style/numeric_predicate.rb +138 -0
- data/lib/rubocop/cop/style/one_line_conditional.rb +98 -0
- data/lib/rubocop/cop/style/option_hash.rb +55 -0
- data/lib/rubocop/cop/style/optional_arguments.rb +58 -0
- data/lib/rubocop/cop/style/or_assignment.rb +96 -0
- data/lib/rubocop/cop/style/parallel_assignment.rb +287 -0
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +117 -0
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +127 -0
- data/lib/rubocop/cop/style/percent_q_literals.rb +73 -0
- data/lib/rubocop/cop/style/perl_backrefs.rb +38 -0
- data/lib/rubocop/cop/style/preferred_hash_methods.rb +75 -0
- data/lib/rubocop/cop/style/proc.rb +34 -0
- data/lib/rubocop/cop/style/raise_args.rb +145 -0
- 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 +91 -0
- data/lib/rubocop/cop/style/redundant_capital_w.rb +51 -0
- data/lib/rubocop/cop/style/redundant_condition.rb +124 -0
- data/lib/rubocop/cop/style/redundant_conditional.rb +98 -0
- data/lib/rubocop/cop/style/redundant_exception.rb +64 -0
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +122 -0
- data/lib/rubocop/cop/style/redundant_freeze.rb +67 -0
- data/lib/rubocop/cop/style/redundant_interpolation.rb +98 -0
- data/lib/rubocop/cop/style/redundant_parentheses.rb +233 -0
- data/lib/rubocop/cop/style/redundant_percent_q.rb +112 -0
- 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 +169 -0
- data/lib/rubocop/cop/style/redundant_self.rb +168 -0
- data/lib/rubocop/cop/style/redundant_sort.rb +165 -0
- data/lib/rubocop/cop/style/redundant_sort_by.rb +50 -0
- data/lib/rubocop/cop/style/regexp_literal.rb +228 -0
- data/lib/rubocop/cop/style/rescue_modifier.rb +73 -0
- data/lib/rubocop/cop/style/rescue_standard_error.rb +124 -0
- data/lib/rubocop/cop/style/return_nil.rb +89 -0
- data/lib/rubocop/cop/style/safe_navigation.rb +271 -0
- data/lib/rubocop/cop/style/sample.rb +144 -0
- data/lib/rubocop/cop/style/self_assignment.rb +97 -0
- data/lib/rubocop/cop/style/semicolon.rb +101 -0
- data/lib/rubocop/cop/style/send.rb +31 -0
- data/lib/rubocop/cop/style/signal_exception.rb +211 -0
- data/lib/rubocop/cop/style/single_line_block_params.rb +95 -0
- data/lib/rubocop/cop/style/single_line_methods.rb +83 -0
- data/lib/rubocop/cop/style/slicing_with_range.rb +39 -0
- data/lib/rubocop/cop/style/special_global_vars.rb +207 -0
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +83 -0
- data/lib/rubocop/cop/style/stderr_puts.rb +61 -0
- data/lib/rubocop/cop/style/string_hash_keys.rb +50 -0
- data/lib/rubocop/cop/style/string_literals.rb +129 -0
- data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +49 -0
- data/lib/rubocop/cop/style/string_methods.rb +46 -0
- data/lib/rubocop/cop/style/strip.rb +46 -0
- data/lib/rubocop/cop/style/struct_inheritance.rb +60 -0
- data/lib/rubocop/cop/style/symbol_array.rb +119 -0
- data/lib/rubocop/cop/style/symbol_literal.rb +32 -0
- data/lib/rubocop/cop/style/symbol_proc.rb +110 -0
- data/lib/rubocop/cop/style/ternary_parentheses.rb +220 -0
- 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 +109 -0
- 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 +165 -0
- data/lib/rubocop/cop/style/trivial_accessors.rb +192 -0
- data/lib/rubocop/cop/style/unless_else.rb +55 -0
- data/lib/rubocop/cop/style/unpack_first.rb +61 -0
- data/lib/rubocop/cop/style/variable_interpolation.rb +48 -0
- data/lib/rubocop/cop/style/when_then.rb +37 -0
- data/lib/rubocop/cop/style/while_until_do.rb +59 -0
- data/lib/rubocop/cop/style/while_until_modifier.rb +61 -0
- data/lib/rubocop/cop/style/word_array.rb +102 -0
- data/lib/rubocop/cop/style/yoda_condition.rb +173 -0
- data/lib/rubocop/cop/style/zero_length_predicate.rb +117 -0
- data/lib/rubocop/cop/team.rb +256 -0
- data/lib/rubocop/cop/util.rb +151 -0
- data/lib/rubocop/cop/utils/format_string.rb +137 -0
- data/lib/rubocop/cop/variable_force.rb +463 -0
- data/lib/rubocop/cop/variable_force/assignment.rb +97 -0
- data/lib/rubocop/cop/variable_force/branch.rb +320 -0
- data/lib/rubocop/cop/variable_force/branchable.rb +23 -0
- data/lib/rubocop/cop/variable_force/reference.rb +49 -0
- data/lib/rubocop/cop/variable_force/scope.rb +110 -0
- data/lib/rubocop/cop/variable_force/variable.rb +114 -0
- data/lib/rubocop/cop/variable_force/variable_table.rb +129 -0
- data/lib/rubocop/core_ext/string.rb +23 -0
- data/lib/rubocop/error.rb +34 -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 +119 -0
- data/lib/rubocop/formatter/clang_style_formatter.rb +57 -0
- data/lib/rubocop/formatter/colorizable.rb +41 -0
- data/lib/rubocop/formatter/disabled_config_formatter.rb +216 -0
- data/lib/rubocop/formatter/emacs_style_formatter.rb +37 -0
- data/lib/rubocop/formatter/file_list_formatter.rb +20 -0
- data/lib/rubocop/formatter/formatter_set.rb +104 -0
- data/lib/rubocop/formatter/fuubar_style_formatter.rb +80 -0
- data/lib/rubocop/formatter/html_formatter.rb +141 -0
- data/lib/rubocop/formatter/json_formatter.rb +81 -0
- data/lib/rubocop/formatter/junit_formatter.rb +84 -0
- data/lib/rubocop/formatter/offense_count_formatter.rb +74 -0
- data/lib/rubocop/formatter/pacman_formatter.rb +80 -0
- data/lib/rubocop/formatter/progress_formatter.rb +63 -0
- data/lib/rubocop/formatter/quiet_formatter.rb +13 -0
- data/lib/rubocop/formatter/simple_text_formatter.rb +138 -0
- data/lib/rubocop/formatter/tap_formatter.rb +82 -0
- data/lib/rubocop/formatter/text_util.rb +20 -0
- data/lib/rubocop/formatter/worst_offenders_formatter.rb +62 -0
- data/lib/rubocop/magic_comment.rb +214 -0
- data/lib/rubocop/name_similarity.rb +28 -0
- data/lib/rubocop/options.rb +488 -0
- data/lib/rubocop/path_util.rb +85 -0
- data/lib/rubocop/platform.rb +11 -0
- data/lib/rubocop/rake_task.rb +77 -0
- data/lib/rubocop/remote_config.rb +104 -0
- data/lib/rubocop/result_cache.rb +205 -0
- data/lib/rubocop/rspec/cop_helper.rb +71 -0
- data/lib/rubocop/rspec/expect_offense.rb +288 -0
- data/lib/rubocop/rspec/host_environment_simulation_helper.rb +28 -0
- data/lib/rubocop/rspec/shared_contexts.rb +129 -0
- data/lib/rubocop/rspec/support.rb +13 -0
- data/lib/rubocop/runner.rb +388 -0
- data/lib/rubocop/string_interpreter.rb +57 -0
- data/lib/rubocop/target_finder.rb +196 -0
- data/lib/rubocop/target_ruby.rb +154 -0
- data/lib/rubocop/version.rb +23 -0
- data/lib/rubocop/warning.rb +11 -0
- data/lib/rubocop/yaml_duplication_checker.rb +39 -0
- metadata +795 -0
@@ -0,0 +1,202 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Layout
|
6
|
+
# This cop checks for inconsistent indentation.
|
7
|
+
#
|
8
|
+
# The difference between `indented_internal_methods` and `normal` is
|
9
|
+
# that the `indented_internal_methods` style prescribes that in
|
10
|
+
# classes and modules the `protected` and `private` modifier keywords
|
11
|
+
# shall be indented the same as public methods and that protected and
|
12
|
+
# private members shall be indented one step more than the modifiers.
|
13
|
+
# Other than that, both styles mean that entities on the same logical
|
14
|
+
# depth shall have the same indentation.
|
15
|
+
#
|
16
|
+
# @example EnforcedStyle: normal (default)
|
17
|
+
# # bad
|
18
|
+
# class A
|
19
|
+
# def test
|
20
|
+
# puts 'hello'
|
21
|
+
# puts 'world'
|
22
|
+
# end
|
23
|
+
# end
|
24
|
+
#
|
25
|
+
# # bad
|
26
|
+
# class A
|
27
|
+
# def test
|
28
|
+
# puts 'hello'
|
29
|
+
# puts 'world'
|
30
|
+
# end
|
31
|
+
#
|
32
|
+
# protected
|
33
|
+
#
|
34
|
+
# def foo
|
35
|
+
# end
|
36
|
+
#
|
37
|
+
# private
|
38
|
+
#
|
39
|
+
# def bar
|
40
|
+
# end
|
41
|
+
# end
|
42
|
+
#
|
43
|
+
# # good
|
44
|
+
# class A
|
45
|
+
# def test
|
46
|
+
# puts 'hello'
|
47
|
+
# puts 'world'
|
48
|
+
# end
|
49
|
+
# end
|
50
|
+
#
|
51
|
+
# # good
|
52
|
+
# class A
|
53
|
+
# def test
|
54
|
+
# puts 'hello'
|
55
|
+
# puts 'world'
|
56
|
+
# end
|
57
|
+
#
|
58
|
+
# protected
|
59
|
+
#
|
60
|
+
# def foo
|
61
|
+
# end
|
62
|
+
#
|
63
|
+
# private
|
64
|
+
#
|
65
|
+
# def bar
|
66
|
+
# end
|
67
|
+
# end
|
68
|
+
#
|
69
|
+
# @example EnforcedStyle: indented_internal_methods
|
70
|
+
# # bad
|
71
|
+
# class A
|
72
|
+
# def test
|
73
|
+
# puts 'hello'
|
74
|
+
# puts 'world'
|
75
|
+
# end
|
76
|
+
# end
|
77
|
+
#
|
78
|
+
# # bad
|
79
|
+
# class A
|
80
|
+
# def test
|
81
|
+
# puts 'hello'
|
82
|
+
# puts 'world'
|
83
|
+
# end
|
84
|
+
#
|
85
|
+
# protected
|
86
|
+
#
|
87
|
+
# def foo
|
88
|
+
# end
|
89
|
+
#
|
90
|
+
# private
|
91
|
+
#
|
92
|
+
# def bar
|
93
|
+
# end
|
94
|
+
# end
|
95
|
+
#
|
96
|
+
# # good
|
97
|
+
# class A
|
98
|
+
# def test
|
99
|
+
# puts 'hello'
|
100
|
+
# puts 'world'
|
101
|
+
# end
|
102
|
+
# end
|
103
|
+
#
|
104
|
+
# # good
|
105
|
+
# class A
|
106
|
+
# def test
|
107
|
+
# puts 'hello'
|
108
|
+
# puts 'world'
|
109
|
+
# end
|
110
|
+
#
|
111
|
+
# protected
|
112
|
+
#
|
113
|
+
# def foo
|
114
|
+
# end
|
115
|
+
#
|
116
|
+
# private
|
117
|
+
#
|
118
|
+
# def bar
|
119
|
+
# end
|
120
|
+
# end
|
121
|
+
class IndentationConsistency < Cop
|
122
|
+
include Alignment
|
123
|
+
include ConfigurableEnforcedStyle
|
124
|
+
|
125
|
+
MSG = 'Inconsistent indentation detected.'
|
126
|
+
|
127
|
+
def on_begin(node)
|
128
|
+
check(node)
|
129
|
+
end
|
130
|
+
|
131
|
+
def on_kwbegin(node)
|
132
|
+
check(node)
|
133
|
+
end
|
134
|
+
|
135
|
+
def autocorrect(node)
|
136
|
+
AlignmentCorrector.correct(processed_source, node, column_delta)
|
137
|
+
end
|
138
|
+
|
139
|
+
private
|
140
|
+
|
141
|
+
# Not all nodes define `bare_access_modifier?` (for example,
|
142
|
+
# `RuboCop::AST::DefNode` does not), so we must check `send_type?` first
|
143
|
+
# to avoid a NoMethodError.
|
144
|
+
def bare_access_modifier?(node)
|
145
|
+
node.send_type? && node.bare_access_modifier?
|
146
|
+
end
|
147
|
+
|
148
|
+
# Returns an integer representing the correct indentation, or nil to
|
149
|
+
# indicate that the correct indentation is that of the first child that
|
150
|
+
# is not an access modifier.
|
151
|
+
def base_column_for_normal_style(node)
|
152
|
+
first_child = node.children.first
|
153
|
+
return unless first_child && bare_access_modifier?(first_child)
|
154
|
+
|
155
|
+
# If, as is most common, the access modifier is indented deeper than
|
156
|
+
# the module (`access_modifier_indent > module_indent`) then the
|
157
|
+
# indentation of the access modifier determines the correct
|
158
|
+
# indentation.
|
159
|
+
#
|
160
|
+
# Otherwise, in the rare event that the access modifier is outdented
|
161
|
+
# to the level of the module (see `AccessModifierIndentation` cop) we
|
162
|
+
# return nil so that `check_alignment` will derive the correct
|
163
|
+
# indentation from the first child that is not an access modifier.
|
164
|
+
module_indent = display_column(node.parent.source_range)
|
165
|
+
access_modifier_indent = display_column(first_child.source_range)
|
166
|
+
access_modifier_indent if access_modifier_indent > module_indent
|
167
|
+
end
|
168
|
+
|
169
|
+
def check(node)
|
170
|
+
if style == :indented_internal_methods
|
171
|
+
check_indented_internal_methods_style(node)
|
172
|
+
else
|
173
|
+
check_normal_style(node)
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
def check_normal_style(node)
|
178
|
+
check_alignment(
|
179
|
+
node.children.reject { |child| bare_access_modifier?(child) },
|
180
|
+
base_column_for_normal_style(node)
|
181
|
+
)
|
182
|
+
end
|
183
|
+
|
184
|
+
def check_indented_internal_methods_style(node)
|
185
|
+
children_to_check = [[]]
|
186
|
+
node.children.each do |child|
|
187
|
+
# Modifier nodes have special indentation and will be checked by
|
188
|
+
# the AccessModifierIndentation cop. This cop uses them as dividers
|
189
|
+
# in indented_internal_methods mode. Then consistency is checked
|
190
|
+
# only within each section delimited by a modifier node.
|
191
|
+
if bare_access_modifier?(child)
|
192
|
+
children_to_check << []
|
193
|
+
else
|
194
|
+
children_to_check.last << child
|
195
|
+
end
|
196
|
+
end
|
197
|
+
children_to_check.each { |group| check_alignment(group) }
|
198
|
+
end
|
199
|
+
end
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'set'
|
4
|
+
|
5
|
+
module RuboCop
|
6
|
+
module Cop
|
7
|
+
module Layout
|
8
|
+
# This cop checks that the indentation method is consistent.
|
9
|
+
# Either tabs only or spaces only are used for indentation.
|
10
|
+
#
|
11
|
+
# @example EnforcedStyle: spaces (default)
|
12
|
+
# # bad
|
13
|
+
# # This example uses a tab to indent bar.
|
14
|
+
# def foo
|
15
|
+
# bar
|
16
|
+
# end
|
17
|
+
#
|
18
|
+
# # good
|
19
|
+
# # This example uses spaces to indent bar.
|
20
|
+
# def foo
|
21
|
+
# bar
|
22
|
+
# end
|
23
|
+
#
|
24
|
+
# @example EnforcedStyle: tabs
|
25
|
+
# # bad
|
26
|
+
# # This example uses spaces to indent bar.
|
27
|
+
# def foo
|
28
|
+
# bar
|
29
|
+
# end
|
30
|
+
#
|
31
|
+
# # good
|
32
|
+
# # This example uses a tab to indent bar.
|
33
|
+
# def foo
|
34
|
+
# bar
|
35
|
+
# end
|
36
|
+
class IndentationStyle < Cop
|
37
|
+
include Alignment
|
38
|
+
include ConfigurableEnforcedStyle
|
39
|
+
include RangeHelp
|
40
|
+
|
41
|
+
MSG = '%<type>s detected in indentation.'
|
42
|
+
|
43
|
+
def investigate(processed_source)
|
44
|
+
str_ranges = string_literal_ranges(processed_source.ast)
|
45
|
+
|
46
|
+
processed_source.lines.each.with_index(1) do |line, lineno|
|
47
|
+
match = find_offence(line)
|
48
|
+
next unless match
|
49
|
+
|
50
|
+
range = source_range(processed_source.buffer,
|
51
|
+
lineno,
|
52
|
+
match.begin(0)...match.end(0))
|
53
|
+
next if in_string_literal?(str_ranges, range)
|
54
|
+
|
55
|
+
add_offense(range, location: range)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def autocorrect(range)
|
60
|
+
if range.source.include?("\t")
|
61
|
+
autocorrect_lambda_for_tabs(range)
|
62
|
+
else
|
63
|
+
autocorrect_lambda_for_spaces(range)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
def find_offence(line)
|
70
|
+
if style == :spaces
|
71
|
+
line.match(/\A\s*\t+/)
|
72
|
+
else
|
73
|
+
line.match(/\A\s* +/)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def autocorrect_lambda_for_tabs(range)
|
78
|
+
lambda do |corrector|
|
79
|
+
spaces = ' ' * configured_indentation_width
|
80
|
+
corrector.replace(range, range.source.gsub(/\t/, spaces))
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def autocorrect_lambda_for_spaces(range)
|
85
|
+
lambda do |corrector|
|
86
|
+
corrector.replace(range, range.source.gsub(/\A\s+/) do |match|
|
87
|
+
"\t" * (match.size / configured_indentation_width)
|
88
|
+
end)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def in_string_literal?(ranges, tabs_range)
|
93
|
+
ranges.any? { |range| range.contains?(tabs_range) }
|
94
|
+
end
|
95
|
+
|
96
|
+
def string_literal_ranges(ast)
|
97
|
+
# which lines start inside a string literal?
|
98
|
+
return [] if ast.nil?
|
99
|
+
|
100
|
+
ast.each_node(:str, :dstr).each_with_object(Set.new) do |str, ranges|
|
101
|
+
loc = str.location
|
102
|
+
|
103
|
+
if str.heredoc?
|
104
|
+
ranges << loc.heredoc_body
|
105
|
+
elsif loc.respond_to?(:begin) && loc.begin
|
106
|
+
ranges << loc.expression
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def message(_node)
|
112
|
+
format(MSG, type: style == :spaces ? 'Tab' : 'Space')
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
@@ -0,0 +1,362 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Layout
|
6
|
+
# This cop checks for indentation that doesn't use the specified number
|
7
|
+
# of spaces.
|
8
|
+
#
|
9
|
+
# See also the IndentationConsistency cop which is the companion to this
|
10
|
+
# one.
|
11
|
+
#
|
12
|
+
# @example
|
13
|
+
# # bad
|
14
|
+
# class A
|
15
|
+
# def test
|
16
|
+
# puts 'hello'
|
17
|
+
# end
|
18
|
+
# end
|
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 # rubocop:disable Metrics/ClassLength
|
46
|
+
include EndKeywordAlignment
|
47
|
+
include Alignment
|
48
|
+
include CheckAssignment
|
49
|
+
include IgnoredPattern
|
50
|
+
include RangeHelp
|
51
|
+
|
52
|
+
MSG = 'Use %<configured_indentation_width>d (not %<indentation>d) ' \
|
53
|
+
'spaces for%<name>s indentation.'
|
54
|
+
|
55
|
+
def_node_matcher :access_modifier?, <<~PATTERN
|
56
|
+
[(send ...) access_modifier?]
|
57
|
+
PATTERN
|
58
|
+
|
59
|
+
def on_rescue(node)
|
60
|
+
_begin_node, *_rescue_nodes, else_node = *node
|
61
|
+
check_indentation(node.loc.else, else_node)
|
62
|
+
end
|
63
|
+
|
64
|
+
def on_ensure(node)
|
65
|
+
check_indentation(node.loc.keyword, node.body)
|
66
|
+
end
|
67
|
+
|
68
|
+
alias on_resbody on_ensure
|
69
|
+
alias on_for on_ensure
|
70
|
+
|
71
|
+
def on_kwbegin(node)
|
72
|
+
# Check indentation against end keyword but only if it's first on its
|
73
|
+
# line.
|
74
|
+
return unless begins_its_line?(node.loc.end)
|
75
|
+
|
76
|
+
check_indentation(node.loc.end, node.children.first)
|
77
|
+
end
|
78
|
+
|
79
|
+
def on_block(node)
|
80
|
+
end_loc = node.loc.end
|
81
|
+
|
82
|
+
return unless begins_its_line?(end_loc)
|
83
|
+
|
84
|
+
check_indentation(end_loc, node.body)
|
85
|
+
|
86
|
+
return unless indented_internal_methods_style?
|
87
|
+
|
88
|
+
check_members(end_loc, [node.body])
|
89
|
+
end
|
90
|
+
|
91
|
+
def on_class(node)
|
92
|
+
check_members(node.loc.keyword, [node.body])
|
93
|
+
end
|
94
|
+
alias on_sclass on_class
|
95
|
+
alias on_module on_class
|
96
|
+
|
97
|
+
def on_send(node)
|
98
|
+
super
|
99
|
+
return unless node.adjacent_def_modifier?
|
100
|
+
|
101
|
+
def_end_config = config.for_cop('Layout/DefEndAlignment')
|
102
|
+
style = def_end_config['EnforcedStyleAlignWith'] || 'start_of_line'
|
103
|
+
base = if style == 'def'
|
104
|
+
node.first_argument
|
105
|
+
else
|
106
|
+
leftmost_modifier_of(node) || node
|
107
|
+
end
|
108
|
+
|
109
|
+
check_indentation(base.source_range, node.first_argument.body)
|
110
|
+
ignore_node(node.first_argument)
|
111
|
+
end
|
112
|
+
alias on_csend on_send
|
113
|
+
|
114
|
+
def on_def(node)
|
115
|
+
return if ignored_node?(node)
|
116
|
+
|
117
|
+
check_indentation(node.loc.keyword, node.body)
|
118
|
+
end
|
119
|
+
alias on_defs on_def
|
120
|
+
|
121
|
+
def on_while(node, base = node)
|
122
|
+
return if ignored_node?(node)
|
123
|
+
|
124
|
+
return unless node.single_line_condition?
|
125
|
+
|
126
|
+
check_indentation(base.loc, node.body)
|
127
|
+
end
|
128
|
+
|
129
|
+
alias on_until on_while
|
130
|
+
|
131
|
+
def on_case(case_node)
|
132
|
+
case_node.each_when do |when_node|
|
133
|
+
check_indentation(when_node.loc.keyword, when_node.body)
|
134
|
+
end
|
135
|
+
|
136
|
+
check_indentation(case_node.when_branches.last.loc.keyword,
|
137
|
+
case_node.else_branch)
|
138
|
+
end
|
139
|
+
|
140
|
+
def on_if(node, base = node)
|
141
|
+
return if ignored_node?(node)
|
142
|
+
return if node.ternary? || node.modifier_form?
|
143
|
+
|
144
|
+
check_if(node, node.body, node.else_branch, base.loc)
|
145
|
+
end
|
146
|
+
|
147
|
+
def autocorrect(node)
|
148
|
+
AlignmentCorrector.correct(processed_source, node, @column_delta)
|
149
|
+
end
|
150
|
+
|
151
|
+
private
|
152
|
+
|
153
|
+
def check_members(base, members)
|
154
|
+
check_indentation(base, select_check_member(members.first))
|
155
|
+
|
156
|
+
return unless members.any? && members.first.begin_type?
|
157
|
+
|
158
|
+
if indentation_consistency_style == 'indented_internal_methods'
|
159
|
+
check_members_for_indented_internal_methods_style(members)
|
160
|
+
else
|
161
|
+
check_members_for_normal_style(base, members)
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
def select_check_member(member)
|
166
|
+
return unless member
|
167
|
+
|
168
|
+
if access_modifier?(member.children.first)
|
169
|
+
return if access_modifier_indentation_style == 'outdent'
|
170
|
+
|
171
|
+
member.children.first
|
172
|
+
else
|
173
|
+
member
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
def check_members_for_indented_internal_methods_style(members)
|
178
|
+
each_member(members) do |member, previous_modifier|
|
179
|
+
check_indentation(previous_modifier, member,
|
180
|
+
indentation_consistency_style)
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
def check_members_for_normal_style(base, members)
|
185
|
+
members.first.children.each do |member|
|
186
|
+
next if member.send_type? && member.access_modifier?
|
187
|
+
|
188
|
+
check_indentation(base, member)
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
def each_member(members)
|
193
|
+
previous_modifier = nil
|
194
|
+
members.first.children.each do |member|
|
195
|
+
if member.send_type? && member.special_modifier?
|
196
|
+
previous_modifier = member
|
197
|
+
elsif previous_modifier
|
198
|
+
yield member, previous_modifier.source_range
|
199
|
+
previous_modifier = nil
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
def indented_internal_methods_style?
|
205
|
+
indentation_consistency_style == 'indented_internal_methods'
|
206
|
+
end
|
207
|
+
|
208
|
+
def special_modifier?(node)
|
209
|
+
node.bare_access_modifier? && SPECIAL_MODIFIERS.include?(node.source)
|
210
|
+
end
|
211
|
+
|
212
|
+
def access_modifier_indentation_style
|
213
|
+
config.for_cop('Layout/AccessModifierIndentation')['EnforcedStyle']
|
214
|
+
end
|
215
|
+
|
216
|
+
def indentation_consistency_style
|
217
|
+
config.for_cop('Layout/IndentationConsistency')['EnforcedStyle']
|
218
|
+
end
|
219
|
+
|
220
|
+
def check_assignment(node, rhs)
|
221
|
+
# If there are method calls chained to the right hand side of the
|
222
|
+
# assignment, we let rhs be the receiver of those method calls before
|
223
|
+
# we check its indentation.
|
224
|
+
rhs = first_part_of_call_chain(rhs)
|
225
|
+
return unless rhs
|
226
|
+
|
227
|
+
end_config = config.for_cop('Layout/EndAlignment')
|
228
|
+
style = end_config['EnforcedStyleAlignWith'] || 'keyword'
|
229
|
+
base = variable_alignment?(node.loc, rhs, style.to_sym) ? node : rhs
|
230
|
+
|
231
|
+
case rhs.type
|
232
|
+
when :if then on_if(rhs, base)
|
233
|
+
when :while, :until then on_while(rhs, base)
|
234
|
+
else return
|
235
|
+
end
|
236
|
+
|
237
|
+
ignore_node(rhs)
|
238
|
+
end
|
239
|
+
|
240
|
+
def check_if(node, body, else_clause, base_loc)
|
241
|
+
return if node.ternary?
|
242
|
+
|
243
|
+
check_indentation(base_loc, body)
|
244
|
+
return unless else_clause
|
245
|
+
|
246
|
+
# If the else clause is an elsif, it will get its own on_if call so
|
247
|
+
# we don't need to process it here.
|
248
|
+
return if else_clause.if_type? && else_clause.elsif?
|
249
|
+
|
250
|
+
check_indentation(node.loc.else, else_clause)
|
251
|
+
end
|
252
|
+
|
253
|
+
def check_indentation(base_loc, body_node, style = 'normal')
|
254
|
+
return unless indentation_to_check?(base_loc, body_node)
|
255
|
+
|
256
|
+
indentation = column_offset_between(body_node.loc, base_loc)
|
257
|
+
@column_delta = configured_indentation_width - indentation
|
258
|
+
return if @column_delta.zero?
|
259
|
+
|
260
|
+
offense(body_node, indentation, style)
|
261
|
+
end
|
262
|
+
|
263
|
+
def offense(body_node, indentation, style)
|
264
|
+
# This cop only auto-corrects the first statement in a def body, for
|
265
|
+
# example.
|
266
|
+
body_node = body_node.children.first if body_node.begin_type? && !parentheses?(body_node)
|
267
|
+
|
268
|
+
# Since autocorrect changes a number of lines, and not only the line
|
269
|
+
# where the reported offending range is, we avoid auto-correction if
|
270
|
+
# this cop has already found other offenses is the same
|
271
|
+
# range. Otherwise, two corrections can interfere with each other,
|
272
|
+
# resulting in corrupted code.
|
273
|
+
node = if autocorrect? && other_offense_in_same_range?(body_node)
|
274
|
+
nil
|
275
|
+
else
|
276
|
+
body_node
|
277
|
+
end
|
278
|
+
|
279
|
+
name = style == 'normal' ? '' : " #{style}"
|
280
|
+
message = message(configured_indentation_width, indentation, name)
|
281
|
+
|
282
|
+
add_offense(node, location: offending_range(body_node, indentation),
|
283
|
+
message: message)
|
284
|
+
end
|
285
|
+
|
286
|
+
def message(configured_indentation_width, indentation, name)
|
287
|
+
format(
|
288
|
+
MSG,
|
289
|
+
configured_indentation_width: configured_indentation_width,
|
290
|
+
indentation: indentation,
|
291
|
+
name: name
|
292
|
+
)
|
293
|
+
end
|
294
|
+
|
295
|
+
# Returns true if the given node is within another node that has
|
296
|
+
# already been marked for auto-correction by this cop.
|
297
|
+
def other_offense_in_same_range?(node)
|
298
|
+
expr = node.source_range
|
299
|
+
@offense_ranges ||= []
|
300
|
+
|
301
|
+
return true if @offense_ranges.any? { |r| within?(expr, r) }
|
302
|
+
|
303
|
+
@offense_ranges << expr
|
304
|
+
false
|
305
|
+
end
|
306
|
+
|
307
|
+
def indentation_to_check?(base_loc, body_node)
|
308
|
+
return false if skip_check?(base_loc, body_node)
|
309
|
+
|
310
|
+
if %i[rescue ensure].include?(body_node.type)
|
311
|
+
block_body, = *body_node
|
312
|
+
return unless block_body
|
313
|
+
end
|
314
|
+
|
315
|
+
true
|
316
|
+
end
|
317
|
+
|
318
|
+
def skip_check?(base_loc, body_node)
|
319
|
+
return true if ignored_line?(base_loc)
|
320
|
+
return true unless body_node
|
321
|
+
|
322
|
+
# Don't check if expression is on same line as "then" keyword, etc.
|
323
|
+
return true if body_node.loc.line == base_loc.line
|
324
|
+
|
325
|
+
return true if starts_with_access_modifier?(body_node)
|
326
|
+
|
327
|
+
# Don't check indentation if the line doesn't start with the body.
|
328
|
+
# For example, lines like "else do_something".
|
329
|
+
first_char_pos_on_line = body_node.source_range.source_line =~ /\S/
|
330
|
+
return true unless body_node.loc.column == first_char_pos_on_line
|
331
|
+
end
|
332
|
+
|
333
|
+
def offending_range(body_node, indentation)
|
334
|
+
expr = body_node.source_range
|
335
|
+
begin_pos = expr.begin_pos
|
336
|
+
ind = expr.begin_pos - indentation
|
337
|
+
pos = indentation >= 0 ? ind..begin_pos : begin_pos..ind
|
338
|
+
range_between(pos.begin, pos.end)
|
339
|
+
end
|
340
|
+
|
341
|
+
def starts_with_access_modifier?(body_node)
|
342
|
+
return unless body_node.begin_type?
|
343
|
+
|
344
|
+
starting_node = body_node.children.first
|
345
|
+
return unless starting_node
|
346
|
+
|
347
|
+
starting_node.send_type? && starting_node.bare_access_modifier?
|
348
|
+
end
|
349
|
+
|
350
|
+
def configured_indentation_width
|
351
|
+
cop_config['Width']
|
352
|
+
end
|
353
|
+
|
354
|
+
def leftmost_modifier_of(node)
|
355
|
+
return node unless node.parent&.send_type?
|
356
|
+
|
357
|
+
leftmost_modifier_of(node.parent)
|
358
|
+
end
|
359
|
+
end
|
360
|
+
end
|
361
|
+
end
|
362
|
+
end
|