rubocop 0.49.1 → 0.52.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 +4 -4
- data/README.md +6 -9
- data/bin/rubocop +1 -1
- data/config/default.yml +264 -118
- data/config/disabled.yml +13 -9
- data/config/enabled.yml +1156 -918
- data/lib/rubocop.rb +555 -489
- data/lib/rubocop/ast/builder.rb +6 -1
- data/lib/rubocop/ast/node.rb +68 -52
- data/lib/rubocop/ast/node/args_node.rb +15 -10
- data/lib/rubocop/ast/node/array_node.rb +10 -1
- data/lib/rubocop/ast/node/block_node.rb +9 -0
- data/lib/rubocop/ast/node/def_node.rb +71 -0
- data/lib/rubocop/ast/node/for_node.rb +8 -0
- data/lib/rubocop/ast/node/if_node.rb +10 -2
- data/lib/rubocop/ast/node/mixin/basic_literal_node.rb +16 -0
- data/lib/rubocop/ast/node/mixin/collection_node.rb +15 -0
- data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +174 -0
- data/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +89 -0
- data/lib/rubocop/ast/node/mixin/parameterized_node.rb +18 -31
- data/lib/rubocop/ast/node/regexp_node.rb +35 -0
- data/lib/rubocop/ast/node/send_node.rb +21 -150
- data/lib/rubocop/ast/node/str_node.rb +14 -0
- data/lib/rubocop/ast/node/super_node.rb +3 -24
- data/lib/rubocop/ast/node/symbol_node.rb +20 -0
- data/lib/rubocop/ast/node/yield_node.rb +21 -0
- data/lib/rubocop/ast/traversal.rb +7 -7
- data/lib/rubocop/cached_data.rb +1 -6
- data/lib/rubocop/cli.rb +59 -13
- data/lib/rubocop/comment_config.rb +2 -5
- data/lib/rubocop/config.rb +136 -29
- data/lib/rubocop/config_loader.rb +61 -104
- data/lib/rubocop/config_loader_resolver.rb +102 -4
- data/lib/rubocop/cop/autocorrect_logic.rb +1 -1
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +13 -11
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +67 -0
- data/lib/rubocop/cop/bundler/ordered_gems.rb +7 -58
- data/lib/rubocop/cop/commissioner.rb +6 -3
- data/lib/rubocop/cop/cop.rb +11 -6
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +102 -0
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +97 -0
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +87 -0
- data/lib/rubocop/cop/generator.rb +122 -25
- data/lib/rubocop/cop/internal_affairs.rb +6 -2
- data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +46 -0
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +16 -5
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +54 -0
- data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +59 -0
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +71 -0
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +3 -3
- data/lib/rubocop/cop/layout/access_modifier_indentation.rb +6 -10
- data/lib/rubocop/cop/layout/align_array.rb +2 -2
- data/lib/rubocop/cop/layout/align_hash.rb +18 -18
- data/lib/rubocop/cop/layout/align_parameters.rb +11 -23
- data/lib/rubocop/cop/layout/block_end_newline.rb +20 -6
- data/lib/rubocop/cop/layout/case_indentation.rb +15 -18
- data/lib/rubocop/cop/layout/class_structure.rb +306 -0
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +7 -6
- data/lib/rubocop/cop/layout/comment_indentation.rb +42 -3
- data/lib/rubocop/cop/layout/dot_position.rb +31 -13
- data/lib/rubocop/cop/layout/else_alignment.rb +37 -17
- data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +1 -1
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +22 -18
- data/lib/rubocop/cop/layout/empty_lines.rb +16 -2
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +23 -6
- data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +89 -0
- data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +2 -2
- data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +4 -8
- data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +30 -5
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +10 -6
- data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +5 -5
- data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +22 -7
- data/lib/rubocop/cop/layout/end_of_line.rb +2 -2
- data/lib/rubocop/cop/layout/extra_spacing.rb +23 -26
- data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +3 -3
- data/lib/rubocop/cop/layout/first_parameter_indentation.rb +9 -3
- data/lib/rubocop/cop/layout/indent_array.rb +68 -21
- data/lib/rubocop/cop/layout/indent_hash.rb +71 -26
- data/lib/rubocop/cop/layout/indent_heredoc.rb +70 -35
- data/lib/rubocop/cop/layout/indentation_consistency.rb +1 -2
- data/lib/rubocop/cop/layout/indentation_width.rb +40 -27
- data/lib/rubocop/cop/layout/initial_indentation.rb +10 -7
- data/lib/rubocop/cop/layout/leading_comment_space.rb +32 -17
- data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +47 -14
- data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +12 -11
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +19 -16
- data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +46 -13
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +29 -27
- data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +7 -3
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +6 -0
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +12 -4
- data/lib/rubocop/cop/layout/space_after_colon.rb +13 -6
- data/lib/rubocop/cop/layout/space_after_comma.rb +11 -1
- data/lib/rubocop/cop/layout/space_after_method_name.rb +8 -6
- data/lib/rubocop/cop/layout/space_after_not.rb +1 -1
- data/lib/rubocop/cop/layout/space_after_semicolon.rb +8 -1
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +32 -25
- data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +28 -17
- data/lib/rubocop/cop/layout/space_around_keyword.rb +22 -16
- data/lib/rubocop/cop/layout/space_around_operators.rb +27 -14
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +61 -12
- data/lib/rubocop/cop/layout/space_before_comma.rb +12 -1
- data/lib/rubocop/cop/layout/space_before_comment.rb +10 -5
- data/lib/rubocop/cop/layout/space_before_first_arg.rb +5 -4
- data/lib/rubocop/cop/layout/space_before_semicolon.rb +8 -1
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +12 -14
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +235 -0
- data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +4 -4
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +89 -18
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +62 -36
- data/lib/rubocop/cop/layout/space_inside_parens.rb +40 -3
- data/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_range_literal.rb +15 -15
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +81 -0
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +32 -17
- data/lib/rubocop/cop/layout/tab.rb +7 -4
- data/lib/rubocop/cop/layout/trailing_blank_lines.rb +11 -9
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +1 -1
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +12 -19
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +16 -2
- data/lib/rubocop/cop/lint/block_alignment.rb +42 -30
- data/lib/rubocop/cop/lint/boolean_symbol.rb +38 -0
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +3 -14
- data/lib/rubocop/cop/lint/condition_position.rb +5 -1
- data/lib/rubocop/cop/lint/debugger.rb +18 -11
- data/lib/rubocop/cop/lint/def_end_alignment.rb +9 -14
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +4 -4
- data/lib/rubocop/cop/lint/duplicate_case_condition.rb +3 -3
- data/lib/rubocop/cop/lint/duplicate_methods.rb +75 -5
- data/lib/rubocop/cop/lint/duplicated_key.rb +1 -1
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -1
- data/lib/rubocop/cop/lint/else_layout.rb +3 -3
- data/lib/rubocop/cop/lint/empty_ensure.rb +1 -1
- data/lib/rubocop/cop/lint/empty_expression.rb +1 -1
- data/lib/rubocop/cop/lint/empty_interpolation.rb +1 -1
- data/lib/rubocop/cop/lint/empty_when.rb +1 -1
- data/lib/rubocop/cop/lint/end_alignment.rb +13 -14
- data/lib/rubocop/cop/lint/end_in_method.rb +1 -1
- data/lib/rubocop/cop/lint/ensure_return.rb +1 -1
- data/lib/rubocop/cop/lint/float_out_of_range.rb +5 -5
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +36 -41
- data/lib/rubocop/cop/lint/handle_exceptions.rb +1 -1
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -1
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +25 -20
- data/lib/rubocop/cop/lint/inherit_exception.rb +16 -19
- data/lib/rubocop/cop/lint/interpolation_check.rb +37 -0
- data/lib/rubocop/cop/lint/{literal_in_condition.rb → literal_as_condition.rb} +21 -7
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +1 -1
- data/lib/rubocop/cop/lint/loop.rb +1 -1
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +81 -0
- data/lib/rubocop/cop/lint/multiple_compare.rb +1 -1
- data/lib/rubocop/cop/lint/nested_method_definition.rb +6 -8
- data/lib/rubocop/cop/lint/nested_percent_literal.rb +58 -0
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -1
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +4 -4
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +4 -3
- data/lib/rubocop/cop/lint/percent_string_array.rb +13 -22
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +12 -12
- data/lib/rubocop/cop/lint/rand_one.rb +8 -2
- data/lib/rubocop/cop/lint/redundant_with_index.rb +80 -0
- data/lib/rubocop/cop/lint/redundant_with_object.rb +81 -0
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +29 -0
- data/lib/rubocop/cop/lint/require_parentheses.rb +5 -3
- data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
- data/lib/rubocop/cop/lint/rescue_type.rb +18 -9
- data/lib/rubocop/cop/lint/return_in_void_context.rb +74 -0
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +1 -1
- data/lib/rubocop/cop/lint/script_permission.rb +8 -1
- data/lib/rubocop/cop/lint/shadowed_argument.rb +146 -0
- data/lib/rubocop/cop/lint/shadowed_exception.rb +37 -10
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +1 -1
- data/lib/rubocop/cop/lint/string_conversion_in_interpolation.rb +7 -7
- data/lib/rubocop/cop/lint/syntax.rb +23 -20
- data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +1 -1
- data/lib/rubocop/cop/lint/unified_integer.rb +5 -4
- data/lib/rubocop/cop/lint/unneeded_disable.rb +41 -16
- data/lib/rubocop/cop/lint/unneeded_require_statement.rb +51 -0
- data/lib/rubocop/cop/lint/unneeded_splat_expansion.rb +45 -19
- data/lib/rubocop/cop/lint/unreachable_code.rb +53 -8
- data/lib/rubocop/cop/lint/unused_method_argument.rb +2 -1
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +74 -0
- data/lib/rubocop/cop/lint/uri_regexp.rb +73 -0
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +12 -16
- data/lib/rubocop/cop/lint/useless_assignment.rb +1 -1
- data/lib/rubocop/cop/lint/useless_comparison.rb +1 -1
- data/lib/rubocop/cop/lint/useless_setter_call.rb +15 -12
- data/lib/rubocop/cop/lint/void.rb +38 -27
- data/lib/rubocop/cop/message_annotator.rb +4 -2
- data/lib/rubocop/cop/metrics/abc_size.rb +2 -2
- data/lib/rubocop/cop/metrics/block_nesting.rb +1 -1
- data/lib/rubocop/cop/metrics/class_length.rb +3 -1
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +2 -1
- data/lib/rubocop/cop/metrics/line_length.rb +8 -5
- data/lib/rubocop/cop/metrics/method_length.rb +8 -3
- data/lib/rubocop/cop/metrics/module_length.rb +3 -1
- data/lib/rubocop/cop/metrics/parameter_lists.rb +14 -5
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +2 -1
- data/lib/rubocop/cop/mixin/array_hash_indentation.rb +3 -2
- data/lib/rubocop/cop/mixin/autocorrect_alignment.rb +2 -2
- data/lib/rubocop/cop/mixin/code_length.rb +1 -1
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +1 -1
- data/lib/rubocop/cop/mixin/def_node.rb +1 -1
- data/lib/rubocop/cop/mixin/documentation_comment.rb +1 -1
- data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +14 -7
- data/lib/rubocop/cop/mixin/empty_parameter.rb +23 -0
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +8 -4
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +3 -3
- data/lib/rubocop/cop/mixin/first_element_line_break.rb +12 -3
- data/lib/rubocop/cop/mixin/heredoc.rb +28 -0
- data/lib/rubocop/cop/mixin/method_complexity.rb +33 -7
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +74 -33
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +34 -8
- data/lib/rubocop/cop/mixin/negative_conditional.rb +4 -1
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +67 -0
- data/lib/rubocop/cop/mixin/parentheses.rb +12 -0
- data/lib/rubocop/cop/mixin/parser_diagnostic.rb +4 -1
- data/lib/rubocop/cop/mixin/percent_array.rb +52 -0
- data/lib/rubocop/cop/mixin/space_after_punctuation.rb +9 -8
- data/lib/rubocop/cop/mixin/space_before_punctuation.rb +11 -10
- data/lib/rubocop/cop/mixin/statement_modifier.rb +7 -17
- data/lib/rubocop/cop/mixin/string_help.rb +1 -1
- data/lib/rubocop/cop/mixin/string_literals_help.rb +1 -1
- data/lib/rubocop/cop/mixin/surrounding_space.rb +95 -8
- data/lib/rubocop/cop/mixin/too_many_lines.rb +2 -2
- data/lib/rubocop/cop/mixin/trailing_comma.rb +25 -17
- data/lib/rubocop/cop/mixin/unused_argument.rb +6 -2
- data/lib/rubocop/cop/naming/accessor_method_name.rb +55 -0
- data/lib/rubocop/cop/{style → naming}/ascii_identifiers.rb +35 -2
- data/lib/rubocop/cop/{style/op_method.rb → naming/binary_operator_parameter_name.rb} +7 -6
- data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +33 -0
- data/lib/rubocop/cop/naming/constant_name.rb +58 -0
- data/lib/rubocop/cop/{style → naming}/file_name.rb +28 -13
- data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +62 -0
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +59 -0
- data/lib/rubocop/cop/naming/method_name.rb +40 -0
- data/lib/rubocop/cop/naming/predicate_name.rb +101 -0
- data/lib/rubocop/cop/naming/variable_name.rb +50 -0
- data/lib/rubocop/cop/{style → naming}/variable_number.rb +11 -28
- data/lib/rubocop/cop/offense.rb +6 -1
- data/lib/rubocop/cop/performance/caller.rb +39 -11
- data/lib/rubocop/cop/performance/case_when_splat.rb +3 -7
- data/lib/rubocop/cop/performance/casecmp.rb +9 -8
- data/lib/rubocop/cop/performance/compare_with_block.rb +23 -13
- data/lib/rubocop/cop/performance/count.rb +7 -4
- data/lib/rubocop/cop/performance/detect.rb +9 -6
- data/lib/rubocop/cop/performance/double_start_end_with.rb +12 -20
- data/lib/rubocop/cop/performance/end_with.rb +6 -6
- data/lib/rubocop/cop/performance/fixed_size.rb +1 -1
- data/lib/rubocop/cop/performance/flat_map.rb +5 -2
- data/lib/rubocop/cop/performance/hash_each_methods.rb +85 -40
- data/lib/rubocop/cop/performance/lstrip_rstrip.rb +9 -6
- data/lib/rubocop/cop/performance/range_include.rb +3 -3
- data/lib/rubocop/cop/performance/redundant_block_call.rb +28 -28
- data/lib/rubocop/cop/performance/redundant_match.rb +13 -12
- data/lib/rubocop/cop/performance/redundant_merge.rb +44 -26
- data/lib/rubocop/cop/performance/redundant_sort_by.rb +9 -6
- data/lib/rubocop/cop/performance/regexp_match.rb +19 -10
- data/lib/rubocop/cop/performance/reverse_each.rb +1 -1
- data/lib/rubocop/cop/performance/sample.rb +1 -1
- data/lib/rubocop/cop/performance/size.rb +3 -3
- data/lib/rubocop/cop/performance/start_with.rb +6 -6
- data/lib/rubocop/cop/performance/string_replacement.rb +6 -6
- data/lib/rubocop/cop/performance/times_map.rb +32 -22
- data/lib/rubocop/cop/performance/unfreeze_string.rb +50 -0
- data/lib/rubocop/cop/performance/uri_default_parser.rb +47 -0
- data/lib/rubocop/cop/rails/action_filter.rb +23 -1
- data/lib/rubocop/cop/rails/active_support_aliases.rb +4 -5
- data/lib/rubocop/cop/rails/application_job.rb +5 -3
- data/lib/rubocop/cop/rails/application_record.rb +5 -3
- data/lib/rubocop/cop/rails/blank.rb +20 -17
- data/lib/rubocop/cop/rails/create_table_with_timestamps.rb +82 -0
- data/lib/rubocop/cop/rails/date.rb +7 -6
- data/lib/rubocop/cop/rails/delegate.rb +53 -29
- data/lib/rubocop/cop/rails/delegate_allow_blank.rb +4 -4
- data/lib/rubocop/cop/rails/dynamic_find_by.rb +2 -2
- data/lib/rubocop/cop/rails/enum_uniqueness.rb +4 -4
- data/lib/rubocop/cop/rails/environment_comparison.rb +66 -0
- data/lib/rubocop/cop/rails/exit.rb +8 -1
- data/lib/rubocop/cop/rails/file_path.rb +8 -11
- data/lib/rubocop/cop/rails/find_by.rb +2 -1
- data/lib/rubocop/cop/rails/find_each.rb +1 -1
- data/lib/rubocop/cop/rails/has_and_belongs_to_many.rb +8 -1
- data/lib/rubocop/cop/rails/has_many_or_has_one_dependent.rb +76 -0
- data/lib/rubocop/cop/rails/http_positional_arguments.rb +40 -44
- data/lib/rubocop/cop/rails/inverse_of.rb +96 -0
- data/lib/rubocop/cop/rails/lexically_scoped_action_filter.rb +112 -0
- data/lib/rubocop/cop/rails/not_null_column.rb +6 -6
- data/lib/rubocop/cop/rails/output.rb +11 -2
- data/lib/rubocop/cop/rails/output_safety.rb +16 -21
- data/lib/rubocop/cop/rails/pluralization_grammar.rb +10 -10
- data/lib/rubocop/cop/rails/presence.rb +105 -0
- data/lib/rubocop/cop/rails/present.rb +14 -17
- data/lib/rubocop/cop/rails/read_write_attribute.rb +13 -13
- data/lib/rubocop/cop/rails/redundant_receiver_in_with_options.rb +91 -0
- data/lib/rubocop/cop/rails/relative_date_constant.rb +11 -11
- data/lib/rubocop/cop/rails/request_referer.rb +3 -3
- data/lib/rubocop/cop/rails/reversible_migration.rb +36 -35
- data/lib/rubocop/cop/rails/safe_navigation.rb +7 -8
- data/lib/rubocop/cop/rails/save_bang.rb +19 -17
- data/lib/rubocop/cop/rails/scope_args.rb +2 -2
- data/lib/rubocop/cop/rails/skips_model_validations.rb +2 -2
- data/lib/rubocop/cop/rails/time_zone.rb +3 -2
- data/lib/rubocop/cop/rails/uniq_before_pluck.rb +4 -2
- data/lib/rubocop/cop/rails/unknown_env.rb +63 -0
- data/lib/rubocop/cop/rails/validation.rb +8 -8
- data/lib/rubocop/cop/registry.rb +2 -1
- data/lib/rubocop/cop/security/eval.rb +4 -4
- data/lib/rubocop/cop/security/json_load.rb +7 -5
- data/lib/rubocop/cop/security/marshal_load.rb +8 -6
- data/lib/rubocop/cop/security/yaml_load.rb +4 -4
- data/lib/rubocop/cop/style/alias.rb +49 -27
- data/lib/rubocop/cop/style/and_or.rb +65 -45
- data/lib/rubocop/cop/style/array_join.rb +10 -1
- data/lib/rubocop/cop/style/ascii_comments.rb +24 -4
- data/lib/rubocop/cop/style/attr.rb +15 -5
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +7 -5
- data/lib/rubocop/cop/style/bare_percent_literals.rb +31 -10
- data/lib/rubocop/cop/style/begin_block.rb +1 -1
- data/lib/rubocop/cop/style/block_comments.rb +17 -3
- data/lib/rubocop/cop/style/block_delimiters.rb +82 -16
- data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +68 -32
- data/lib/rubocop/cop/style/case_equality.rb +13 -1
- data/lib/rubocop/cop/style/character_literal.rb +10 -0
- data/lib/rubocop/cop/style/class_and_module_children.rb +8 -4
- data/lib/rubocop/cop/style/class_check.rb +29 -10
- data/lib/rubocop/cop/style/class_methods.rb +10 -9
- data/lib/rubocop/cop/style/class_vars.rb +5 -4
- data/lib/rubocop/cop/style/collection_methods.rb +5 -3
- data/lib/rubocop/cop/style/colon_method_call.rb +18 -2
- data/lib/rubocop/cop/style/colon_method_definition.rb +36 -0
- data/lib/rubocop/cop/style/command_literal.rb +90 -30
- data/lib/rubocop/cop/style/comment_annotation.rb +39 -11
- data/lib/rubocop/cop/style/commented_keyword.rb +84 -0
- data/lib/rubocop/cop/style/conditional_assignment.rb +41 -41
- data/lib/rubocop/cop/style/copyright.rb +27 -28
- data/lib/rubocop/cop/style/date_time.rb +44 -0
- data/lib/rubocop/cop/style/def_with_parentheses.rb +31 -5
- data/lib/rubocop/cop/style/dir.rb +48 -0
- data/lib/rubocop/cop/style/documentation.rb +17 -2
- data/lib/rubocop/cop/style/documentation_method.rb +2 -6
- data/lib/rubocop/cop/style/double_negation.rb +1 -1
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +8 -8
- data/lib/rubocop/cop/style/each_with_object.rb +6 -5
- data/lib/rubocop/cop/style/empty_block_parameter.rb +47 -0
- data/lib/rubocop/cop/style/empty_case_condition.rb +3 -3
- data/lib/rubocop/cop/style/empty_else.rb +55 -24
- data/lib/rubocop/cop/style/empty_lambda_parameter.rb +43 -0
- data/lib/rubocop/cop/style/empty_literal.rb +25 -14
- data/lib/rubocop/cop/style/empty_method.rb +29 -25
- data/lib/rubocop/cop/style/encoding.rb +8 -51
- data/lib/rubocop/cop/style/end_block.rb +1 -1
- data/lib/rubocop/cop/style/eval_with_location.rb +146 -0
- data/lib/rubocop/cop/style/even_odd.rb +4 -2
- data/lib/rubocop/cop/style/extend_self.rb +92 -0
- data/lib/rubocop/cop/style/flip_flop.rb +13 -2
- data/lib/rubocop/cop/style/for.rb +6 -2
- data/lib/rubocop/cop/style/format_string.rb +33 -5
- data/lib/rubocop/cop/style/format_string_token.rb +17 -15
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +7 -6
- data/lib/rubocop/cop/style/global_vars.rb +12 -2
- data/lib/rubocop/cop/style/guard_clause.rb +6 -4
- data/lib/rubocop/cop/style/hash_syntax.rb +56 -56
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +12 -8
- data/lib/rubocop/cop/style/if_inside_else.rb +11 -11
- data/lib/rubocop/cop/style/if_unless_modifier.rb +8 -7
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +3 -2
- data/lib/rubocop/cop/style/if_with_semicolon.rb +10 -1
- data/lib/rubocop/cop/style/implicit_runtime_error.rb +7 -6
- data/lib/rubocop/cop/style/infinite_loop.rb +4 -4
- data/lib/rubocop/cop/style/inline_comment.rb +1 -1
- data/lib/rubocop/cop/style/inverse_methods.rb +24 -14
- data/lib/rubocop/cop/style/lambda.rb +45 -43
- data/lib/rubocop/cop/style/lambda_call.rb +37 -10
- data/lib/rubocop/cop/style/line_end_concatenation.rb +5 -5
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +3 -19
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +6 -4
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +1 -1
- data/lib/rubocop/cop/style/method_def_parentheses.rb +20 -25
- data/lib/rubocop/cop/style/method_missing.rb +13 -26
- data/lib/rubocop/cop/style/min_max.rb +68 -0
- data/lib/rubocop/cop/style/missing_else.rb +20 -6
- data/lib/rubocop/cop/style/mixin_grouping.rb +31 -21
- data/lib/rubocop/cop/style/mixin_usage.rb +71 -0
- data/lib/rubocop/cop/style/module_function.rb +27 -11
- data/lib/rubocop/cop/style/multiline_block_chain.rb +1 -1
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +8 -4
- data/lib/rubocop/cop/style/multiline_if_then.rb +15 -13
- data/lib/rubocop/cop/style/multiline_memoization.rb +33 -17
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +1 -1
- data/lib/rubocop/cop/style/multiple_comparison.rb +1 -1
- data/lib/rubocop/cop/style/mutable_constant.rb +11 -15
- data/lib/rubocop/cop/style/negated_if.rb +27 -31
- data/lib/rubocop/cop/style/negated_while.rb +1 -5
- data/lib/rubocop/cop/style/nested_modifier.rb +1 -1
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +26 -23
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +1 -1
- data/lib/rubocop/cop/style/next.rb +41 -12
- data/lib/rubocop/cop/style/nil_comparison.rb +8 -8
- data/lib/rubocop/cop/style/non_nil_check.rb +41 -38
- data/lib/rubocop/cop/style/not.rb +15 -5
- data/lib/rubocop/cop/style/numeric_literal_prefix.rb +8 -4
- data/lib/rubocop/cop/style/numeric_literals.rb +9 -9
- data/lib/rubocop/cop/style/numeric_predicate.rb +21 -21
- data/lib/rubocop/cop/style/one_line_conditional.rb +9 -4
- data/lib/rubocop/cop/style/option_hash.rb +11 -25
- data/lib/rubocop/cop/style/optional_arguments.rb +1 -2
- data/lib/rubocop/cop/style/or_assignment.rb +88 -0
- data/lib/rubocop/cop/style/parallel_assignment.rb +16 -16
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +30 -13
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +25 -4
- data/lib/rubocop/cop/style/percent_q_literals.rb +29 -8
- data/lib/rubocop/cop/style/perl_backrefs.rb +8 -1
- data/lib/rubocop/cop/style/preferred_hash_methods.rb +7 -11
- data/lib/rubocop/cop/style/proc.rb +10 -2
- data/lib/rubocop/cop/style/raise_args.rb +22 -29
- data/lib/rubocop/cop/style/random_with_offset.rb +160 -0
- data/lib/rubocop/cop/style/redundant_begin.rb +16 -5
- data/lib/rubocop/cop/style/redundant_conditional.rb +96 -0
- data/lib/rubocop/cop/style/redundant_exception.rb +4 -4
- data/lib/rubocop/cop/style/redundant_freeze.rb +1 -1
- data/lib/rubocop/cop/style/redundant_parentheses.rb +14 -12
- data/lib/rubocop/cop/style/redundant_return.rb +28 -15
- data/lib/rubocop/cop/style/redundant_self.rb +35 -27
- data/lib/rubocop/cop/style/regexp_literal.rb +88 -27
- data/lib/rubocop/cop/style/rescue_modifier.rb +12 -1
- data/lib/rubocop/cop/style/rescue_standard_error.rb +122 -0
- data/lib/rubocop/cop/style/return_nil.rb +89 -0
- data/lib/rubocop/cop/style/safe_navigation.rb +100 -48
- data/lib/rubocop/cop/style/self_assignment.rb +13 -13
- data/lib/rubocop/cop/style/semicolon.rb +19 -9
- data/lib/rubocop/cop/style/send.rb +10 -1
- data/lib/rubocop/cop/style/signal_exception.rb +104 -3
- data/lib/rubocop/cop/style/single_line_block_params.rb +16 -15
- data/lib/rubocop/cop/style/single_line_methods.rb +26 -18
- data/lib/rubocop/cop/style/special_global_vars.rb +19 -14
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +23 -50
- data/lib/rubocop/cop/style/stderr_puts.rb +54 -0
- data/lib/rubocop/cop/style/string_hash_keys.rb +36 -0
- data/lib/rubocop/cop/style/string_literals.rb +26 -3
- data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +16 -1
- data/lib/rubocop/cop/style/string_methods.rb +19 -8
- data/lib/rubocop/cop/style/struct_inheritance.rb +3 -3
- data/lib/rubocop/cop/style/symbol_array.rb +7 -35
- data/lib/rubocop/cop/style/symbol_literal.rb +1 -1
- data/lib/rubocop/cop/style/symbol_proc.rb +11 -25
- data/lib/rubocop/cop/style/ternary_parentheses.rb +46 -51
- data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +101 -0
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +20 -6
- data/lib/rubocop/cop/style/trailing_comma_in_literal.rb +22 -7
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +95 -0
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +70 -24
- data/lib/rubocop/cop/style/trivial_accessors.rb +72 -65
- data/lib/rubocop/cop/style/unless_else.rb +16 -1
- data/lib/rubocop/cop/style/unneeded_capital_w.rb +18 -8
- data/lib/rubocop/cop/style/unneeded_interpolation.rb +15 -19
- data/lib/rubocop/cop/style/unneeded_percent_q.rb +14 -13
- data/lib/rubocop/cop/style/variable_interpolation.rb +23 -9
- data/lib/rubocop/cop/style/when_then.rb +14 -1
- data/lib/rubocop/cop/style/while_until_do.rb +27 -4
- data/lib/rubocop/cop/style/while_until_modifier.rb +26 -6
- data/lib/rubocop/cop/style/word_array.rb +9 -30
- data/lib/rubocop/cop/style/yoda_condition.rb +51 -22
- data/lib/rubocop/cop/style/zero_length_predicate.rb +44 -29
- data/lib/rubocop/cop/team.rb +16 -8
- data/lib/rubocop/cop/util.rb +43 -34
- data/lib/rubocop/cop/variable_force.rb +1 -1
- data/lib/rubocop/cop/variable_force/assignment.rb +4 -2
- data/lib/rubocop/cop/variable_force/scope.rb +1 -5
- data/lib/rubocop/cop/variable_force/variable.rb +1 -1
- data/lib/rubocop/formatter/disabled_config_formatter.rb +3 -4
- data/lib/rubocop/formatter/formatter_set.rb +3 -1
- data/lib/rubocop/formatter/html_formatter.rb +1 -1
- data/lib/rubocop/formatter/json_formatter.rb +9 -3
- data/lib/rubocop/formatter/offense_count_formatter.rb +2 -0
- data/lib/rubocop/formatter/quiet_formatter.rb +13 -0
- data/lib/rubocop/formatter/simple_text_formatter.rb +3 -3
- data/lib/rubocop/formatter/tap_formatter.rb +71 -0
- data/lib/rubocop/formatter/worst_offenders_formatter.rb +2 -0
- data/lib/rubocop/node_pattern.rb +46 -29
- data/lib/rubocop/options.rb +13 -8
- data/lib/rubocop/path_util.rb +15 -3
- data/lib/rubocop/processed_source.rb +8 -9
- data/lib/rubocop/rake_task.rb +16 -23
- data/lib/rubocop/remote_config.rb +13 -1
- data/lib/rubocop/result_cache.rb +1 -0
- data/lib/rubocop/rspec/cop_helper.rb +10 -10
- data/lib/rubocop/rspec/expect_offense.rb +6 -8
- data/lib/rubocop/rspec/shared_contexts.rb +4 -8
- data/lib/rubocop/rspec/shared_examples.rb +8 -8
- data/lib/rubocop/rspec/support.rb +5 -5
- data/lib/rubocop/runner.rb +1 -1
- data/lib/rubocop/string_util.rb +2 -0
- data/lib/rubocop/token.rb +74 -0
- data/lib/rubocop/version.rb +1 -1
- metadata +118 -48
- data/lib/rubocop/cop/layout/space_inside_brackets.rb +0 -20
- data/lib/rubocop/cop/lint/invalid_character_literal.rb +0 -41
- data/lib/rubocop/cop/mixin/access_modifier_node.rb +0 -41
- data/lib/rubocop/cop/mixin/on_method_def.rb +0 -44
- data/lib/rubocop/cop/mixin/space_inside.rb +0 -76
- data/lib/rubocop/cop/style/accessor_method_name.rb +0 -45
- data/lib/rubocop/cop/style/class_and_module_camel_case.rb +0 -29
- data/lib/rubocop/cop/style/constant_name.rb +0 -29
- data/lib/rubocop/cop/style/method_name.rb +0 -34
- data/lib/rubocop/cop/style/predicate_name.rb +0 -67
- data/lib/rubocop/cop/style/variable_name.rb +0 -39
@@ -7,11 +7,11 @@ module RuboCop
|
|
7
7
|
# (i.e. %i/%w).
|
8
8
|
#
|
9
9
|
# @example
|
10
|
-
# @good
|
11
|
-
# %i(foo bar baz)
|
12
10
|
#
|
13
|
-
#
|
11
|
+
# # bad
|
14
12
|
# %w(foo bar baz)
|
13
|
+
# # good
|
14
|
+
# %i(foo bar baz)
|
15
15
|
class SpaceInsideArrayPercentLiteral < Cop
|
16
16
|
include MatchRange
|
17
17
|
include PercentLiteral
|
@@ -26,7 +26,7 @@ module RuboCop
|
|
26
26
|
|
27
27
|
def on_percent_literal(node)
|
28
28
|
each_unnecessary_space_match(node) do |range|
|
29
|
-
add_offense(node, range
|
29
|
+
add_offense(node, location: range)
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
@@ -7,6 +7,75 @@ module RuboCop
|
|
7
7
|
# them on configuration. For blocks taking parameters, it checks that the
|
8
8
|
# left brace has or doesn't have trailing space depending on
|
9
9
|
# configuration.
|
10
|
+
#
|
11
|
+
# @example EnforcedStyle: space (default)
|
12
|
+
# # The `space` style enforces that block braces have
|
13
|
+
# # surrounding space.
|
14
|
+
#
|
15
|
+
# # bad
|
16
|
+
# some_array.each {puts e}
|
17
|
+
#
|
18
|
+
# # good
|
19
|
+
# some_array.each { puts e }
|
20
|
+
#
|
21
|
+
# @example EnforcedStyle: no_space
|
22
|
+
# # The `no_space` style enforces that block braces don't
|
23
|
+
# # have surrounding space.
|
24
|
+
#
|
25
|
+
# # bad
|
26
|
+
# some_array.each { puts e }
|
27
|
+
#
|
28
|
+
# # good
|
29
|
+
# some_array.each {puts e}
|
30
|
+
#
|
31
|
+
#
|
32
|
+
# @example EnforcedStyleForEmptyBraces: no_space (default)
|
33
|
+
# # The `no_space` EnforcedStyleForEmptyBraces style enforces that
|
34
|
+
# # block braces don't have a space in between when empty.
|
35
|
+
#
|
36
|
+
# # bad
|
37
|
+
# some_array.each { }
|
38
|
+
# some_array.each { }
|
39
|
+
# some_array.each { }
|
40
|
+
#
|
41
|
+
# # good
|
42
|
+
# some_array.each {}
|
43
|
+
#
|
44
|
+
# @example EnforcedStyleForEmptyBraces: space
|
45
|
+
# # The `space` EnforcedStyleForEmptyBraces style enforces that
|
46
|
+
# # block braces have at least a spece in between when empty.
|
47
|
+
#
|
48
|
+
# # bad
|
49
|
+
# some_array.each {}
|
50
|
+
#
|
51
|
+
# # good
|
52
|
+
# some_array.each { }
|
53
|
+
# some_array.each { }
|
54
|
+
# some_array.each { }
|
55
|
+
#
|
56
|
+
#
|
57
|
+
# @example SpaceBeforeBlockParameters: true (default)
|
58
|
+
# # The SpaceBeforeBlockParameters style set to `true` enforces that
|
59
|
+
# # there is a space between `{` and `|`. Overrides `EnforcedStyle`
|
60
|
+
# # if there is a conflict.
|
61
|
+
#
|
62
|
+
# # bad
|
63
|
+
# [1, 2, 3].each {|n| n * 2 }
|
64
|
+
#
|
65
|
+
# # good
|
66
|
+
# [1, 2, 3].each { |n| n * 2 }
|
67
|
+
#
|
68
|
+
# @example SpaceBeforeBlockParameters: true
|
69
|
+
# # The SpaceBeforeBlockParameters style set to `false` enforces that
|
70
|
+
# # there is no space between `{` and `|`. Overrides `EnforcedStyle`
|
71
|
+
# # if there is a conflict.
|
72
|
+
#
|
73
|
+
# # bad
|
74
|
+
# [1, 2, 3].each { |n| n * 2 }
|
75
|
+
#
|
76
|
+
# # good
|
77
|
+
# [1, 2, 3].each {|n| n * 2 }
|
78
|
+
#
|
10
79
|
class SpaceInsideBlockBraces < Cop
|
11
80
|
include ConfigurableEnforcedStyle
|
12
81
|
include SurroundingSpace
|
@@ -20,6 +89,17 @@ module RuboCop
|
|
20
89
|
check_inside(node, left_brace, right_brace)
|
21
90
|
end
|
22
91
|
|
92
|
+
def autocorrect(range)
|
93
|
+
lambda do |corrector|
|
94
|
+
case range.source
|
95
|
+
when /\s/ then corrector.remove(range)
|
96
|
+
when '{}' then corrector.replace(range, '{ }')
|
97
|
+
when '{|' then corrector.replace(range, '{ |')
|
98
|
+
else corrector.insert_before(range, ' ')
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
23
103
|
private
|
24
104
|
|
25
105
|
def check_inside(node, left_brace, right_brace)
|
@@ -49,7 +129,7 @@ module RuboCop
|
|
49
129
|
args_delimiter = node.arguments.loc.begin # Can be ( | or nil.
|
50
130
|
|
51
131
|
check_left_brace(inner, node.loc.begin, args_delimiter)
|
52
|
-
check_right_brace(inner, node.loc.end,
|
132
|
+
check_right_brace(inner, node.loc.end, node.single_line?)
|
53
133
|
end
|
54
134
|
|
55
135
|
def check_left_brace(inner, left_brace, args_delimiter)
|
@@ -60,8 +140,8 @@ module RuboCop
|
|
60
140
|
end
|
61
141
|
end
|
62
142
|
|
63
|
-
def check_right_brace(inner, right_brace,
|
64
|
-
if inner =~ /\S$/
|
143
|
+
def check_right_brace(inner, right_brace, single_line)
|
144
|
+
if single_line && inner =~ /\S$/
|
65
145
|
no_space(right_brace.begin_pos, right_brace.end_pos,
|
66
146
|
'Space missing inside }.')
|
67
147
|
else
|
@@ -96,7 +176,8 @@ module RuboCop
|
|
96
176
|
end
|
97
177
|
end
|
98
178
|
else
|
99
|
-
brace_with_space = range_with_surrounding_space(left_brace,
|
179
|
+
brace_with_space = range_with_surrounding_space(range: left_brace,
|
180
|
+
side: :right)
|
100
181
|
space(brace_with_space.begin_pos + 1, brace_with_space.end_pos,
|
101
182
|
'Space inside { detected.')
|
102
183
|
end
|
@@ -107,7 +188,8 @@ module RuboCop
|
|
107
188
|
end
|
108
189
|
|
109
190
|
def space_inside_right_brace(right_brace)
|
110
|
-
brace_with_space = range_with_surrounding_space(right_brace,
|
191
|
+
brace_with_space = range_with_surrounding_space(range: right_brace,
|
192
|
+
side: :left)
|
111
193
|
space(brace_with_space.begin_pos, brace_with_space.end_pos - 1,
|
112
194
|
'Space inside } detected.')
|
113
195
|
end
|
@@ -128,9 +210,9 @@ module RuboCop
|
|
128
210
|
end
|
129
211
|
end
|
130
212
|
|
131
|
-
def offense(begin_pos, end_pos, msg)
|
213
|
+
def offense(begin_pos, end_pos, msg, &block)
|
132
214
|
range = range_between(begin_pos, end_pos)
|
133
|
-
add_offense(range, range, msg)
|
215
|
+
add_offense(range, location: range, message: msg, &block)
|
134
216
|
end
|
135
217
|
|
136
218
|
def style_for_empty_braces
|
@@ -140,17 +222,6 @@ module RuboCop
|
|
140
222
|
else raise 'Unknown EnforcedStyleForEmptyBraces selected!'
|
141
223
|
end
|
142
224
|
end
|
143
|
-
|
144
|
-
def autocorrect(range)
|
145
|
-
lambda do |corrector|
|
146
|
-
case range.source
|
147
|
-
when /\s/ then corrector.remove(range)
|
148
|
-
when '{}' then corrector.replace(range, '{ }')
|
149
|
-
when '{|' then corrector.replace(range, '{ |')
|
150
|
-
else corrector.insert_before(range, ' ')
|
151
|
-
end
|
152
|
-
end
|
153
|
-
end
|
154
225
|
end
|
155
226
|
end
|
156
227
|
end
|
@@ -5,6 +5,37 @@ module RuboCop
|
|
5
5
|
module Layout
|
6
6
|
# Checks that braces used for hash literals have or don't have
|
7
7
|
# surrounding space depending on configuration.
|
8
|
+
#
|
9
|
+
# @example EnforcedStyle: space
|
10
|
+
# # The `space` style enforces that hash literals have
|
11
|
+
# # surrounding space.
|
12
|
+
#
|
13
|
+
# # bad
|
14
|
+
# h = {a: 1, b: 2}
|
15
|
+
#
|
16
|
+
# # good
|
17
|
+
# h = { a: 1, b: 2 }
|
18
|
+
#
|
19
|
+
# @example EnforcedStyle: no_space
|
20
|
+
# # The `no_space` style enforces that hash literals have
|
21
|
+
# # no surrounding space.
|
22
|
+
#
|
23
|
+
# # bad
|
24
|
+
# h = { a: 1, b: 2 }
|
25
|
+
#
|
26
|
+
# # good
|
27
|
+
# h = {a: 1, b: 2}
|
28
|
+
#
|
29
|
+
# @example EnforcedStyle: compact
|
30
|
+
# # The `compact` style normally requires a space inside
|
31
|
+
# # hash braces, with the exception that successive left
|
32
|
+
# # braces or right braces are collapsed together in nested hashes.
|
33
|
+
#
|
34
|
+
# # bad
|
35
|
+
# h = { a: { b: 2 } }
|
36
|
+
#
|
37
|
+
# # good
|
38
|
+
# h = { a: { b: 2 }}
|
8
39
|
class SpaceInsideHashLiteralBraces < Cop
|
9
40
|
include SurroundingSpace
|
10
41
|
include ConfigurableEnforcedStyle
|
@@ -22,36 +53,45 @@ module RuboCop
|
|
22
53
|
end
|
23
54
|
end
|
24
55
|
|
56
|
+
def autocorrect(range)
|
57
|
+
lambda do |corrector|
|
58
|
+
# It is possible that BracesAroundHashParameters will remove the
|
59
|
+
# braces while this cop inserts spaces. This can lead to unwanted
|
60
|
+
# changes to the inspected code. If we replace the brace with a
|
61
|
+
# brace plus space (rather than just inserting a space), then any
|
62
|
+
# removal of the same brace will give us a clobbering error. This
|
63
|
+
# in turn will make RuboCop fall back on cop-by-cop
|
64
|
+
# auto-correction. Problem solved.
|
65
|
+
case range.source
|
66
|
+
when /\s/ then corrector.remove(range)
|
67
|
+
when '{' then corrector.replace(range, '{ ')
|
68
|
+
else corrector.replace(range, ' }')
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
25
73
|
private
|
26
74
|
|
27
75
|
def hash_literal_with_braces(node)
|
28
76
|
tokens = processed_source.tokens
|
29
77
|
begin_index = index_of_first_token(node)
|
30
|
-
return unless
|
78
|
+
return unless tokens[begin_index].left_brace?
|
31
79
|
|
32
80
|
end_index = index_of_last_token(node)
|
33
|
-
return unless
|
81
|
+
return unless tokens[end_index].right_curly_brace?
|
34
82
|
|
35
83
|
yield begin_index, end_index
|
36
84
|
end
|
37
85
|
|
38
|
-
def left_brace?(token)
|
39
|
-
token.type == :tLBRACE
|
40
|
-
end
|
41
|
-
|
42
|
-
def right_brace?(token)
|
43
|
-
token.type == :tRCURLY
|
44
|
-
end
|
45
|
-
|
46
86
|
def check(t1, t2)
|
47
87
|
# No offense if line break inside.
|
48
|
-
return if t1.
|
49
|
-
return if t2.
|
88
|
+
return if t1.line < t2.line
|
89
|
+
return if t2.comment? # Also indicates there's a line break.
|
50
90
|
|
51
|
-
is_empty_braces = left_brace?
|
91
|
+
is_empty_braces = t1.left_brace? && t2.right_curly_brace?
|
52
92
|
expect_space = expect_space?(t1, t2)
|
53
93
|
|
54
|
-
if offense?(t1,
|
94
|
+
if offense?(t1, expect_space)
|
55
95
|
incorrect_style_detected(t1, t2, expect_space, is_empty_braces)
|
56
96
|
else
|
57
97
|
correct_style_detected
|
@@ -60,7 +100,7 @@ module RuboCop
|
|
60
100
|
|
61
101
|
def expect_space?(t1, t2)
|
62
102
|
is_same_braces = t1.type == t2.type
|
63
|
-
is_empty_braces = left_brace?
|
103
|
+
is_empty_braces = t1.left_brace? && t2.right_curly_brace?
|
64
104
|
|
65
105
|
if is_same_braces && style == :compact
|
66
106
|
false
|
@@ -74,8 +114,11 @@ module RuboCop
|
|
74
114
|
def incorrect_style_detected(t1, t2, expect_space, is_empty_braces)
|
75
115
|
brace = (t1.text == '{' ? t1 : t2).pos
|
76
116
|
range = expect_space ? brace : space_range(brace)
|
77
|
-
add_offense(
|
78
|
-
|
117
|
+
add_offense(
|
118
|
+
range,
|
119
|
+
location: range,
|
120
|
+
message: message(brace, is_empty_braces, expect_space)
|
121
|
+
) do
|
79
122
|
style = expect_space ? :no_space : :space
|
80
123
|
ambiguous_or_unexpected_style_detected(style, t1.text == t2.text)
|
81
124
|
end
|
@@ -89,8 +132,8 @@ module RuboCop
|
|
89
132
|
end
|
90
133
|
end
|
91
134
|
|
92
|
-
def offense?(t1,
|
93
|
-
has_space =
|
135
|
+
def offense?(t1, expect_space)
|
136
|
+
has_space = t1.space_after?
|
94
137
|
expect_space ? !has_space : has_space
|
95
138
|
end
|
96
139
|
|
@@ -104,23 +147,6 @@ module RuboCop
|
|
104
147
|
format(MSG, "#{inside_what} #{problem}")
|
105
148
|
end
|
106
149
|
|
107
|
-
def autocorrect(range)
|
108
|
-
lambda do |corrector|
|
109
|
-
# It is possible that BracesAroundHashParameters will remove the
|
110
|
-
# braces while this cop inserts spaces. This can lead to unwanted
|
111
|
-
# changes to the inspected code. If we replace the brace with a
|
112
|
-
# brace plus space (rather than just inserting a space), then any
|
113
|
-
# removal of the same brace will give us a clobbering error. This
|
114
|
-
# in turn will make RuboCop fall back on cop-by-cop
|
115
|
-
# auto-correction. Problem solved.
|
116
|
-
case range.source
|
117
|
-
when /\s/ then corrector.remove(range)
|
118
|
-
when '{' then corrector.replace(range, '{ ')
|
119
|
-
else corrector.replace(range, ' }')
|
120
|
-
end
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
150
|
def space_range(token_range)
|
125
151
|
if token_range.source == '{'
|
126
152
|
range_of_space_to_the_right(token_range)
|
@@ -4,11 +4,48 @@ module RuboCop
|
|
4
4
|
module Cop
|
5
5
|
module Layout
|
6
6
|
# Checks for spaces inside ordinary round parentheses.
|
7
|
+
#
|
8
|
+
# @example
|
9
|
+
# # bad
|
10
|
+
# f( 3)
|
11
|
+
# g = (a + 3 )
|
12
|
+
#
|
13
|
+
# # good
|
14
|
+
# f(3)
|
15
|
+
# g = (a + 3)
|
7
16
|
class SpaceInsideParens < Cop
|
8
|
-
include
|
17
|
+
include SurroundingSpace
|
9
18
|
|
10
|
-
|
11
|
-
|
19
|
+
MSG = 'Space inside parentheses detected.'.freeze
|
20
|
+
|
21
|
+
def investigate(processed_source)
|
22
|
+
@processed_source = processed_source
|
23
|
+
each_extraneous_space(processed_source.tokens) do |range|
|
24
|
+
add_offense(range, location: range)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def autocorrect(range)
|
29
|
+
->(corrector) { corrector.remove(range) }
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def each_extraneous_space(tokens)
|
35
|
+
tokens.each_cons(2) do |t1, t2|
|
36
|
+
next unless parens?(t1, t2)
|
37
|
+
|
38
|
+
# If the second token is a comment, that means that a line break
|
39
|
+
# follows, and that the rules for space inside don't apply.
|
40
|
+
next if t2.comment?
|
41
|
+
next unless t2.line == t1.line && t1.space_after?
|
42
|
+
|
43
|
+
yield range_between(t1.end_pos, t2.begin_pos)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def parens?(t1, t2)
|
48
|
+
t1.left_parens? || t2.right_parens?
|
12
49
|
end
|
13
50
|
end
|
14
51
|
end
|
@@ -28,21 +28,6 @@ module RuboCop
|
|
28
28
|
check(node)
|
29
29
|
end
|
30
30
|
|
31
|
-
private
|
32
|
-
|
33
|
-
def check(node)
|
34
|
-
expression = node.source
|
35
|
-
op = node.loc.operator.source
|
36
|
-
escaped_op = op.gsub(/\./, '\.')
|
37
|
-
|
38
|
-
# account for multiline range literals
|
39
|
-
expression.sub!(/#{escaped_op}\n\s*/, op)
|
40
|
-
|
41
|
-
return unless expression =~ /(\s#{escaped_op})|(#{escaped_op}\s)/
|
42
|
-
|
43
|
-
add_offense(node, :expression)
|
44
|
-
end
|
45
|
-
|
46
31
|
def autocorrect(node)
|
47
32
|
expression = node.source
|
48
33
|
operator = node.loc.operator.source
|
@@ -57,6 +42,21 @@ module RuboCop
|
|
57
42
|
)
|
58
43
|
end
|
59
44
|
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def check(node)
|
49
|
+
expression = node.source
|
50
|
+
op = node.loc.operator.source
|
51
|
+
escaped_op = op.gsub(/\./, '\.')
|
52
|
+
|
53
|
+
# account for multiline range literals
|
54
|
+
expression.sub!(/#{escaped_op}\n\s*/, op)
|
55
|
+
|
56
|
+
return unless expression =~ /(\s#{escaped_op})|(#{escaped_op}\s)/
|
57
|
+
|
58
|
+
add_offense(node)
|
59
|
+
end
|
60
60
|
end
|
61
61
|
end
|
62
62
|
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Layout
|
6
|
+
# Checks that reference brackets have or don't have
|
7
|
+
# surrounding space depending on configuration.
|
8
|
+
#
|
9
|
+
# @example EnforcedStyle: no_space (default)
|
10
|
+
# # The `no_space` style enforces that reference brackets have
|
11
|
+
# # no surrounding space.
|
12
|
+
#
|
13
|
+
# # bad
|
14
|
+
# hash[ :key ]
|
15
|
+
# array[ index ]
|
16
|
+
#
|
17
|
+
# # good
|
18
|
+
# hash[:key]
|
19
|
+
# array[index]
|
20
|
+
#
|
21
|
+
# @example EnforcedStyle: space
|
22
|
+
# # The `space` style enforces that reference brackets have
|
23
|
+
# # surrounding space.
|
24
|
+
#
|
25
|
+
# # bad
|
26
|
+
# hash[:key]
|
27
|
+
# array[index]
|
28
|
+
#
|
29
|
+
# # good
|
30
|
+
# hash[ :key ]
|
31
|
+
# array[ index ]
|
32
|
+
class SpaceInsideReferenceBrackets < Cop
|
33
|
+
include SurroundingSpace
|
34
|
+
include ConfigurableEnforcedStyle
|
35
|
+
|
36
|
+
MSG = '%<command>s space inside reference brackets.'.freeze
|
37
|
+
|
38
|
+
def on_send(node)
|
39
|
+
return if node.multiline?
|
40
|
+
return unless left_ref_bracket(node)
|
41
|
+
left_token = left_ref_bracket(node)
|
42
|
+
right_token = right_ref_bracket(node, left_token)
|
43
|
+
|
44
|
+
if style == :no_space
|
45
|
+
no_space_offenses(node, left_token, right_token, MSG)
|
46
|
+
else
|
47
|
+
space_offenses(node, left_token, right_token, MSG)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def autocorrect(node)
|
52
|
+
lambda do |corrector|
|
53
|
+
left, right = reference_brackets(node)
|
54
|
+
|
55
|
+
if style == :no_space
|
56
|
+
no_space_corrector(corrector, left, right)
|
57
|
+
else
|
58
|
+
space_corrector(corrector, left, right)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
def reference_brackets(node)
|
66
|
+
left = left_ref_bracket(node)
|
67
|
+
[left, right_ref_bracket(node, left)]
|
68
|
+
end
|
69
|
+
|
70
|
+
def left_ref_bracket(node)
|
71
|
+
tokens(node).reverse.find(&:left_ref_bracket?)
|
72
|
+
end
|
73
|
+
|
74
|
+
def right_ref_bracket(node, token)
|
75
|
+
i = tokens(node).index(token)
|
76
|
+
tokens(node).slice(i..-1).find(&:right_bracket?)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|