rubocop 0.75.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 +217 -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 +3939 -0
- data/exe/rubocop +17 -0
- data/lib/rubocop.rb +608 -0
- data/lib/rubocop/ast/builder.rb +81 -0
- data/lib/rubocop/ast/node.rb +640 -0
- data/lib/rubocop/ast/node/alias_node.rb +24 -0
- data/lib/rubocop/ast/node/and_node.rb +29 -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 +115 -0
- data/lib/rubocop/ast/node/break_node.rb +17 -0
- data/lib/rubocop/ast/node/case_node.rb +56 -0
- data/lib/rubocop/ast/node/class_node.rb +31 -0
- data/lib/rubocop/ast/node/def_node.rb +71 -0
- data/lib/rubocop/ast/node/defined_node.rb +17 -0
- data/lib/rubocop/ast/node/ensure_node.rb +17 -0
- data/lib/rubocop/ast/node/float_node.rb +12 -0
- data/lib/rubocop/ast/node/for_node.rb +53 -0
- data/lib/rubocop/ast/node/hash_node.rb +109 -0
- data/lib/rubocop/ast/node/if_node.rb +175 -0
- data/lib/rubocop/ast/node/int_node.rb +12 -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 +43 -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 +261 -0
- data/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +114 -0
- data/lib/rubocop/ast/node/mixin/modifier_node.rb +17 -0
- data/lib/rubocop/ast/node/mixin/numeric_node.rb +21 -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/module_node.rb +24 -0
- data/lib/rubocop/ast/node/or_node.rb +29 -0
- data/lib/rubocop/ast/node/pair_node.rb +63 -0
- data/lib/rubocop/ast/node/range_node.rb +18 -0
- data/lib/rubocop/ast/node/regexp_node.rb +35 -0
- data/lib/rubocop/ast/node/resbody_node.rb +24 -0
- data/lib/rubocop/ast/node/retry_node.rb +17 -0
- data/lib/rubocop/ast/node/self_class_node.rb +24 -0
- data/lib/rubocop/ast/node/send_node.rb +13 -0
- data/lib/rubocop/ast/node/str_node.rb +16 -0
- data/lib/rubocop/ast/node/super_node.rb +21 -0
- data/lib/rubocop/ast/node/symbol_node.rb +12 -0
- data/lib/rubocop/ast/node/until_node.rb +35 -0
- data/lib/rubocop/ast/node/when_node.rb +53 -0
- data/lib/rubocop/ast/node/while_node.rb +35 -0
- data/lib/rubocop/ast/node/yield_node.rb +21 -0
- data/lib/rubocop/ast/sexp.rb +16 -0
- data/lib/rubocop/ast/traversal.rb +183 -0
- data/lib/rubocop/cached_data.rb +58 -0
- data/lib/rubocop/cli.rb +343 -0
- data/lib/rubocop/comment_config.rb +201 -0
- data/lib/rubocop/config.rb +244 -0
- data/lib/rubocop/config_loader.rb +273 -0
- data/lib/rubocop/config_loader_resolver.rb +194 -0
- data/lib/rubocop/config_obsoletion.rb +213 -0
- data/lib/rubocop/config_store.rb +48 -0
- data/lib/rubocop/config_validator.rb +239 -0
- data/lib/rubocop/cop/autocorrect_logic.rb +103 -0
- data/lib/rubocop/cop/badge.rb +73 -0
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +73 -0
- data/lib/rubocop/cop/bundler/gem_comment.rb +64 -0
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +69 -0
- data/lib/rubocop/cop/bundler/ordered_gems.rb +73 -0
- data/lib/rubocop/cop/commissioner.rb +137 -0
- data/lib/rubocop/cop/cop.rb +271 -0
- data/lib/rubocop/cop/corrector.rb +171 -0
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +146 -0
- data/lib/rubocop/cop/correctors/condition_corrector.rb +28 -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 +49 -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 +106 -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 +38 -0
- data/lib/rubocop/cop/internal_affairs.rb +8 -0
- data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +44 -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 +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/align_arguments.rb +93 -0
- data/lib/rubocop/cop/layout/align_array.rb +39 -0
- data/lib/rubocop/cop/layout/align_hash.rb +358 -0
- data/lib/rubocop/cop/layout/align_parameters.rb +118 -0
- data/lib/rubocop/cop/layout/block_alignment.rb +244 -0
- data/lib/rubocop/cop/layout/block_end_newline.rb +62 -0
- data/lib/rubocop/cop/layout/case_indentation.rb +161 -0
- data/lib/rubocop/cop/layout/class_structure.rb +340 -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 +144 -0
- data/lib/rubocop/cop/layout/condition_position.rb +56 -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 +134 -0
- data/lib/rubocop/cop/layout/empty_comment.rb +160 -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 +151 -0
- data/lib/rubocop/cop/layout/empty_lines.rb +76 -0
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +215 -0
- data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +99 -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 +87 -0
- data/lib/rubocop/cop/layout/extra_spacing.rb +201 -0
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +45 -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 +55 -0
- data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +46 -0
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +289 -0
- data/lib/rubocop/cop/layout/indent_assignment.rb +55 -0
- data/lib/rubocop/cop/layout/indent_first_argument.rb +247 -0
- data/lib/rubocop/cop/layout/indent_first_array_element.rb +167 -0
- data/lib/rubocop/cop/layout/indent_first_hash_element.rb +184 -0
- data/lib/rubocop/cop/layout/indent_first_parameter.rb +100 -0
- data/lib/rubocop/cop/layout/indent_heredoc.rb +256 -0
- data/lib/rubocop/cop/layout/indentation_consistency.rb +202 -0
- data/lib/rubocop/cop/layout/indentation_width.rb +364 -0
- data/lib/rubocop/cop/layout/initial_indentation.rb +59 -0
- data/lib/rubocop/cop/layout/leading_blank_lines.rb +53 -0
- data/lib/rubocop/cop/layout/leading_comment_space.rb +88 -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 +146 -0
- data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +122 -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 +54 -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 +114 -0
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +189 -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 +169 -0
- data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +92 -0
- data/lib/rubocop/cop/layout/space_around_keyword.rb +232 -0
- data/lib/rubocop/cop/layout/space_around_operators.rb +182 -0
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +119 -0
- data/lib/rubocop/cop/layout/space_before_comma.rb +31 -0
- data/lib/rubocop/cop/layout/space_before_comment.rb +35 -0
- data/lib/rubocop/cop/layout/space_before_first_arg.rb +67 -0
- data/lib/rubocop/cop/layout/space_before_semicolon.rb +27 -0
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +80 -0
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +228 -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 +207 -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 +150 -0
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +65 -0
- data/lib/rubocop/cop/layout/tab.rb +75 -0
- data/lib/rubocop/cop/layout/trailing_blank_lines.rb +113 -0
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +61 -0
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +62 -0
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +55 -0
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +43 -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 +38 -0
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +72 -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/disjunctive_assignment_in_constructor.rb +81 -0
- data/lib/rubocop/cop/lint/duplicate_case_condition.rb +53 -0
- data/lib/rubocop/cop/lint/duplicate_methods.rb +239 -0
- data/lib/rubocop/cop/lint/duplicated_key.rb +38 -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 +38 -0
- data/lib/rubocop/cop/lint/end_in_method.rb +40 -0
- data/lib/rubocop/cop/lint/ensure_return.rb +46 -0
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +163 -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 +159 -0
- data/lib/rubocop/cop/lint/handle_exceptions.rb +95 -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 +40 -0
- data/lib/rubocop/cop/lint/literal_as_condition.rb +138 -0
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +98 -0
- data/lib/rubocop/cop/lint/loop.rb +63 -0
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +84 -0
- data/lib/rubocop/cop/lint/multiple_compare.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_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 +64 -0
- data/lib/rubocop/cop/lint/percent_string_array.rb +73 -0
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +69 -0
- data/lib/rubocop/cop/lint/rand_one.rb +45 -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 +29 -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 +66 -0
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +94 -0
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +38 -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/string_conversion_in_interpolation.rb +59 -0
- data/lib/rubocop/cop/lint/syntax.rb +59 -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 +45 -0
- data/lib/rubocop/cop/lint/unneeded_cop_disable_directive.rb +263 -0
- data/lib/rubocop/cop/lint/unneeded_cop_enable_directive.rb +116 -0
- data/lib/rubocop/cop/lint/unneeded_require_statement.rb +50 -0
- data/lib/rubocop/cop/lint/unneeded_splat_expansion.rb +172 -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 +86 -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 +240 -0
- data/lib/rubocop/cop/lint/useless_assignment.rb +129 -0
- data/lib/rubocop/cop/lint/useless_comparison.rb +28 -0
- data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +49 -0
- data/lib/rubocop/cop/lint/useless_setter_call.rb +164 -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 +50 -0
- data/lib/rubocop/cop/metrics/block_nesting.rb +65 -0
- data/lib/rubocop/cop/metrics/class_length.rb +36 -0
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +32 -0
- data/lib/rubocop/cop/metrics/line_length.rb +321 -0
- data/lib/rubocop/cop/metrics/method_length.rb +36 -0
- data/lib/rubocop/cop/metrics/module_length.rb +36 -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 +67 -0
- data/lib/rubocop/cop/migration/department_name.rb +44 -0
- data/lib/rubocop/cop/mixin/alignment.rb +74 -0
- data/lib/rubocop/cop/mixin/annotation_comment.rb +37 -0
- data/lib/rubocop/cop/mixin/array_min_size.rb +59 -0
- data/lib/rubocop/cop/mixin/array_syntax.rb +17 -0
- data/lib/rubocop/cop/mixin/check_assignment.rb +44 -0
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +190 -0
- data/lib/rubocop/cop/mixin/classish_length.rb +37 -0
- data/lib/rubocop/cop/mixin/code_length.rb +38 -0
- data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +98 -0
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +47 -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 +67 -0
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +30 -0
- data/lib/rubocop/cop/mixin/first_element_line_break.rb +46 -0
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +53 -0
- data/lib/rubocop/cop/mixin/hash_alignment.rb +147 -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/match_range.rb +26 -0
- data/lib/rubocop/cop/mixin/method_complexity.rb +56 -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 +25 -0
- data/lib/rubocop/cop/mixin/on_normal_if_unless.rb +14 -0
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +56 -0
- data/lib/rubocop/cop/mixin/parentheses.rb +17 -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/rescue_node.rb +22 -0
- data/lib/rubocop/cop/mixin/safe_assignment.rb +23 -0
- data/lib/rubocop/cop/mixin/safe_mode.rb +24 -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 +68 -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 +146 -0
- data/lib/rubocop/cop/mixin/target_ruby_version.rb +16 -0
- data/lib/rubocop/cop/mixin/too_many_lines.rb +35 -0
- data/lib/rubocop/cop/mixin/trailing_body.rb +26 -0
- data/lib/rubocop/cop/mixin/trailing_comma.rb +216 -0
- data/lib/rubocop/cop/mixin/uncommunicative_name.rb +111 -0
- data/lib/rubocop/cop/mixin/unused_argument.rb +33 -0
- data/lib/rubocop/cop/naming/accessor_method_name.rb +55 -0
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +72 -0
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +43 -0
- data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +33 -0
- data/lib/rubocop/cop/naming/constant_name.rb +81 -0
- data/lib/rubocop/cop/naming/file_name.rb +205 -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 +53 -0
- data/lib/rubocop/cop/naming/predicate_name.rb +108 -0
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +112 -0
- data/lib/rubocop/cop/naming/uncommunicative_block_param_name.rb +49 -0
- data/lib/rubocop/cop/naming/uncommunicative_method_param_name.rb +58 -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 +205 -0
- data/lib/rubocop/cop/registry.rb +211 -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 +77 -0
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +112 -0
- data/lib/rubocop/cop/style/alias.rb +147 -0
- data/lib/rubocop/cop/style/and_or.rb +146 -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 +62 -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/block_comments.rb +70 -0
- data/lib/rubocop/cop/style/block_delimiters.rb +331 -0
- data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +209 -0
- data/lib/rubocop/cop/style/case_equality.rb +30 -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 +48 -0
- data/lib/rubocop/cop/style/collection_methods.rb +77 -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 +668 -0
- data/lib/rubocop/cop/style/constant_visibility.rb +77 -0
- data/lib/rubocop/cop/style/copyright.rb +95 -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/documentation.rb +97 -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 +35 -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 +107 -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 +123 -0
- data/lib/rubocop/cop/style/empty_method.rb +115 -0
- data/lib/rubocop/cop/style/encoding.rb +56 -0
- data/lib/rubocop/cop/style/end_block.rb +25 -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/float_division.rb +94 -0
- data/lib/rubocop/cop/style/for.rb +88 -0
- data/lib/rubocop/cop/style/format_string.rb +124 -0
- data/lib/rubocop/cop/style/format_string_token.rb +119 -0
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +149 -0
- data/lib/rubocop/cop/style/global_vars.rb +80 -0
- data/lib/rubocop/cop/style/guard_clause.rb +121 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +214 -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 +127 -0
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +39 -0
- data/lib/rubocop/cop/style/if_with_semicolon.rb +30 -0
- data/lib/rubocop/cop/style/implicit_runtime_error.rb +32 -0
- data/lib/rubocop/cop/style/infinite_loop.rb +127 -0
- data/lib/rubocop/cop/style/inline_comment.rb +34 -0
- data/lib/rubocop/cop/style/inverse_methods.rb +187 -0
- data/lib/rubocop/cop/style/ip_addresses.rb +76 -0
- data/lib/rubocop/cop/style/lambda.rb +131 -0
- data/lib/rubocop/cop/style/lambda_call.rb +93 -0
- data/lib/rubocop/cop/style/line_end_concatenation.rb +121 -0
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +388 -0
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +77 -0
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +46 -0
- data/lib/rubocop/cop/style/method_def_parentheses.rb +158 -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 +104 -0
- data/lib/rubocop/cop/style/multiline_block_chain.rb +40 -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 +38 -0
- data/lib/rubocop/cop/style/multiline_when_then.rb +55 -0
- data/lib/rubocop/cop/style/multiple_comparison.rb +92 -0
- data/lib/rubocop/cop/style/mutable_constant.rb +174 -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 +105 -0
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +67 -0
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +32 -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 +124 -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 +110 -0
- data/lib/rubocop/cop/style/numeric_predicate.rb +137 -0
- data/lib/rubocop/cop/style/one_line_conditional.rb +101 -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 +95 -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 +158 -0
- data/lib/rubocop/cop/style/redundant_begin.rb +91 -0
- data/lib/rubocop/cop/style/redundant_conditional.rb +97 -0
- data/lib/rubocop/cop/style/redundant_exception.rb +60 -0
- data/lib/rubocop/cop/style/redundant_freeze.rb +67 -0
- data/lib/rubocop/cop/style/redundant_parentheses.rb +231 -0
- data/lib/rubocop/cop/style/redundant_return.rb +173 -0
- data/lib/rubocop/cop/style/redundant_self.rb +171 -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 +272 -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/special_global_vars.rb +213 -0
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +86 -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 +39 -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 +223 -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 +96 -0
- data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +58 -0
- data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +56 -0
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +91 -0
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +161 -0
- data/lib/rubocop/cop/style/trivial_accessors.rb +191 -0
- data/lib/rubocop/cop/style/unless_else.rb +55 -0
- data/lib/rubocop/cop/style/unneeded_capital_w.rb +51 -0
- data/lib/rubocop/cop/style/unneeded_condition.rb +112 -0
- data/lib/rubocop/cop/style/unneeded_interpolation.rb +98 -0
- data/lib/rubocop/cop/style/unneeded_percent_q.rb +112 -0
- data/lib/rubocop/cop/style/unneeded_sort.rb +165 -0
- data/lib/rubocop/cop/style/unpack_first.rb +65 -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 +141 -0
- data/lib/rubocop/cop/style/zero_length_predicate.rb +117 -0
- data/lib/rubocop/cop/team.rb +191 -0
- data/lib/rubocop/cop/util.rb +127 -0
- data/lib/rubocop/cop/utils/format_string.rb +128 -0
- data/lib/rubocop/cop/variable_force.rb +464 -0
- data/lib/rubocop/cop/variable_force/assignment.rb +96 -0
- data/lib/rubocop/cop/variable_force/branch.rb +322 -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 +109 -0
- data/lib/rubocop/cop/variable_force/variable.rb +117 -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/file_finder.rb +42 -0
- data/lib/rubocop/formatter/auto_gen_config_formatter.rb +16 -0
- data/lib/rubocop/formatter/base_formatter.rb +123 -0
- data/lib/rubocop/formatter/clang_style_formatter.rb +59 -0
- data/lib/rubocop/formatter/colorizable.rb +41 -0
- data/lib/rubocop/formatter/disabled_config_formatter.rb +224 -0
- data/lib/rubocop/formatter/disabled_lines_formatter.rb +57 -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 +106 -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 +80 -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 +84 -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 +21 -0
- data/lib/rubocop/node_pattern.rb +799 -0
- data/lib/rubocop/options.rb +454 -0
- data/lib/rubocop/path_util.rb +85 -0
- data/lib/rubocop/platform.rb +11 -0
- data/lib/rubocop/processed_source.rb +216 -0
- data/lib/rubocop/rake_task.rb +79 -0
- data/lib/rubocop/remote_config.rb +106 -0
- data/lib/rubocop/result_cache.rb +191 -0
- data/lib/rubocop/rspec/cop_helper.rb +94 -0
- data/lib/rubocop/rspec/expect_offense.rb +240 -0
- data/lib/rubocop/rspec/host_environment_simulation_helper.rb +28 -0
- data/lib/rubocop/rspec/shared_contexts.rb +90 -0
- data/lib/rubocop/rspec/support.rb +13 -0
- data/lib/rubocop/runner.rb +358 -0
- data/lib/rubocop/string_interpreter.rb +57 -0
- data/lib/rubocop/string_util.rb +14 -0
- data/lib/rubocop/target_finder.rb +190 -0
- data/lib/rubocop/token.rb +114 -0
- data/lib/rubocop/version.rb +21 -0
- data/lib/rubocop/warning.rb +11 -0
- data/lib/rubocop/yaml_duplication_checker.rb +39 -0
- metadata +770 -0
@@ -0,0 +1,184 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Layout
|
6
|
+
# This cop checks the indentation of the first key in a hash literal
|
7
|
+
# where the opening brace and the first key are on separate lines. The
|
8
|
+
# other keys' indentations are handled by the AlignHash cop.
|
9
|
+
#
|
10
|
+
# By default, Hash literals that are arguments in a method call with
|
11
|
+
# parentheses, and where the opening curly brace of the hash is on the
|
12
|
+
# same line as the opening parenthesis of the method call, shall have
|
13
|
+
# their first key indented one step (two spaces) more than the position
|
14
|
+
# inside the opening parenthesis.
|
15
|
+
#
|
16
|
+
# Other hash literals shall have their first key indented one step more
|
17
|
+
# than the start of the line where the opening curly brace is.
|
18
|
+
#
|
19
|
+
# This default style is called 'special_inside_parentheses'. Alternative
|
20
|
+
# styles are 'consistent' and 'align_braces'. Here are examples:
|
21
|
+
#
|
22
|
+
# @example EnforcedStyle: special_inside_parentheses (default)
|
23
|
+
# # The `special_inside_parentheses` style enforces that the first key
|
24
|
+
# # in a hash literal where the opening brace and the first key are on
|
25
|
+
# # separate lines is indented one step (two spaces) more than the
|
26
|
+
# # position inside the opening parentheses.
|
27
|
+
#
|
28
|
+
# # bad
|
29
|
+
# hash = {
|
30
|
+
# key: :value
|
31
|
+
# }
|
32
|
+
# and_in_a_method_call({
|
33
|
+
# no: :difference
|
34
|
+
# })
|
35
|
+
#
|
36
|
+
# # good
|
37
|
+
# special_inside_parentheses
|
38
|
+
# hash = {
|
39
|
+
# key: :value
|
40
|
+
# }
|
41
|
+
# but_in_a_method_call({
|
42
|
+
# its_like: :this
|
43
|
+
# })
|
44
|
+
#
|
45
|
+
# @example EnforcedStyle: consistent
|
46
|
+
# # The `consistent` style enforces that the first key in a hash
|
47
|
+
# # literal where the opening brace and the first key are on
|
48
|
+
# # separate lines is indented the same as a hash literal which is not
|
49
|
+
# # defined inside a method call.
|
50
|
+
#
|
51
|
+
# # bad
|
52
|
+
# hash = {
|
53
|
+
# key: :value
|
54
|
+
# }
|
55
|
+
# but_in_a_method_call({
|
56
|
+
# its_like: :this
|
57
|
+
# })
|
58
|
+
#
|
59
|
+
# # good
|
60
|
+
# hash = {
|
61
|
+
# key: :value
|
62
|
+
# }
|
63
|
+
# and_in_a_method_call({
|
64
|
+
# no: :difference
|
65
|
+
# })
|
66
|
+
#
|
67
|
+
# @example EnforcedStyle: align_braces
|
68
|
+
# # The `align_brackets` style enforces that the opening and closing
|
69
|
+
# # braces are indented to the same position.
|
70
|
+
#
|
71
|
+
# # bad
|
72
|
+
# and_now_for_something = {
|
73
|
+
# completely: :different
|
74
|
+
# }
|
75
|
+
#
|
76
|
+
# # good
|
77
|
+
# and_now_for_something = {
|
78
|
+
# completely: :different
|
79
|
+
# }
|
80
|
+
class IndentFirstHashElement < Cop
|
81
|
+
include Alignment
|
82
|
+
include ConfigurableEnforcedStyle
|
83
|
+
include MultilineElementIndentation
|
84
|
+
|
85
|
+
MSG = 'Use %<configured_indentation_width>d spaces for indentation ' \
|
86
|
+
'in a hash, relative to %<base_description>s.'
|
87
|
+
|
88
|
+
def on_hash(node)
|
89
|
+
check(node, nil) if node.loc.begin
|
90
|
+
end
|
91
|
+
|
92
|
+
def on_send(node)
|
93
|
+
each_argument_node(node, :hash) do |hash_node, left_parenthesis|
|
94
|
+
check(hash_node, left_parenthesis)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
alias on_csend on_send
|
98
|
+
|
99
|
+
def autocorrect(node)
|
100
|
+
AlignmentCorrector.correct(processed_source, node, @column_delta)
|
101
|
+
end
|
102
|
+
|
103
|
+
private
|
104
|
+
|
105
|
+
def brace_alignment_style
|
106
|
+
:align_braces
|
107
|
+
end
|
108
|
+
|
109
|
+
def check(hash_node, left_parenthesis)
|
110
|
+
return if ignored_node?(hash_node)
|
111
|
+
|
112
|
+
left_brace = hash_node.loc.begin
|
113
|
+
first_pair = hash_node.pairs.first
|
114
|
+
|
115
|
+
if first_pair
|
116
|
+
return if first_pair.source_range.line == left_brace.line
|
117
|
+
|
118
|
+
if separator_style?(first_pair)
|
119
|
+
check_based_on_longest_key(hash_node, left_brace,
|
120
|
+
left_parenthesis)
|
121
|
+
else
|
122
|
+
check_first(first_pair, left_brace, left_parenthesis, 0)
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
check_right_brace(hash_node.loc.end, left_brace, left_parenthesis)
|
127
|
+
end
|
128
|
+
|
129
|
+
def check_right_brace(right_brace, left_brace, left_parenthesis)
|
130
|
+
# if the right brace is on the same line as the last value, accept
|
131
|
+
return if right_brace.source_line[0...right_brace.column] =~ /\S/
|
132
|
+
|
133
|
+
expected_column = base_column(left_brace, left_parenthesis)
|
134
|
+
@column_delta = expected_column - right_brace.column
|
135
|
+
return if @column_delta.zero?
|
136
|
+
|
137
|
+
msg = if style == :align_braces
|
138
|
+
'Indent the right brace the same as the left brace.'
|
139
|
+
elsif style == :special_inside_parentheses && left_parenthesis
|
140
|
+
'Indent the right brace the same as the first position ' \
|
141
|
+
'after the preceding left parenthesis.'
|
142
|
+
else
|
143
|
+
'Indent the right brace the same as the start of the line ' \
|
144
|
+
'where the left brace is.'
|
145
|
+
end
|
146
|
+
add_offense(right_brace, location: right_brace, message: msg)
|
147
|
+
end
|
148
|
+
|
149
|
+
def separator_style?(first_pair)
|
150
|
+
separator = first_pair.loc.operator
|
151
|
+
key = "Enforced#{separator.is?(':') ? 'Colon' : 'HashRocket'}Style"
|
152
|
+
config.for_cop('Layout/AlignHash')[key] == 'separator'
|
153
|
+
end
|
154
|
+
|
155
|
+
def check_based_on_longest_key(hash_node, left_brace, left_parenthesis)
|
156
|
+
key_lengths = hash_node.keys.map do |key|
|
157
|
+
key.source_range.length
|
158
|
+
end
|
159
|
+
check_first(hash_node.pairs.first, left_brace, left_parenthesis,
|
160
|
+
key_lengths.max - key_lengths.first)
|
161
|
+
end
|
162
|
+
|
163
|
+
# Returns the description of what the correct indentation is based on.
|
164
|
+
def base_description(left_parenthesis)
|
165
|
+
if style == :align_braces
|
166
|
+
'the position of the opening brace'
|
167
|
+
elsif left_parenthesis && style == :special_inside_parentheses
|
168
|
+
'the first position after the preceding left parenthesis'
|
169
|
+
else
|
170
|
+
'the start of the line where the left curly brace is'
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
def message(base_description)
|
175
|
+
format(
|
176
|
+
MSG,
|
177
|
+
configured_indentation_width: configured_indentation_width,
|
178
|
+
base_description: base_description
|
179
|
+
)
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|
184
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Layout
|
6
|
+
# This cop checks the indentation of the first parameter in a method
|
7
|
+
# definition. Parameters after the first one are checked by
|
8
|
+
# Layout/AlignParameters, not by this cop.
|
9
|
+
#
|
10
|
+
# For indenting the first argument of method *calls*, check out
|
11
|
+
# Layout/IndentFirstArgument, which supports options related to
|
12
|
+
# nesting that are irrelevant for method *definitions*.
|
13
|
+
#
|
14
|
+
# @example
|
15
|
+
#
|
16
|
+
# # bad
|
17
|
+
# def some_method(
|
18
|
+
# first_param,
|
19
|
+
# second_param)
|
20
|
+
# 123
|
21
|
+
# end
|
22
|
+
#
|
23
|
+
# @example EnforcedStyle: consistent (default)
|
24
|
+
# # The first parameter should always be indented one step more than the
|
25
|
+
# # preceding line.
|
26
|
+
#
|
27
|
+
# # good
|
28
|
+
# def some_method(
|
29
|
+
# first_param,
|
30
|
+
# second_param)
|
31
|
+
# 123
|
32
|
+
# end
|
33
|
+
#
|
34
|
+
# @example EnforcedStyle: align_parentheses
|
35
|
+
# # The first parameter should always be indented one step more than the
|
36
|
+
# # opening parenthesis.
|
37
|
+
#
|
38
|
+
# # good
|
39
|
+
# def some_method(
|
40
|
+
# first_param,
|
41
|
+
# second_param)
|
42
|
+
# 123
|
43
|
+
# end
|
44
|
+
class IndentFirstParameter < Cop
|
45
|
+
include Alignment
|
46
|
+
include ConfigurableEnforcedStyle
|
47
|
+
include MultilineElementIndentation
|
48
|
+
|
49
|
+
MSG = 'Use %<configured_indentation_width>d spaces for indentation ' \
|
50
|
+
'in method args, relative to %<base_description>s.'
|
51
|
+
|
52
|
+
def on_def(node)
|
53
|
+
return if node.arguments.empty?
|
54
|
+
return if node.arguments.loc.begin.nil?
|
55
|
+
|
56
|
+
check(node)
|
57
|
+
end
|
58
|
+
alias on_defs on_def
|
59
|
+
|
60
|
+
def autocorrect(node)
|
61
|
+
AlignmentCorrector.correct(processed_source, node, @column_delta)
|
62
|
+
end
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
def brace_alignment_style
|
67
|
+
:align_parentheses
|
68
|
+
end
|
69
|
+
|
70
|
+
def check(def_node)
|
71
|
+
return if ignored_node?(def_node)
|
72
|
+
|
73
|
+
left_parenthesis = def_node.arguments.loc.begin
|
74
|
+
first_elem = def_node.arguments.first
|
75
|
+
return unless first_elem
|
76
|
+
return if first_elem.source_range.line == left_parenthesis.line
|
77
|
+
|
78
|
+
check_first(first_elem, left_parenthesis, nil, 0)
|
79
|
+
end
|
80
|
+
|
81
|
+
# Returns the description of what the correct indentation is based on.
|
82
|
+
def base_description(_)
|
83
|
+
if style == brace_alignment_style
|
84
|
+
'the position of the opening parenthesis'
|
85
|
+
else
|
86
|
+
'the start of the line where the left parenthesis is'
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def message(base_description)
|
91
|
+
format(
|
92
|
+
MSG,
|
93
|
+
configured_indentation_width: configured_indentation_width,
|
94
|
+
base_description: base_description
|
95
|
+
)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
@@ -0,0 +1,256 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Layout
|
6
|
+
# This cop checks the indentation of the here document bodies. The bodies
|
7
|
+
# are indented one step.
|
8
|
+
# In Ruby 2.3 or newer, squiggly heredocs (`<<~`) should be used. If you
|
9
|
+
# use the older rubies, you should introduce some library to your project
|
10
|
+
# (e.g. ActiveSupport, Powerpack or Unindent).
|
11
|
+
# Note: When `Metrics/LineLength`'s `AllowHeredoc` is false (not default),
|
12
|
+
# this cop does not add any offenses for long here documents to
|
13
|
+
# avoid `Metrics/LineLength`'s offenses.
|
14
|
+
#
|
15
|
+
# @example EnforcedStyle: squiggly (default)
|
16
|
+
# # bad
|
17
|
+
# <<-RUBY
|
18
|
+
# something
|
19
|
+
# RUBY
|
20
|
+
#
|
21
|
+
# # good
|
22
|
+
# # When EnforcedStyle is squiggly, bad code is auto-corrected to the
|
23
|
+
# # following code.
|
24
|
+
# <<~RUBY
|
25
|
+
# something
|
26
|
+
# RUBY
|
27
|
+
#
|
28
|
+
# @example EnforcedStyle: active_support
|
29
|
+
# # good
|
30
|
+
# # When EnforcedStyle is active_support, bad code is auto-corrected to
|
31
|
+
# # the following code.
|
32
|
+
# <<-RUBY.strip_heredoc
|
33
|
+
# something
|
34
|
+
# RUBY
|
35
|
+
#
|
36
|
+
# @example EnforcedStyle: powerpack
|
37
|
+
# # good
|
38
|
+
# # When EnforcedStyle is powerpack, bad code is auto-corrected to
|
39
|
+
# # the following code.
|
40
|
+
# <<-RUBY.strip_indent
|
41
|
+
# something
|
42
|
+
# RUBY
|
43
|
+
#
|
44
|
+
# @example EnforcedStyle: unindent
|
45
|
+
# # good
|
46
|
+
# # When EnforcedStyle is unindent, bad code is auto-corrected to
|
47
|
+
# # the following code.
|
48
|
+
# <<-RUBY.unindent
|
49
|
+
# something
|
50
|
+
# RUBY
|
51
|
+
#
|
52
|
+
class IndentHeredoc < Cop
|
53
|
+
include Heredoc
|
54
|
+
include ConfigurableEnforcedStyle
|
55
|
+
|
56
|
+
RUBY23_TYPE_MSG = 'Use %<indentation_width>d spaces for indentation ' \
|
57
|
+
'in a heredoc by using `<<~` instead of ' \
|
58
|
+
'`%<current_indent_type>s`.'
|
59
|
+
RUBY23_WIDTH_MSG = 'Use %<indentation_width>d spaces for '\
|
60
|
+
'indentation in a heredoc.'
|
61
|
+
LIBRARY_MSG = 'Use %<indentation_width>d spaces for indentation in a ' \
|
62
|
+
'heredoc by using %<method>s.'
|
63
|
+
STRIP_METHODS = {
|
64
|
+
unindent: 'unindent',
|
65
|
+
active_support: 'strip_heredoc',
|
66
|
+
powerpack: 'strip_indent'
|
67
|
+
}.freeze
|
68
|
+
|
69
|
+
def on_heredoc(node)
|
70
|
+
body = heredoc_body(node)
|
71
|
+
return if body.strip.empty?
|
72
|
+
|
73
|
+
body_indent_level = indent_level(body)
|
74
|
+
|
75
|
+
if heredoc_indent_type(node) == '~'
|
76
|
+
expected_indent_level = base_indent_level(node) + indentation_width
|
77
|
+
return if expected_indent_level == body_indent_level
|
78
|
+
else
|
79
|
+
return unless body_indent_level.zero?
|
80
|
+
end
|
81
|
+
|
82
|
+
return if line_too_long?(node)
|
83
|
+
|
84
|
+
add_offense(node, location: :heredoc_body)
|
85
|
+
end
|
86
|
+
|
87
|
+
def autocorrect(node)
|
88
|
+
check_style!
|
89
|
+
|
90
|
+
case style
|
91
|
+
when :squiggly
|
92
|
+
correct_by_squiggly(node)
|
93
|
+
else
|
94
|
+
correct_by_library(node)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
private
|
99
|
+
|
100
|
+
def message(node)
|
101
|
+
case style
|
102
|
+
when :squiggly
|
103
|
+
current_indent_type = "<<#{heredoc_indent_type(node)}"
|
104
|
+
ruby23_message(indentation_width, current_indent_type)
|
105
|
+
when nil
|
106
|
+
method = "some library(e.g. ActiveSupport's `String#strip_heredoc`)"
|
107
|
+
library_message(indentation_width, method)
|
108
|
+
else
|
109
|
+
method = "`String##{STRIP_METHODS[style]}`"
|
110
|
+
library_message(indentation_width, method)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def library_message(indentation_width, method)
|
115
|
+
format(
|
116
|
+
LIBRARY_MSG,
|
117
|
+
indentation_width: indentation_width,
|
118
|
+
method: method
|
119
|
+
)
|
120
|
+
end
|
121
|
+
|
122
|
+
def ruby23_message(indentation_width, current_indent_type)
|
123
|
+
if current_indent_type == '<<~'
|
124
|
+
ruby23_width_message(indentation_width)
|
125
|
+
else
|
126
|
+
ruby23_type_message(indentation_width, current_indent_type)
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
def ruby23_type_message(indentation_width, current_indent_type)
|
131
|
+
format(
|
132
|
+
RUBY23_TYPE_MSG,
|
133
|
+
indentation_width: indentation_width,
|
134
|
+
current_indent_type: current_indent_type
|
135
|
+
)
|
136
|
+
end
|
137
|
+
|
138
|
+
def ruby23_width_message(indentation_width)
|
139
|
+
format(
|
140
|
+
RUBY23_WIDTH_MSG,
|
141
|
+
indentation_width: indentation_width
|
142
|
+
)
|
143
|
+
end
|
144
|
+
|
145
|
+
def line_too_long?(node)
|
146
|
+
return false if unlimited_heredoc_length?
|
147
|
+
|
148
|
+
body = heredoc_body(node)
|
149
|
+
|
150
|
+
expected_indent = base_indent_level(node) + indentation_width
|
151
|
+
actual_indent = indent_level(body)
|
152
|
+
increase_indent_level = expected_indent - actual_indent
|
153
|
+
|
154
|
+
longest_line(body).size + increase_indent_level >= max_line_length
|
155
|
+
end
|
156
|
+
|
157
|
+
def longest_line(lines)
|
158
|
+
lines.each_line.max_by { |line| line.chomp.size }.chomp
|
159
|
+
end
|
160
|
+
|
161
|
+
def unlimited_heredoc_length?
|
162
|
+
config.for_cop('Metrics/LineLength')['AllowHeredoc']
|
163
|
+
end
|
164
|
+
|
165
|
+
def max_line_length
|
166
|
+
config.for_cop('Metrics/LineLength')['Max']
|
167
|
+
end
|
168
|
+
|
169
|
+
def correct_by_squiggly(node)
|
170
|
+
lambda do |corrector|
|
171
|
+
if heredoc_indent_type(node) == '~'
|
172
|
+
adjust_squiggly(corrector, node)
|
173
|
+
else
|
174
|
+
adjust_minus(corrector, node)
|
175
|
+
end
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
def adjust_squiggly(corrector, node)
|
180
|
+
corrector.replace(node.loc.heredoc_body, indented_body(node))
|
181
|
+
corrector.replace(node.loc.heredoc_end, indented_end(node))
|
182
|
+
end
|
183
|
+
|
184
|
+
def adjust_minus(corrector, node)
|
185
|
+
heredoc_beginning = node.loc.expression.source
|
186
|
+
corrected = heredoc_beginning.sub(/<<-?/, '<<~')
|
187
|
+
corrector.replace(node.loc.expression, corrected)
|
188
|
+
end
|
189
|
+
|
190
|
+
def correct_by_library(node)
|
191
|
+
lambda do |corrector|
|
192
|
+
corrector.replace(node.loc.heredoc_body, indented_body(node))
|
193
|
+
corrected = ".#{STRIP_METHODS[style]}"
|
194
|
+
corrector.insert_after(node.loc.expression, corrected)
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
def check_style!
|
199
|
+
return if style
|
200
|
+
|
201
|
+
raise Warning, "Auto-correction does not work for #{cop_name}. " \
|
202
|
+
'Please configure EnforcedStyle.'
|
203
|
+
end
|
204
|
+
|
205
|
+
def indented_body(node)
|
206
|
+
body = heredoc_body(node)
|
207
|
+
body_indent_level = indent_level(body)
|
208
|
+
correct_indent_level = base_indent_level(node) + indentation_width
|
209
|
+
body.gsub(/^[^\S\r\n]{#{body_indent_level}}/,
|
210
|
+
' ' * correct_indent_level)
|
211
|
+
end
|
212
|
+
|
213
|
+
def indented_end(node)
|
214
|
+
end_ = heredoc_end(node)
|
215
|
+
end_indent_level = indent_level(end_)
|
216
|
+
correct_indent_level = base_indent_level(node)
|
217
|
+
if end_indent_level < correct_indent_level
|
218
|
+
end_.gsub(/^\s{#{end_indent_level}}/, ' ' * correct_indent_level)
|
219
|
+
else
|
220
|
+
end_
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
def base_indent_level(node)
|
225
|
+
base_line_num = node.loc.expression.line
|
226
|
+
base_line = processed_source.lines[base_line_num - 1]
|
227
|
+
indent_level(base_line)
|
228
|
+
end
|
229
|
+
|
230
|
+
def indent_level(str)
|
231
|
+
indentations = str.lines
|
232
|
+
.map { |line| line[/^\s*/] }
|
233
|
+
.reject { |line| line == "\n" }
|
234
|
+
indentations.empty? ? 0 : indentations.min_by(&:size).size
|
235
|
+
end
|
236
|
+
|
237
|
+
# Returns '~', '-' or nil
|
238
|
+
def heredoc_indent_type(node)
|
239
|
+
node.source[/^<<([~-])/, 1]
|
240
|
+
end
|
241
|
+
|
242
|
+
def indentation_width
|
243
|
+
@config.for_cop('Layout/IndentationWidth')['Width'] || 2
|
244
|
+
end
|
245
|
+
|
246
|
+
def heredoc_body(node)
|
247
|
+
node.loc.heredoc_body.source.scrub
|
248
|
+
end
|
249
|
+
|
250
|
+
def heredoc_end(node)
|
251
|
+
node.loc.heredoc_end.source.scrub
|
252
|
+
end
|
253
|
+
end
|
254
|
+
end
|
255
|
+
end
|
256
|
+
end
|