rubocop 0.78.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +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 +3963 -0
- data/exe/rubocop +17 -0
- data/lib/rubocop.rb +619 -0
- data/lib/rubocop/ast/builder.rb +82 -0
- data/lib/rubocop/ast/node.rb +644 -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 +117 -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/return_node.rb +24 -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 +127 -0
- data/lib/rubocop/cli/command.rb +21 -0
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +105 -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 +73 -0
- data/lib/rubocop/cli/command/version.rb +17 -0
- data/lib/rubocop/cli/environment.rb +21 -0
- data/lib/rubocop/comment_config.rb +201 -0
- data/lib/rubocop/config.rb +251 -0
- data/lib/rubocop/config_loader.rb +273 -0
- data/lib/rubocop/config_loader_resolver.rb +195 -0
- data/lib/rubocop/config_obsoletion.rb +275 -0
- data/lib/rubocop/config_store.rb +48 -0
- data/lib/rubocop/config_validator.rb +248 -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 +145 -0
- data/lib/rubocop/cop/cop.rb +296 -0
- data/lib/rubocop/cop/corrector.rb +172 -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 +48 -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 +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 +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/argument_alignment.rb +93 -0
- data/lib/rubocop/cop/layout/array_alignment.rb +39 -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 +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 +141 -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 +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 +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 +92 -0
- data/lib/rubocop/cop/layout/extra_spacing.rb +201 -0
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +249 -0
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +167 -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 +55 -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 +362 -0
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +289 -0
- data/lib/rubocop/cop/layout/heredoc_indentation.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_comment_space.rb +88 -0
- data/lib/rubocop/cop/layout/leading_empty_lines.rb +53 -0
- data/lib/rubocop/cop/layout/line_length.rb +248 -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/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 +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 +244 -0
- data/lib/rubocop/cop/layout/space_around_operators.rb +207 -0
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +136 -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 +82 -0
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +231 -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_empty_lines.rb +113 -0
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +77 -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_hash_key.rb +38 -0
- data/lib/rubocop/cop/lint/duplicate_methods.rb +239 -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 +164 -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/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_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 +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_cop_disable_directive.rb +263 -0
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +114 -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 +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 +65 -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/suppressed_exception.rb +95 -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/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 +274 -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/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 +84 -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_styles.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/line_length_help.rb +88 -0
- data/lib/rubocop/cop/mixin/match_range.rb +26 -0
- data/lib/rubocop/cop/mixin/method_complexity.rb +57 -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/rational_literal.rb +18 -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 +71 -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 +221 -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/block_parameter_name.rb +49 -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 +212 -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/method_parameter_name.rb +58 -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/variable_name.rb +52 -0
- data/lib/rubocop/cop/naming/variable_number.rb +61 -0
- data/lib/rubocop/cop/offense.rb +216 -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 +70 -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 +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/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 +127 -0
- data/lib/rubocop/cop/style/format_string_token.rb +121 -0
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +159 -0
- data/lib/rubocop/cop/style/global_vars.rb +80 -0
- data/lib/rubocop/cop/style/guard_clause.rb +122 -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 +169 -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 +128 -0
- data/lib/rubocop/cop/style/inline_comment.rb +34 -0
- data/lib/rubocop/cop/style/inverse_methods.rb +193 -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 +125 -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 +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 +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 +107 -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 +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 +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_capital_w.rb +51 -0
- data/lib/rubocop/cop/style/redundant_condition.rb +112 -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_interpolation.rb +98 -0
- data/lib/rubocop/cop/style/redundant_parentheses.rb +231 -0
- data/lib/rubocop/cop/style/redundant_percent_q.rb +112 -0
- data/lib/rubocop/cop/style/redundant_return.rb +171 -0
- data/lib/rubocop/cop/style/redundant_self.rb +171 -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 +275 -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 +211 -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 +167 -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/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 +196 -0
- data/lib/rubocop/cop/util.rb +127 -0
- data/lib/rubocop/cop/utils/format_string.rb +120 -0
- data/lib/rubocop/cop/variable_force.rb +466 -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 +57 -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 +81 -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 +21 -0
- data/lib/rubocop/node_pattern.rb +801 -0
- data/lib/rubocop/options.rb +460 -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 +80 -0
- data/lib/rubocop/remote_config.rb +106 -0
- data/lib/rubocop/result_cache.rb +207 -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 +379 -0
- data/lib/rubocop/string_interpreter.rb +57 -0
- data/lib/rubocop/string_util.rb +14 -0
- data/lib/rubocop/target_finder.rb +196 -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 +782 -0
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'set'
|
|
4
|
+
|
|
5
|
+
module RuboCop
|
|
6
|
+
module Cop
|
|
7
|
+
module Layout
|
|
8
|
+
# This cop checks for extra/unnecessary whitespace.
|
|
9
|
+
#
|
|
10
|
+
# @example
|
|
11
|
+
#
|
|
12
|
+
# # good if AllowForAlignment is true
|
|
13
|
+
# name = "RuboCop"
|
|
14
|
+
# # Some comment and an empty line
|
|
15
|
+
#
|
|
16
|
+
# website += "/rubocop-hq/rubocop" unless cond
|
|
17
|
+
# puts "rubocop" if debug
|
|
18
|
+
#
|
|
19
|
+
# # bad for any configuration
|
|
20
|
+
# set_app("RuboCop")
|
|
21
|
+
# website = "https://github.com/rubocop-hq/rubocop"
|
|
22
|
+
#
|
|
23
|
+
# # good only if AllowBeforeTrailingComments is true
|
|
24
|
+
# object.method(arg) # this is a comment
|
|
25
|
+
#
|
|
26
|
+
# # good even if AllowBeforeTrailingComments is false or not set
|
|
27
|
+
# object.method(arg) # this is a comment
|
|
28
|
+
#
|
|
29
|
+
# # good with either AllowBeforeTrailingComments or AllowForAlignment
|
|
30
|
+
# object.method(arg) # this is a comment
|
|
31
|
+
# another_object.method(arg) # this is another comment
|
|
32
|
+
# some_object.method(arg) # this is some comment
|
|
33
|
+
class ExtraSpacing < Cop
|
|
34
|
+
include PrecedingFollowingAlignment
|
|
35
|
+
include RangeHelp
|
|
36
|
+
|
|
37
|
+
MSG_UNNECESSARY = 'Unnecessary spacing detected.'
|
|
38
|
+
MSG_UNALIGNED_ASGN = '`=` is not aligned with the %<location>s ' \
|
|
39
|
+
'assignment.'
|
|
40
|
+
|
|
41
|
+
def investigate(processed_source)
|
|
42
|
+
return if processed_source.blank?
|
|
43
|
+
|
|
44
|
+
@corrected = Set.new if force_equal_sign_alignment?
|
|
45
|
+
|
|
46
|
+
processed_source.tokens.each_cons(2) do |token1, token2|
|
|
47
|
+
check_tokens(processed_source.ast, token1, token2)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def autocorrect(range)
|
|
52
|
+
lambda do |corrector|
|
|
53
|
+
if range.source.end_with?('=')
|
|
54
|
+
align_equal_signs(range, corrector)
|
|
55
|
+
else
|
|
56
|
+
corrector.remove(range)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
private
|
|
62
|
+
|
|
63
|
+
def check_tokens(ast, token1, token2)
|
|
64
|
+
return if token2.type == :tNL
|
|
65
|
+
|
|
66
|
+
if force_equal_sign_alignment? && assignment_tokens.include?(token2)
|
|
67
|
+
check_assignment(token2)
|
|
68
|
+
else
|
|
69
|
+
check_other(token1, token2, ast)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def check_assignment(token)
|
|
74
|
+
return unless aligned_with_preceding_assignment(token) == :no
|
|
75
|
+
|
|
76
|
+
message = format(MSG_UNALIGNED_ASGN, location: 'preceding')
|
|
77
|
+
add_offense(token.pos, location: token.pos, message: message)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def check_other(token1, token2, ast)
|
|
81
|
+
return false if allow_for_trailing_comments? &&
|
|
82
|
+
token2.text.start_with?('#')
|
|
83
|
+
|
|
84
|
+
extra_space_range(token1, token2) do |range|
|
|
85
|
+
next if ignored_range?(ast, range.begin_pos)
|
|
86
|
+
|
|
87
|
+
add_offense(range, location: range, message: MSG_UNNECESSARY)
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def extra_space_range(token1, token2)
|
|
92
|
+
return if token1.line != token2.line
|
|
93
|
+
|
|
94
|
+
start_pos = token1.end_pos
|
|
95
|
+
end_pos = token2.begin_pos - 1
|
|
96
|
+
return if end_pos <= start_pos
|
|
97
|
+
|
|
98
|
+
return if allow_for_alignment? && aligned_tok?(token2)
|
|
99
|
+
|
|
100
|
+
yield range_between(start_pos, end_pos)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def aligned_tok?(token)
|
|
104
|
+
if token.comment?
|
|
105
|
+
aligned_comments?(token)
|
|
106
|
+
else
|
|
107
|
+
aligned_with_something?(token.pos)
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def ignored_range?(ast, start_pos)
|
|
112
|
+
ignored_ranges(ast).any? { |r| r.include?(start_pos) }
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Returns an array of ranges that should not be reported. It's the
|
|
116
|
+
# extra spaces between the keys and values in a multiline hash,
|
|
117
|
+
# since those are handled by the Layout/HashAlignment cop.
|
|
118
|
+
def ignored_ranges(ast)
|
|
119
|
+
return [] unless ast
|
|
120
|
+
|
|
121
|
+
@ignored_ranges ||= on_node(:pair, ast).map do |pair|
|
|
122
|
+
next if pair.parent.single_line?
|
|
123
|
+
|
|
124
|
+
key, value = *pair
|
|
125
|
+
key.source_range.end_pos...value.source_range.begin_pos
|
|
126
|
+
end.compact
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def aligned_comments?(comment_token)
|
|
130
|
+
ix = processed_source.comments.index do |comment|
|
|
131
|
+
comment.loc.expression.begin_pos == comment_token.begin_pos
|
|
132
|
+
end
|
|
133
|
+
aligned_with_previous_comment?(ix) || aligned_with_next_comment?(ix)
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def aligned_with_previous_comment?(index)
|
|
137
|
+
index.positive? && comment_column(index - 1) == comment_column(index)
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def aligned_with_next_comment?(index)
|
|
141
|
+
index < processed_source.comments.length - 1 &&
|
|
142
|
+
comment_column(index + 1) == comment_column(index)
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def comment_column(index)
|
|
146
|
+
processed_source.comments[index].loc.column
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def force_equal_sign_alignment?
|
|
150
|
+
cop_config['ForceEqualSignAlignment']
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def align_equal_signs(range, corrector)
|
|
154
|
+
lines = all_relevant_assignment_lines(range.line)
|
|
155
|
+
tokens = assignment_tokens.select { |t| lines.include?(t.line) }
|
|
156
|
+
|
|
157
|
+
columns = tokens.map { |t| align_column(t) }
|
|
158
|
+
align_to = columns.max
|
|
159
|
+
|
|
160
|
+
tokens.each { |token| align_equal_sign(corrector, token, align_to) }
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
def align_equal_sign(corrector, token, align_to)
|
|
164
|
+
return unless @corrected.add?(token)
|
|
165
|
+
|
|
166
|
+
diff = align_to - token.pos.last_column
|
|
167
|
+
|
|
168
|
+
if diff.positive?
|
|
169
|
+
corrector.insert_before(token.pos, ' ' * diff)
|
|
170
|
+
elsif diff.negative?
|
|
171
|
+
corrector.remove_preceding(token.pos, -diff)
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
def all_relevant_assignment_lines(line_number)
|
|
176
|
+
last_line_number = processed_source.lines.size
|
|
177
|
+
|
|
178
|
+
(
|
|
179
|
+
relevant_assignment_lines(line_number.downto(1)) +
|
|
180
|
+
relevant_assignment_lines(line_number.upto(last_line_number))
|
|
181
|
+
)
|
|
182
|
+
.uniq
|
|
183
|
+
.sort
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
def align_column(asgn_token)
|
|
187
|
+
# if we removed unneeded spaces from the beginning of this =,
|
|
188
|
+
# what column would it end from?
|
|
189
|
+
line = processed_source.lines[asgn_token.line - 1]
|
|
190
|
+
leading = line[0...asgn_token.column]
|
|
191
|
+
spaces = leading.size - (leading =~ / *\Z/)
|
|
192
|
+
asgn_token.pos.last_column - spaces + 1
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
def allow_for_trailing_comments?
|
|
196
|
+
cop_config['AllowBeforeTrailingComments']
|
|
197
|
+
end
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
end
|
|
201
|
+
end
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RuboCop
|
|
4
|
+
module Cop
|
|
5
|
+
# rubocop:disable Layout/LineLength
|
|
6
|
+
module Layout
|
|
7
|
+
# This cop checks the indentation of the first argument in a method call.
|
|
8
|
+
# Arguments after the first one are checked by Layout/ArgumentAlignment,
|
|
9
|
+
# not by this cop.
|
|
10
|
+
#
|
|
11
|
+
# For indenting the first parameter of method *definitions*, check out
|
|
12
|
+
# Layout/FirstParameterIndentation.
|
|
13
|
+
#
|
|
14
|
+
# @example
|
|
15
|
+
#
|
|
16
|
+
# # bad
|
|
17
|
+
# some_method(
|
|
18
|
+
# first_param,
|
|
19
|
+
# second_param)
|
|
20
|
+
#
|
|
21
|
+
# foo = some_method(
|
|
22
|
+
# first_param,
|
|
23
|
+
# second_param)
|
|
24
|
+
#
|
|
25
|
+
# foo = some_method(nested_call(
|
|
26
|
+
# nested_first_param),
|
|
27
|
+
# second_param)
|
|
28
|
+
#
|
|
29
|
+
# foo = some_method(
|
|
30
|
+
# nested_call(
|
|
31
|
+
# nested_first_param),
|
|
32
|
+
# second_param)
|
|
33
|
+
#
|
|
34
|
+
# some_method nested_call(
|
|
35
|
+
# nested_first_param),
|
|
36
|
+
# second_param
|
|
37
|
+
#
|
|
38
|
+
# @example EnforcedStyle: consistent
|
|
39
|
+
# # The first argument should always be indented one step more than the
|
|
40
|
+
# # preceding line.
|
|
41
|
+
#
|
|
42
|
+
# # good
|
|
43
|
+
# some_method(
|
|
44
|
+
# first_param,
|
|
45
|
+
# second_param)
|
|
46
|
+
#
|
|
47
|
+
# foo = some_method(
|
|
48
|
+
# first_param,
|
|
49
|
+
# second_param)
|
|
50
|
+
#
|
|
51
|
+
# foo = some_method(nested_call(
|
|
52
|
+
# nested_first_param),
|
|
53
|
+
# second_param)
|
|
54
|
+
#
|
|
55
|
+
# foo = some_method(
|
|
56
|
+
# nested_call(
|
|
57
|
+
# nested_first_param),
|
|
58
|
+
# second_param)
|
|
59
|
+
#
|
|
60
|
+
# some_method nested_call(
|
|
61
|
+
# nested_first_param),
|
|
62
|
+
# second_param
|
|
63
|
+
#
|
|
64
|
+
# @example EnforcedStyle: consistent_relative_to_receiver
|
|
65
|
+
# # The first argument should always be indented one level relative to
|
|
66
|
+
# # the parent that is receiving the argument
|
|
67
|
+
#
|
|
68
|
+
# # good
|
|
69
|
+
# some_method(
|
|
70
|
+
# first_param,
|
|
71
|
+
# second_param)
|
|
72
|
+
#
|
|
73
|
+
# foo = some_method(
|
|
74
|
+
# first_param,
|
|
75
|
+
# second_param)
|
|
76
|
+
#
|
|
77
|
+
# foo = some_method(nested_call(
|
|
78
|
+
# nested_first_param),
|
|
79
|
+
# second_param)
|
|
80
|
+
#
|
|
81
|
+
# foo = some_method(
|
|
82
|
+
# nested_call(
|
|
83
|
+
# nested_first_param),
|
|
84
|
+
# second_param)
|
|
85
|
+
#
|
|
86
|
+
# some_method nested_call(
|
|
87
|
+
# nested_first_param),
|
|
88
|
+
# second_params
|
|
89
|
+
#
|
|
90
|
+
# @example EnforcedStyle: special_for_inner_method_call
|
|
91
|
+
# # The first argument should normally be indented one step more than
|
|
92
|
+
# # the preceding line, but if it's a argument for a method call that
|
|
93
|
+
# # is itself a argument in a method call, then the inner argument
|
|
94
|
+
# # should be indented relative to the inner method.
|
|
95
|
+
#
|
|
96
|
+
# # good
|
|
97
|
+
# some_method(
|
|
98
|
+
# first_param,
|
|
99
|
+
# second_param)
|
|
100
|
+
#
|
|
101
|
+
# foo = some_method(
|
|
102
|
+
# first_param,
|
|
103
|
+
# second_param)
|
|
104
|
+
#
|
|
105
|
+
# foo = some_method(nested_call(
|
|
106
|
+
# nested_first_param),
|
|
107
|
+
# second_param)
|
|
108
|
+
#
|
|
109
|
+
# foo = some_method(
|
|
110
|
+
# nested_call(
|
|
111
|
+
# nested_first_param),
|
|
112
|
+
# second_param)
|
|
113
|
+
#
|
|
114
|
+
# some_method nested_call(
|
|
115
|
+
# nested_first_param),
|
|
116
|
+
# second_param
|
|
117
|
+
#
|
|
118
|
+
# @example EnforcedStyle: special_for_inner_method_call_in_parentheses (default)
|
|
119
|
+
# # Same as `special_for_inner_method_call` except that the special rule
|
|
120
|
+
# # only applies if the outer method call encloses its arguments in
|
|
121
|
+
# # parentheses.
|
|
122
|
+
#
|
|
123
|
+
# # good
|
|
124
|
+
# some_method(
|
|
125
|
+
# first_param,
|
|
126
|
+
# second_param)
|
|
127
|
+
#
|
|
128
|
+
# foo = some_method(
|
|
129
|
+
# first_param,
|
|
130
|
+
# second_param)
|
|
131
|
+
#
|
|
132
|
+
# foo = some_method(nested_call(
|
|
133
|
+
# nested_first_param),
|
|
134
|
+
# second_param)
|
|
135
|
+
#
|
|
136
|
+
# foo = some_method(
|
|
137
|
+
# nested_call(
|
|
138
|
+
# nested_first_param),
|
|
139
|
+
# second_param)
|
|
140
|
+
#
|
|
141
|
+
# some_method nested_call(
|
|
142
|
+
# nested_first_param),
|
|
143
|
+
# second_param
|
|
144
|
+
#
|
|
145
|
+
class FirstArgumentIndentation < Cop
|
|
146
|
+
# rubocop:enable Layout/LineLength
|
|
147
|
+
include Alignment
|
|
148
|
+
include ConfigurableEnforcedStyle
|
|
149
|
+
include RangeHelp
|
|
150
|
+
|
|
151
|
+
MSG = 'Indent the first argument one step more than %<base>s.'
|
|
152
|
+
|
|
153
|
+
def on_send(node)
|
|
154
|
+
return if !node.arguments? || node.operator_method?
|
|
155
|
+
|
|
156
|
+
indent = base_indentation(node) + configured_indentation_width
|
|
157
|
+
|
|
158
|
+
check_alignment([node.first_argument], indent)
|
|
159
|
+
end
|
|
160
|
+
alias on_csend on_send
|
|
161
|
+
|
|
162
|
+
def autocorrect(node)
|
|
163
|
+
AlignmentCorrector.correct(processed_source, node, column_delta)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
private
|
|
167
|
+
|
|
168
|
+
def message(arg_node)
|
|
169
|
+
return 'Bad indentation of the first argument.' unless arg_node
|
|
170
|
+
|
|
171
|
+
send_node = arg_node.parent
|
|
172
|
+
text = base_range(send_node, arg_node).source.strip
|
|
173
|
+
base = if text !~ /\n/ && special_inner_call_indentation?(send_node)
|
|
174
|
+
"`#{text}`"
|
|
175
|
+
elsif comment_line?(text.lines.reverse_each.first)
|
|
176
|
+
'the start of the previous line (not counting the comment)'
|
|
177
|
+
else
|
|
178
|
+
'the start of the previous line'
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
format(MSG, base: base)
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
def base_indentation(node)
|
|
185
|
+
if special_inner_call_indentation?(node)
|
|
186
|
+
column_of(base_range(node, node.first_argument))
|
|
187
|
+
else
|
|
188
|
+
previous_code_line(node.first_argument.first_line) =~ /\S/
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def special_inner_call_indentation?(node)
|
|
193
|
+
return false if style == :consistent
|
|
194
|
+
return true if style == :consistent_relative_to_receiver
|
|
195
|
+
|
|
196
|
+
parent = node.parent
|
|
197
|
+
|
|
198
|
+
return false unless eligible_method_call?(parent)
|
|
199
|
+
return false if !parent.parenthesized? &&
|
|
200
|
+
style == :special_for_inner_method_call_in_parentheses
|
|
201
|
+
|
|
202
|
+
# The node must begin inside the parent, otherwise node is the first
|
|
203
|
+
# part of a chained method call.
|
|
204
|
+
node.source_range.begin_pos > parent.source_range.begin_pos
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
def_node_matcher :eligible_method_call?, <<~PATTERN
|
|
208
|
+
(send _ !:[]= ...)
|
|
209
|
+
PATTERN
|
|
210
|
+
|
|
211
|
+
def base_range(send_node, arg_node)
|
|
212
|
+
range_between(send_node.source_range.begin_pos,
|
|
213
|
+
arg_node.source_range.begin_pos)
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
# Returns the column of the given range. For single line ranges, this
|
|
217
|
+
# is simple. For ranges with line breaks, we look a the last code line.
|
|
218
|
+
def column_of(range)
|
|
219
|
+
source = range.source.strip
|
|
220
|
+
if source.include?("\n")
|
|
221
|
+
previous_code_line(range.line + source.count("\n") + 1) =~ /\S/
|
|
222
|
+
else
|
|
223
|
+
display_column(range)
|
|
224
|
+
end
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
# Takes the line number of a given code line and returns a string
|
|
228
|
+
# containing the previous line that's not a comment line or a blank
|
|
229
|
+
# line.
|
|
230
|
+
def previous_code_line(line_number)
|
|
231
|
+
line = ''
|
|
232
|
+
while line.blank? || comment_lines.include?(line_number)
|
|
233
|
+
line_number -= 1
|
|
234
|
+
line = processed_source.lines[line_number - 1]
|
|
235
|
+
end
|
|
236
|
+
line
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
def comment_lines
|
|
240
|
+
@comment_lines ||=
|
|
241
|
+
processed_source
|
|
242
|
+
.comments
|
|
243
|
+
.select { |c| begins_its_line?(c.loc.expression) }
|
|
244
|
+
.map { |c| c.loc.line }
|
|
245
|
+
end
|
|
246
|
+
end
|
|
247
|
+
end
|
|
248
|
+
end
|
|
249
|
+
end
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RuboCop
|
|
4
|
+
module Cop
|
|
5
|
+
module Layout
|
|
6
|
+
# This cop checks the indentation of the first element in an array literal
|
|
7
|
+
# where the opening bracket and the first element are on separate lines.
|
|
8
|
+
# The other elements' indentations are handled by the ArrayAlignment cop.
|
|
9
|
+
#
|
|
10
|
+
# By default, array literals that are arguments in a method call with
|
|
11
|
+
# parentheses, and where the opening square bracket of the array is on the
|
|
12
|
+
# same line as the opening parenthesis of the method call, shall have
|
|
13
|
+
# their first element indented one step (two spaces) more than the
|
|
14
|
+
# position inside the opening parenthesis.
|
|
15
|
+
#
|
|
16
|
+
# Other array literals shall have their first element indented one step
|
|
17
|
+
# more than the start of the line where the opening square bracket is.
|
|
18
|
+
#
|
|
19
|
+
# This default style is called 'special_inside_parentheses'. Alternative
|
|
20
|
+
# styles are 'consistent' and 'align_brackets'. Here are examples:
|
|
21
|
+
#
|
|
22
|
+
# @example EnforcedStyle: special_inside_parentheses (default)
|
|
23
|
+
# # The `special_inside_parentheses` style enforces that the first
|
|
24
|
+
# # element in an array literal where the opening bracket and first
|
|
25
|
+
# # element are on separate lines is indented one step (two spaces) more
|
|
26
|
+
# # than the position inside the opening parenthesis.
|
|
27
|
+
#
|
|
28
|
+
# #bad
|
|
29
|
+
# array = [
|
|
30
|
+
# :value
|
|
31
|
+
# ]
|
|
32
|
+
# and_in_a_method_call([
|
|
33
|
+
# :no_difference
|
|
34
|
+
# ])
|
|
35
|
+
#
|
|
36
|
+
# #good
|
|
37
|
+
# array = [
|
|
38
|
+
# :value
|
|
39
|
+
# ]
|
|
40
|
+
# but_in_a_method_call([
|
|
41
|
+
# :its_like_this
|
|
42
|
+
# ])
|
|
43
|
+
#
|
|
44
|
+
# @example EnforcedStyle: consistent
|
|
45
|
+
# # The `consistent` style enforces that the first element in an array
|
|
46
|
+
# # literal where the opening bracket and the first element are on
|
|
47
|
+
# # separate lines is indented the same as an array literal which is not
|
|
48
|
+
# # defined inside a method call.
|
|
49
|
+
#
|
|
50
|
+
# #bad
|
|
51
|
+
# # consistent
|
|
52
|
+
# array = [
|
|
53
|
+
# :value
|
|
54
|
+
# ]
|
|
55
|
+
# but_in_a_method_call([
|
|
56
|
+
# :its_like_this
|
|
57
|
+
# ])
|
|
58
|
+
#
|
|
59
|
+
# #good
|
|
60
|
+
# array = [
|
|
61
|
+
# :value
|
|
62
|
+
# ]
|
|
63
|
+
# and_in_a_method_call([
|
|
64
|
+
# :no_difference
|
|
65
|
+
# ])
|
|
66
|
+
#
|
|
67
|
+
# @example EnforcedStyle: align_brackets
|
|
68
|
+
# # The `align_brackets` style enforces that the opening and closing
|
|
69
|
+
# # brackets are indented to the same position.
|
|
70
|
+
#
|
|
71
|
+
# #bad
|
|
72
|
+
# # align_brackets
|
|
73
|
+
# and_now_for_something = [
|
|
74
|
+
# :completely_different
|
|
75
|
+
# ]
|
|
76
|
+
#
|
|
77
|
+
# #good
|
|
78
|
+
# # align_brackets
|
|
79
|
+
# and_now_for_something = [
|
|
80
|
+
# :completely_different
|
|
81
|
+
# ]
|
|
82
|
+
class FirstArrayElementIndentation < Cop
|
|
83
|
+
include Alignment
|
|
84
|
+
include ConfigurableEnforcedStyle
|
|
85
|
+
include MultilineElementIndentation
|
|
86
|
+
|
|
87
|
+
MSG = 'Use %<configured_indentation_width>d spaces for indentation ' \
|
|
88
|
+
'in an array, relative to %<base_description>s.'
|
|
89
|
+
|
|
90
|
+
def on_array(node)
|
|
91
|
+
check(node, nil) if node.loc.begin
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def on_send(node)
|
|
95
|
+
each_argument_node(node, :array) do |array_node, left_parenthesis|
|
|
96
|
+
check(array_node, left_parenthesis)
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
alias on_csend on_send
|
|
100
|
+
|
|
101
|
+
def autocorrect(node)
|
|
102
|
+
AlignmentCorrector.correct(processed_source, node, @column_delta)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
private
|
|
106
|
+
|
|
107
|
+
def brace_alignment_style
|
|
108
|
+
:align_brackets
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def check(array_node, left_parenthesis)
|
|
112
|
+
return if ignored_node?(array_node)
|
|
113
|
+
|
|
114
|
+
left_bracket = array_node.loc.begin
|
|
115
|
+
first_elem = array_node.values.first
|
|
116
|
+
if first_elem
|
|
117
|
+
return if first_elem.source_range.line == left_bracket.line
|
|
118
|
+
|
|
119
|
+
check_first(first_elem, left_bracket, left_parenthesis, 0)
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
check_right_bracket(array_node.loc.end, left_bracket,
|
|
123
|
+
left_parenthesis)
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def check_right_bracket(right_bracket, left_bracket, left_parenthesis)
|
|
127
|
+
# if the right bracket is on the same line as the last value, accept
|
|
128
|
+
return if right_bracket.source_line[0...right_bracket.column] =~ /\S/
|
|
129
|
+
|
|
130
|
+
expected_column = base_column(left_bracket, left_parenthesis)
|
|
131
|
+
@column_delta = expected_column - right_bracket.column
|
|
132
|
+
return if @column_delta.zero?
|
|
133
|
+
|
|
134
|
+
msg = if style == :align_brackets
|
|
135
|
+
'Indent the right bracket the same as the left bracket.'
|
|
136
|
+
elsif style == :special_inside_parentheses && left_parenthesis
|
|
137
|
+
'Indent the right bracket the same as the first position ' \
|
|
138
|
+
'after the preceding left parenthesis.'
|
|
139
|
+
else
|
|
140
|
+
'Indent the right bracket the same as the start of the line' \
|
|
141
|
+
' where the left bracket is.'
|
|
142
|
+
end
|
|
143
|
+
add_offense(right_bracket, location: right_bracket, message: msg)
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
# Returns the description of what the correct indentation is based on.
|
|
147
|
+
def base_description(left_parenthesis)
|
|
148
|
+
if style == :align_brackets
|
|
149
|
+
'the position of the opening bracket'
|
|
150
|
+
elsif left_parenthesis && style == :special_inside_parentheses
|
|
151
|
+
'the first position after the preceding left parenthesis'
|
|
152
|
+
else
|
|
153
|
+
'the start of the line where the left square bracket is'
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def message(base_description)
|
|
158
|
+
format(
|
|
159
|
+
MSG,
|
|
160
|
+
configured_indentation_width: configured_indentation_width,
|
|
161
|
+
base_description: base_description
|
|
162
|
+
)
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
end
|