rubocop 0.89.1 → 0.93.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 +2 -2
- data/config/default.yml +160 -14
- data/lib/rubocop.rb +33 -5
- data/lib/rubocop/cached_data.rb +3 -1
- data/lib/rubocop/cli/command.rb +1 -0
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +1 -0
- data/lib/rubocop/cli/command/base.rb +1 -0
- data/lib/rubocop/cli/command/execute_runner.rb +9 -0
- data/lib/rubocop/cli/command/init_dotfile.rb +1 -0
- data/lib/rubocop/cli/command/show_cops.rb +1 -0
- data/lib/rubocop/cli/command/version.rb +1 -0
- data/lib/rubocop/cli/environment.rb +1 -0
- data/lib/rubocop/comment_config.rb +14 -5
- data/lib/rubocop/config_loader.rb +20 -9
- data/lib/rubocop/config_loader_resolver.rb +1 -0
- data/lib/rubocop/config_obsoletion.rb +1 -0
- data/lib/rubocop/config_regeneration.rb +33 -0
- data/lib/rubocop/config_store.rb +3 -3
- data/lib/rubocop/config_validator.rb +3 -0
- data/lib/rubocop/cop/base.rb +23 -0
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +5 -1
- data/lib/rubocop/cop/bundler/gem_comment.rb +8 -3
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +2 -0
- data/lib/rubocop/cop/commissioner.rb +47 -7
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +4 -4
- data/lib/rubocop/cop/correctors/condition_corrector.rb +3 -5
- data/lib/rubocop/cop/correctors/empty_line_corrector.rb +9 -10
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +4 -4
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +8 -3
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +5 -8
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +4 -9
- data/lib/rubocop/cop/correctors/punctuation_corrector.rb +8 -10
- data/lib/rubocop/cop/documentation.rb +22 -0
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +10 -10
- data/lib/rubocop/cop/generator.rb +2 -1
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +1 -0
- data/lib/rubocop/cop/layout/array_alignment.rb +1 -0
- data/lib/rubocop/cop/layout/begin_end_alignment.rb +77 -0
- data/lib/rubocop/cop/layout/block_alignment.rb +23 -19
- data/lib/rubocop/cop/layout/case_indentation.rb +4 -7
- data/lib/rubocop/cop/layout/class_structure.rb +11 -10
- data/lib/rubocop/cop/layout/closing_heredoc_indentation.rb +4 -6
- data/lib/rubocop/cop/layout/condition_position.rb +13 -15
- data/lib/rubocop/cop/layout/def_end_alignment.rb +8 -5
- data/lib/rubocop/cop/layout/dot_position.rb +21 -20
- data/lib/rubocop/cop/layout/empty_comment.rb +30 -23
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +21 -18
- data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +13 -13
- data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +136 -0
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +21 -23
- data/lib/rubocop/cop/layout/empty_lines.rb +6 -7
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +17 -14
- data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +7 -8
- data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +5 -8
- data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +2 -5
- data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +2 -5
- data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +2 -5
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +3 -7
- data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +2 -5
- data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +2 -5
- data/lib/rubocop/cop/layout/end_alignment.rb +11 -17
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +2 -5
- data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +2 -5
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +4 -8
- data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +2 -5
- data/lib/rubocop/cop/layout/hash_alignment.rb +17 -20
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +15 -14
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +14 -11
- data/lib/rubocop/cop/layout/initial_indentation.rb +6 -7
- data/lib/rubocop/cop/layout/leading_comment_space.rb +11 -9
- data/lib/rubocop/cop/layout/leading_empty_lines.rb +6 -11
- data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +2 -5
- data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +2 -5
- data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +10 -14
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +21 -19
- data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +2 -5
- data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +2 -5
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +5 -9
- data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +2 -5
- data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +2 -5
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +41 -22
- data/lib/rubocop/cop/layout/space_after_colon.rb +11 -7
- data/lib/rubocop/cop/layout/space_after_comma.rb +2 -5
- data/lib/rubocop/cop/layout/space_after_method_name.rb +5 -6
- data/lib/rubocop/cop/layout/space_after_not.rb +9 -11
- data/lib/rubocop/cop/layout/space_after_semicolon.rb +2 -5
- data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +17 -21
- data/lib/rubocop/cop/layout/space_around_keyword.rb +17 -18
- data/lib/rubocop/cop/layout/space_around_operators.rb +17 -16
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +23 -22
- data/lib/rubocop/cop/layout/space_before_comma.rb +3 -5
- data/lib/rubocop/cop/layout/space_before_comment.rb +10 -7
- data/lib/rubocop/cop/layout/space_before_first_arg.rb +7 -7
- data/lib/rubocop/cop/layout/space_before_semicolon.rb +2 -5
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +9 -17
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +20 -23
- data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +3 -8
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +13 -16
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +19 -37
- data/lib/rubocop/cop/layout/space_inside_parens.rb +9 -14
- data/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb +5 -10
- data/lib/rubocop/cop/layout/space_inside_range_literal.rb +8 -17
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +16 -24
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +12 -13
- data/lib/rubocop/cop/layout/trailing_empty_lines.rb +10 -15
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +11 -11
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +2 -0
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +2 -0
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +15 -1
- data/lib/rubocop/cop/lint/big_decimal_new.rb +1 -2
- data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +1 -1
- data/lib/rubocop/cop/lint/boolean_symbol.rb +3 -0
- data/lib/rubocop/cop/lint/constant_definition_in_block.rb +74 -0
- data/lib/rubocop/cop/lint/constant_resolution.rb +1 -1
- data/lib/rubocop/cop/lint/debugger.rb +2 -3
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +1 -3
- data/lib/rubocop/cop/lint/duplicate_methods.rb +2 -4
- data/lib/rubocop/cop/lint/duplicate_require.rb +46 -0
- data/lib/rubocop/cop/lint/duplicate_rescue_exception.rb +2 -15
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -0
- data/lib/rubocop/cop/lint/empty_file.rb +50 -0
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +2 -0
- data/lib/rubocop/cop/lint/float_comparison.rb +2 -2
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +2 -2
- data/lib/rubocop/cop/lint/hash_compare_by_identity.rb +37 -0
- data/lib/rubocop/cop/lint/identity_comparison.rb +51 -0
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +2 -5
- data/lib/rubocop/cop/lint/inherit_exception.rb +2 -2
- data/lib/rubocop/cop/lint/missing_super.rb +2 -2
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +3 -35
- data/lib/rubocop/cop/lint/multiple_comparison.rb +3 -1
- data/lib/rubocop/cop/lint/number_conversion.rb +1 -0
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +9 -20
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +1 -1
- data/lib/rubocop/cop/lint/percent_string_array.rb +8 -12
- data/lib/rubocop/cop/lint/raise_exception.rb +1 -0
- data/lib/rubocop/cop/lint/rand_one.rb +2 -1
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +22 -12
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +14 -4
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +1 -0
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +45 -0
- data/lib/rubocop/cop/lint/rescue_type.rb +0 -1
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +3 -1
- data/lib/rubocop/cop/lint/shadowed_exception.rb +6 -6
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +4 -4
- data/lib/rubocop/cop/lint/struct_new_override.rb +1 -0
- data/lib/rubocop/cop/lint/to_json.rb +16 -5
- data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +1 -1
- data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +57 -0
- data/lib/rubocop/cop/lint/unreachable_loop.rb +3 -6
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +3 -1
- data/lib/rubocop/cop/lint/uri_regexp.rb +2 -1
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +3 -9
- data/lib/rubocop/cop/lint/useless_method_definition.rb +70 -0
- data/lib/rubocop/cop/lint/useless_times.rb +106 -0
- data/lib/rubocop/cop/metrics/block_length.rb +3 -1
- data/lib/rubocop/cop/metrics/class_length.rb +8 -6
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +27 -16
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +1 -0
- data/lib/rubocop/cop/mixin/alignment.rb +3 -0
- data/lib/rubocop/cop/mixin/allowed_methods.rb +2 -0
- data/lib/rubocop/cop/mixin/annotation_comment.rb +5 -0
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +16 -7
- data/lib/rubocop/cop/mixin/comments_help.rb +48 -0
- data/lib/rubocop/cop/mixin/configurable_naming.rb +2 -2
- data/lib/rubocop/cop/mixin/configurable_numbering.rb +3 -3
- data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +8 -7
- data/lib/rubocop/cop/mixin/empty_parameter.rb +3 -1
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +12 -1
- data/lib/rubocop/cop/mixin/first_element_line_break.rb +3 -1
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +27 -2
- data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +3 -1
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +12 -10
- data/lib/rubocop/cop/mixin/negative_conditional.rb +2 -2
- data/lib/rubocop/cop/mixin/percent_array.rb +14 -3
- data/lib/rubocop/cop/mixin/rescue_node.rb +11 -1
- data/lib/rubocop/cop/mixin/space_after_punctuation.rb +4 -3
- data/lib/rubocop/cop/mixin/space_before_punctuation.rb +4 -3
- data/lib/rubocop/cop/mixin/statement_modifier.rb +9 -3
- data/lib/rubocop/cop/mixin/surrounding_space.rb +8 -4
- data/lib/rubocop/cop/mixin/trailing_comma.rb +7 -7
- data/lib/rubocop/cop/mixin/visibility_help.rb +4 -16
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/file_name.rb +1 -1
- data/lib/rubocop/cop/offense.rb +16 -2
- data/lib/rubocop/cop/security/eval.rb +1 -0
- data/lib/rubocop/cop/security/json_load.rb +1 -0
- data/lib/rubocop/cop/security/marshal_load.rb +1 -0
- data/lib/rubocop/cop/security/open.rb +1 -0
- data/lib/rubocop/cop/security/yaml_load.rb +1 -0
- data/lib/rubocop/cop/severity.rb +0 -8
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +7 -11
- data/lib/rubocop/cop/style/accessor_grouping.rb +3 -0
- data/lib/rubocop/cop/style/alias.rb +2 -0
- data/lib/rubocop/cop/style/array_coercion.rb +4 -0
- data/lib/rubocop/cop/style/array_join.rb +1 -0
- data/lib/rubocop/cop/style/attr.rb +1 -0
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +2 -0
- data/lib/rubocop/cop/style/case_equality.rb +11 -3
- data/lib/rubocop/cop/style/case_like_if.rb +40 -8
- data/lib/rubocop/cop/style/class_and_module_children.rb +2 -0
- data/lib/rubocop/cop/style/class_check.rb +6 -9
- data/lib/rubocop/cop/style/class_equality_comparison.rb +49 -0
- data/lib/rubocop/cop/style/class_methods_definitions.rb +157 -0
- data/lib/rubocop/cop/style/class_vars.rb +1 -2
- data/lib/rubocop/cop/style/combinable_loops.rb +91 -0
- data/lib/rubocop/cop/style/comment_annotation.rb +6 -0
- data/lib/rubocop/cop/style/commented_keyword.rb +7 -8
- data/lib/rubocop/cop/style/conditional_assignment.rb +49 -60
- data/lib/rubocop/cop/style/date_time.rb +12 -1
- data/lib/rubocop/cop/style/dir.rb +1 -0
- data/lib/rubocop/cop/style/double_negation.rb +1 -0
- data/lib/rubocop/cop/style/empty_block_parameter.rb +9 -10
- data/lib/rubocop/cop/style/empty_lambda_parameter.rb +9 -10
- data/lib/rubocop/cop/style/empty_literal.rb +3 -1
- data/lib/rubocop/cop/style/eval_with_location.rb +1 -3
- data/lib/rubocop/cop/style/even_odd.rb +1 -0
- data/lib/rubocop/cop/style/expand_path_arguments.rb +2 -2
- data/lib/rubocop/cop/style/explicit_block_argument.rb +7 -3
- data/lib/rubocop/cop/style/float_division.rb +2 -0
- data/lib/rubocop/cop/style/for.rb +0 -4
- data/lib/rubocop/cop/style/format_string.rb +1 -4
- data/lib/rubocop/cop/style/format_string_token.rb +1 -1
- data/lib/rubocop/cop/style/guard_clause.rb +1 -0
- data/lib/rubocop/cop/style/hash_as_last_array_item.rb +24 -5
- data/lib/rubocop/cop/style/hash_syntax.rb +6 -5
- data/lib/rubocop/cop/style/hash_transform_keys.rb +16 -9
- data/lib/rubocop/cop/style/hash_transform_values.rb +16 -9
- data/lib/rubocop/cop/style/if_unless_modifier.rb +2 -6
- data/lib/rubocop/cop/style/implicit_runtime_error.rb +1 -0
- data/lib/rubocop/cop/style/keyword_parameters_order.rb +53 -0
- data/lib/rubocop/cop/style/lambda_call.rb +3 -1
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +10 -1
- data/lib/rubocop/cop/style/method_def_parentheses.rb +0 -4
- data/lib/rubocop/cop/style/mixin_usage.rb +8 -27
- data/lib/rubocop/cop/style/multiline_block_chain.rb +2 -2
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +14 -1
- data/lib/rubocop/cop/style/multiline_when_then.rb +3 -2
- data/lib/rubocop/cop/style/negated_if.rb +6 -6
- data/lib/rubocop/cop/style/negated_unless.rb +6 -6
- data/lib/rubocop/cop/style/negated_while.rb +7 -15
- data/lib/rubocop/cop/style/nested_modifier.rb +10 -13
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +11 -11
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +16 -16
- data/lib/rubocop/cop/style/next.rb +10 -14
- data/lib/rubocop/cop/style/nil_comparison.rb +13 -11
- data/lib/rubocop/cop/style/non_nil_check.rb +34 -26
- data/lib/rubocop/cop/style/not.rb +20 -26
- data/lib/rubocop/cop/style/numeric_literal_prefix.rb +4 -9
- data/lib/rubocop/cop/style/numeric_predicate.rb +5 -14
- data/lib/rubocop/cop/style/one_line_conditional.rb +73 -23
- data/lib/rubocop/cop/style/option_hash.rb +1 -1
- data/lib/rubocop/cop/style/optional_arguments.rb +1 -1
- data/lib/rubocop/cop/style/optional_boolean_parameter.rb +12 -1
- data/lib/rubocop/cop/style/or_assignment.rb +13 -10
- data/lib/rubocop/cop/style/parallel_assignment.rb +14 -14
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +6 -6
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +13 -19
- data/lib/rubocop/cop/style/percent_q_literals.rb +8 -10
- data/lib/rubocop/cop/style/perl_backrefs.rb +8 -10
- data/lib/rubocop/cop/style/preferred_hash_methods.rb +11 -14
- data/lib/rubocop/cop/style/proc.rb +6 -6
- data/lib/rubocop/cop/style/raise_args.rb +12 -24
- data/lib/rubocop/cop/style/random_with_offset.rb +19 -19
- data/lib/rubocop/cop/style/redundant_assignment.rb +8 -18
- data/lib/rubocop/cop/style/redundant_begin.rb +28 -12
- data/lib/rubocop/cop/style/redundant_capital_w.rb +6 -9
- data/lib/rubocop/cop/style/redundant_condition.rb +10 -7
- data/lib/rubocop/cop/style/redundant_conditional.rb +4 -5
- data/lib/rubocop/cop/style/redundant_exception.rb +1 -3
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +3 -12
- data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +9 -8
- data/lib/rubocop/cop/style/redundant_freeze.rb +5 -7
- data/lib/rubocop/cop/style/redundant_interpolation.rb +31 -25
- data/lib/rubocop/cop/style/redundant_parentheses.rb +21 -15
- data/lib/rubocop/cop/style/redundant_percent_q.rb +9 -11
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +44 -36
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +13 -29
- data/lib/rubocop/cop/style/redundant_return.rb +17 -17
- data/lib/rubocop/cop/style/redundant_self.rb +9 -11
- data/lib/rubocop/cop/style/redundant_self_assignment.rb +116 -0
- data/lib/rubocop/cop/style/redundant_sort.rb +12 -29
- data/lib/rubocop/cop/style/redundant_sort_by.rb +5 -9
- data/lib/rubocop/cop/style/regexp_literal.rb +10 -21
- data/lib/rubocop/cop/style/rescue_modifier.rb +29 -9
- data/lib/rubocop/cop/style/rescue_standard_error.rb +20 -16
- data/lib/rubocop/cop/style/return_nil.rb +5 -5
- data/lib/rubocop/cop/style/safe_navigation.rb +18 -12
- data/lib/rubocop/cop/style/sample.rb +12 -14
- data/lib/rubocop/cop/style/self_assignment.rb +26 -22
- data/lib/rubocop/cop/style/semicolon.rb +6 -9
- data/lib/rubocop/cop/style/send.rb +4 -5
- data/lib/rubocop/cop/style/signal_exception.rb +23 -19
- data/lib/rubocop/cop/style/single_argument_dig.rb +1 -0
- data/lib/rubocop/cop/style/single_line_block_params.rb +4 -2
- data/lib/rubocop/cop/style/single_line_methods.rb +17 -16
- data/lib/rubocop/cop/style/slicing_with_range.rb +6 -8
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +66 -0
- data/lib/rubocop/cop/style/special_global_vars.rb +10 -15
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +17 -21
- data/lib/rubocop/cop/style/stderr_puts.rb +5 -6
- data/lib/rubocop/cop/style/string_concatenation.rb +17 -3
- data/lib/rubocop/cop/style/string_hash_keys.rb +6 -7
- data/lib/rubocop/cop/style/string_methods.rb +7 -17
- data/lib/rubocop/cop/style/strip.rb +9 -14
- data/lib/rubocop/cop/style/struct_inheritance.rb +3 -6
- data/lib/rubocop/cop/style/symbol_array.rb +5 -16
- data/lib/rubocop/cop/style/symbol_literal.rb +4 -6
- data/lib/rubocop/cop/style/symbol_proc.rb +14 -18
- data/lib/rubocop/cop/style/ternary_parentheses.rb +22 -22
- data/lib/rubocop/cop/style/trailing_body_on_class.rb +3 -6
- data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +4 -7
- data/lib/rubocop/cop/style/trailing_body_on_module.rb +3 -6
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +2 -5
- data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +2 -5
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +11 -9
- data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +2 -5
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +8 -17
- data/lib/rubocop/cop/style/trivial_accessors.rb +26 -30
- data/lib/rubocop/cop/style/unless_else.rb +5 -8
- data/lib/rubocop/cop/style/unpack_first.rb +5 -8
- data/lib/rubocop/cop/style/variable_interpolation.rb +7 -10
- data/lib/rubocop/cop/style/when_then.rb +4 -6
- data/lib/rubocop/cop/style/while_until_do.rb +6 -16
- data/lib/rubocop/cop/style/while_until_modifier.rb +6 -20
- data/lib/rubocop/cop/style/word_array.rb +5 -23
- data/lib/rubocop/cop/style/yoda_condition.rb +4 -15
- data/lib/rubocop/cop/style/zero_length_predicate.rb +12 -18
- data/lib/rubocop/cop/team.rb +1 -0
- data/lib/rubocop/cop/util.rb +1 -2
- data/lib/rubocop/cop/utils/format_string.rb +3 -5
- data/lib/rubocop/cop/variable_force.rb +2 -0
- data/lib/rubocop/cop/variable_force/branch.rb +0 -4
- data/lib/rubocop/cops_documentation_generator.rb +4 -2
- data/lib/rubocop/core_ext/string.rb +2 -2
- data/lib/rubocop/directive_comment.rb +32 -0
- data/lib/rubocop/ext/regexp_node.rb +62 -0
- data/lib/rubocop/file_finder.rb +1 -0
- data/lib/rubocop/formatter/auto_gen_config_formatter.rb +2 -1
- data/lib/rubocop/formatter/disabled_config_formatter.rb +12 -5
- data/lib/rubocop/formatter/html_formatter.rb +2 -0
- data/lib/rubocop/formatter/progress_formatter.rb +2 -1
- data/lib/rubocop/formatter/quiet_formatter.rb +1 -1
- data/lib/rubocop/formatter/simple_text_formatter.rb +36 -6
- data/lib/rubocop/name_similarity.rb +1 -0
- data/lib/rubocop/options.rb +40 -17
- data/lib/rubocop/remote_config.rb +1 -0
- data/lib/rubocop/result_cache.rb +39 -15
- data/lib/rubocop/rspec/cop_helper.rb +5 -2
- data/lib/rubocop/rspec/expect_offense.rb +14 -9
- data/lib/rubocop/rspec/shared_contexts.rb +12 -0
- data/lib/rubocop/runner.rb +38 -18
- data/lib/rubocop/string_interpreter.rb +3 -0
- data/lib/rubocop/target_finder.rb +28 -26
- data/lib/rubocop/target_ruby.rb +7 -1
- data/lib/rubocop/version.rb +7 -1
- data/lib/rubocop/yaml_duplication_checker.rb +1 -0
- metadata +31 -17
- data/lib/rubocop/cop/mixin/regexp_literal_help.rb +0 -43
- data/lib/rubocop/cop/tokens_util.rb +0 -84
@@ -49,31 +49,33 @@ module RuboCop
|
|
49
49
|
# #ruby=2.7.0
|
50
50
|
# #ruby-gemset=myproject
|
51
51
|
#
|
52
|
-
class LeadingCommentSpace <
|
52
|
+
class LeadingCommentSpace < Base
|
53
53
|
include RangeHelp
|
54
|
+
extend AutoCorrector
|
54
55
|
|
55
56
|
MSG = 'Missing space after `#`.'
|
56
57
|
|
57
|
-
def
|
58
|
+
def on_new_investigation
|
58
59
|
processed_source.comments.each do |comment|
|
59
60
|
next unless /\A#+[^#\s=:+-]/.match?(comment.text)
|
60
61
|
next if comment.loc.line == 1 && allowed_on_first_line?(comment)
|
61
62
|
next if doxygen_comment_style?(comment)
|
62
63
|
next if gemfile_ruby_comment?(comment)
|
63
64
|
|
64
|
-
add_offense(comment)
|
65
|
+
add_offense(comment) do |corrector|
|
66
|
+
expr = comment.loc.expression
|
67
|
+
|
68
|
+
corrector.insert_after(hash_mark(expr), ' ')
|
69
|
+
end
|
65
70
|
end
|
66
71
|
end
|
67
72
|
|
68
|
-
|
69
|
-
expr = comment.loc.expression
|
70
|
-
hash_mark = range_between(expr.begin_pos, expr.begin_pos + 1)
|
73
|
+
private
|
71
74
|
|
72
|
-
|
75
|
+
def hash_mark(expr)
|
76
|
+
range_between(expr.begin_pos, expr.begin_pos + 1)
|
73
77
|
end
|
74
78
|
|
75
|
-
private
|
76
|
-
|
77
79
|
def allowed_on_first_line?(comment)
|
78
80
|
shebang?(comment) || rackup_config_file? && rackup_options?(comment)
|
79
81
|
end
|
@@ -27,23 +27,18 @@ module RuboCop
|
|
27
27
|
# # good
|
28
28
|
# # (start of file)
|
29
29
|
# # a comment
|
30
|
-
class LeadingEmptyLines <
|
30
|
+
class LeadingEmptyLines < Base
|
31
|
+
extend AutoCorrector
|
32
|
+
|
31
33
|
MSG = 'Unnecessary blank line at the beginning of the source.'
|
32
34
|
|
33
|
-
def
|
35
|
+
def on_new_investigation
|
34
36
|
token = processed_source.tokens[0]
|
35
37
|
return unless token && token.line > 1
|
36
38
|
|
37
|
-
add_offense(
|
38
|
-
|
39
|
-
end
|
40
|
-
|
41
|
-
def autocorrect(node)
|
42
|
-
range = Parser::Source::Range.new(processed_source.buffer,
|
43
|
-
0,
|
44
|
-
node.begin_pos)
|
39
|
+
add_offense(token.pos) do |corrector|
|
40
|
+
range = Parser::Source::Range.new(processed_source.buffer, 0, token.begin_pos)
|
45
41
|
|
46
|
-
lambda do |corrector|
|
47
42
|
corrector.remove(range)
|
48
43
|
end
|
49
44
|
end
|
@@ -88,8 +88,9 @@ module RuboCop
|
|
88
88
|
# # good
|
89
89
|
# [ :a,
|
90
90
|
# :b ]
|
91
|
-
class MultilineArrayBraceLayout <
|
91
|
+
class MultilineArrayBraceLayout < Base
|
92
92
|
include MultilineLiteralBraceLayout
|
93
|
+
extend AutoCorrector
|
93
94
|
|
94
95
|
SAME_LINE_MESSAGE = 'The closing array brace must be on the same ' \
|
95
96
|
'line as the last array element when the opening brace is on the ' \
|
@@ -108,10 +109,6 @@ module RuboCop
|
|
108
109
|
def on_array(node)
|
109
110
|
check_brace_layout(node)
|
110
111
|
end
|
111
|
-
|
112
|
-
def autocorrect(node)
|
113
|
-
MultilineLiteralBraceCorrector.new(node, processed_source)
|
114
|
-
end
|
115
112
|
end
|
116
113
|
end
|
117
114
|
end
|
@@ -20,8 +20,9 @@ module RuboCop
|
|
20
20
|
# b,
|
21
21
|
# c
|
22
22
|
# ]
|
23
|
-
class MultilineArrayLineBreaks <
|
23
|
+
class MultilineArrayLineBreaks < Base
|
24
24
|
include MultilineElementLineBreaks
|
25
|
+
extend AutoCorrector
|
25
26
|
|
26
27
|
MSG = 'Each item in a multi-line array must start ' \
|
27
28
|
'on a separate line.'
|
@@ -29,10 +30,6 @@ module RuboCop
|
|
29
30
|
def on_array(node)
|
30
31
|
check_line_breaks(node, node.children)
|
31
32
|
end
|
32
|
-
|
33
|
-
def autocorrect(node)
|
34
|
-
EmptyLineCorrector.insert_before(node)
|
35
|
-
end
|
36
33
|
end
|
37
34
|
end
|
38
35
|
end
|
@@ -31,10 +31,11 @@ module RuboCop
|
|
31
31
|
# foo = if expression
|
32
32
|
# 'bar'
|
33
33
|
# end
|
34
|
-
class MultilineAssignmentLayout <
|
34
|
+
class MultilineAssignmentLayout < Base
|
35
35
|
include CheckAssignment
|
36
36
|
include ConfigurableEnforcedStyle
|
37
37
|
include RangeHelp
|
38
|
+
extend AutoCorrector
|
38
39
|
|
39
40
|
NEW_LINE_OFFENSE = 'Right hand side of multi-line assignment is on ' \
|
40
41
|
'the same line as the assignment operator `=`.'
|
@@ -63,24 +64,19 @@ module RuboCop
|
|
63
64
|
def check_new_line_offense(node, rhs)
|
64
65
|
return unless node.loc.operator.line == rhs.first_line
|
65
66
|
|
66
|
-
add_offense(node, message: NEW_LINE_OFFENSE)
|
67
|
+
add_offense(node, message: NEW_LINE_OFFENSE) do |corrector|
|
68
|
+
corrector.insert_after(node.loc.operator, "\n")
|
69
|
+
end
|
67
70
|
end
|
68
71
|
|
69
72
|
def check_same_line_offense(node, rhs)
|
70
73
|
return unless node.loc.operator.line != rhs.first_line
|
71
74
|
|
72
|
-
add_offense(node, message: SAME_LINE_OFFENSE)
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
when :new_line
|
78
|
-
->(corrector) { corrector.insert_after(node.loc.operator, "\n") }
|
79
|
-
when :same_line
|
80
|
-
range = range_between(node.loc.operator.end_pos,
|
81
|
-
extract_rhs(node).source_range.begin_pos)
|
82
|
-
|
83
|
-
->(corrector) { corrector.replace(range, ' ') }
|
75
|
+
add_offense(node, message: SAME_LINE_OFFENSE) do |corrector|
|
76
|
+
range = range_between(
|
77
|
+
node.loc.operator.end_pos, extract_rhs(node).source_range.begin_pos
|
78
|
+
)
|
79
|
+
corrector.replace(range, ' ')
|
84
80
|
end
|
85
81
|
end
|
86
82
|
|
@@ -48,8 +48,9 @@ module RuboCop
|
|
48
48
|
# foo(i)
|
49
49
|
# bar(i)
|
50
50
|
# }
|
51
|
-
class MultilineBlockLayout <
|
51
|
+
class MultilineBlockLayout < Base
|
52
52
|
include RangeHelp
|
53
|
+
extend AutoCorrector
|
53
54
|
|
54
55
|
MSG = 'Block body expression is on the same line as ' \
|
55
56
|
'the block start.'
|
@@ -70,23 +71,6 @@ module RuboCop
|
|
70
71
|
add_offense_for_expression(node, node.body, MSG)
|
71
72
|
end
|
72
73
|
|
73
|
-
def autocorrect(node)
|
74
|
-
lambda do |corrector|
|
75
|
-
unless args_on_beginning_line?(node)
|
76
|
-
autocorrect_arguments(corrector, node)
|
77
|
-
expr_before_body = node.arguments.source_range.end
|
78
|
-
end
|
79
|
-
|
80
|
-
return unless node.body
|
81
|
-
|
82
|
-
expr_before_body ||= node.loc.begin
|
83
|
-
|
84
|
-
if expr_before_body.line == node.body.first_line
|
85
|
-
autocorrect_body(corrector, node, node.body)
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
74
|
private
|
91
75
|
|
92
76
|
def args_on_beginning_line?(node)
|
@@ -116,7 +100,25 @@ module RuboCop
|
|
116
100
|
def add_offense_for_expression(node, expr, msg)
|
117
101
|
expression = expr.source_range
|
118
102
|
range = range_between(expression.begin_pos, expression.end_pos)
|
119
|
-
|
103
|
+
|
104
|
+
add_offense(range, message: msg) do |corrector|
|
105
|
+
autocorrect(corrector, node)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def autocorrect(corrector, node)
|
110
|
+
unless args_on_beginning_line?(node)
|
111
|
+
autocorrect_arguments(corrector, node)
|
112
|
+
expr_before_body = node.arguments.source_range.end
|
113
|
+
end
|
114
|
+
|
115
|
+
return unless node.body
|
116
|
+
|
117
|
+
expr_before_body ||= node.loc.begin
|
118
|
+
|
119
|
+
return unless expr_before_body.line == node.body.first_line
|
120
|
+
|
121
|
+
autocorrect_body(corrector, node, node.body)
|
120
122
|
end
|
121
123
|
|
122
124
|
def autocorrect_arguments(corrector, node)
|
@@ -88,8 +88,9 @@ module RuboCop
|
|
88
88
|
# # good
|
89
89
|
# { a: 1,
|
90
90
|
# b: 2 }
|
91
|
-
class MultilineHashBraceLayout <
|
91
|
+
class MultilineHashBraceLayout < Base
|
92
92
|
include MultilineLiteralBraceLayout
|
93
|
+
extend AutoCorrector
|
93
94
|
|
94
95
|
SAME_LINE_MESSAGE = 'Closing hash brace must be on the same line as ' \
|
95
96
|
'the last hash element when opening brace is on the same line as ' \
|
@@ -108,10 +109,6 @@ module RuboCop
|
|
108
109
|
def on_hash(node)
|
109
110
|
check_brace_layout(node)
|
110
111
|
end
|
111
|
-
|
112
|
-
def autocorrect(node)
|
113
|
-
MultilineLiteralBraceCorrector.new(node, processed_source)
|
114
|
-
end
|
115
112
|
end
|
116
113
|
end
|
117
114
|
end
|
@@ -20,8 +20,9 @@ module RuboCop
|
|
20
20
|
# b: 2,
|
21
21
|
# c: 3
|
22
22
|
# }
|
23
|
-
class MultilineHashKeyLineBreaks <
|
23
|
+
class MultilineHashKeyLineBreaks < Base
|
24
24
|
include MultilineElementLineBreaks
|
25
|
+
extend AutoCorrector
|
25
26
|
|
26
27
|
MSG = 'Each key in a multi-line hash must start on a ' \
|
27
28
|
'separate line.'
|
@@ -35,10 +36,6 @@ module RuboCop
|
|
35
36
|
check_line_breaks(node, node.children) if node.loc.begin
|
36
37
|
end
|
37
38
|
|
38
|
-
def autocorrect(node)
|
39
|
-
EmptyLineCorrector.insert_before(node)
|
40
|
-
end
|
41
|
-
|
42
39
|
private
|
43
40
|
|
44
41
|
def starts_with_curly_brace?(node)
|
@@ -19,8 +19,9 @@ module RuboCop
|
|
19
19
|
# b,
|
20
20
|
# c
|
21
21
|
# )
|
22
|
-
class MultilineMethodArgumentLineBreaks <
|
23
|
-
include
|
22
|
+
class MultilineMethodArgumentLineBreaks < Base
|
23
|
+
include MultilineElementLineBreaks
|
24
|
+
extend AutoCorrector
|
24
25
|
|
25
26
|
MSG = 'Each argument in a multi-line method call must start ' \
|
26
27
|
'on a separate line.'
|
@@ -36,16 +37,11 @@ module RuboCop
|
|
36
37
|
#
|
37
38
|
# ...then each key/value pair is treated as a method 'argument'
|
38
39
|
# when determining where line breaks should appear.
|
39
|
-
|
40
|
-
|
41
|
-
end
|
40
|
+
last_arg = args.last
|
41
|
+
args = args[0...-1] + last_arg.children if last_arg&.hash_type? && !last_arg&.braces?
|
42
42
|
|
43
43
|
check_line_breaks(node, args)
|
44
44
|
end
|
45
|
-
|
46
|
-
def autocorrect(node)
|
47
|
-
EmptyLineCorrector.insert_before(node)
|
48
|
-
end
|
49
45
|
end
|
50
46
|
end
|
51
47
|
end
|
@@ -88,8 +88,9 @@ module RuboCop
|
|
88
88
|
# # good
|
89
89
|
# foo(a,
|
90
90
|
# b)
|
91
|
-
class MultilineMethodCallBraceLayout <
|
91
|
+
class MultilineMethodCallBraceLayout < Base
|
92
92
|
include MultilineLiteralBraceLayout
|
93
|
+
extend AutoCorrector
|
93
94
|
|
94
95
|
SAME_LINE_MESSAGE = 'Closing method call brace must be on the ' \
|
95
96
|
'same line as the last argument when opening brace is on the same ' \
|
@@ -109,10 +110,6 @@ module RuboCop
|
|
109
110
|
check_brace_layout(node)
|
110
111
|
end
|
111
112
|
|
112
|
-
def autocorrect(node)
|
113
|
-
MultilineLiteralBraceCorrector.new(node, processed_source)
|
114
|
-
end
|
115
|
-
|
116
113
|
private
|
117
114
|
|
118
115
|
def children(node)
|
@@ -100,8 +100,9 @@ module RuboCop
|
|
100
100
|
# def foo(a,
|
101
101
|
# b)
|
102
102
|
# end
|
103
|
-
class MultilineMethodDefinitionBraceLayout <
|
103
|
+
class MultilineMethodDefinitionBraceLayout < Base
|
104
104
|
include MultilineLiteralBraceLayout
|
105
|
+
extend AutoCorrector
|
105
106
|
|
106
107
|
SAME_LINE_MESSAGE = 'Closing method definition brace must be on the ' \
|
107
108
|
'same line as the last parameter when opening brace is on the same ' \
|
@@ -121,10 +122,6 @@ module RuboCop
|
|
121
122
|
check_brace_layout(node.arguments)
|
122
123
|
end
|
123
124
|
alias on_defs on_def
|
124
|
-
|
125
|
-
def autocorrect(node)
|
126
|
-
MultilineLiteralBraceCorrector.new(node, processed_source)
|
127
|
-
end
|
128
125
|
end
|
129
126
|
end
|
130
127
|
end
|
@@ -21,8 +21,10 @@ module RuboCop
|
|
21
21
|
# rescue
|
22
22
|
# puts 'error'
|
23
23
|
# end
|
24
|
-
class RescueEnsureAlignment <
|
24
|
+
class RescueEnsureAlignment < Base
|
25
25
|
include RangeHelp
|
26
|
+
include EndKeywordAlignment
|
27
|
+
extend AutoCorrector
|
26
28
|
|
27
29
|
MSG = '`%<kw_loc>s` at %<kw_loc_line>d, %<kw_loc_column>d is not ' \
|
28
30
|
'aligned with `%<beginning>s` at ' \
|
@@ -41,19 +43,7 @@ module RuboCop
|
|
41
43
|
check(node)
|
42
44
|
end
|
43
45
|
|
44
|
-
def
|
45
|
-
whitespace = whitespace_range(node)
|
46
|
-
# Some inline node is sitting before current node.
|
47
|
-
return nil unless whitespace.source.strip.empty?
|
48
|
-
|
49
|
-
alignment_node = alignment_node(node)
|
50
|
-
return false if alignment_node.nil?
|
51
|
-
|
52
|
-
new_column = alignment_node.loc.column
|
53
|
-
->(corrector) { corrector.replace(whitespace, ' ' * new_column) }
|
54
|
-
end
|
55
|
-
|
56
|
-
def investigate(processed_source)
|
46
|
+
def on_new_investigation
|
57
47
|
@modifier_locations =
|
58
48
|
processed_source.tokens.each_with_object([]) do |token, locations|
|
59
49
|
next unless token.rescue_modifier?
|
@@ -70,18 +60,26 @@ module RuboCop
|
|
70
60
|
alignment_node = alignment_node(node)
|
71
61
|
return if alignment_node.nil?
|
72
62
|
|
73
|
-
alignment_loc = alignment_node
|
63
|
+
alignment_loc = alignment_location(alignment_node)
|
74
64
|
kw_loc = node.loc.keyword
|
75
65
|
|
76
|
-
return if
|
77
|
-
alignment_loc.column == kw_loc.column ||
|
78
|
-
alignment_loc.line == kw_loc.line
|
66
|
+
return if alignment_loc.column == kw_loc.column || alignment_loc.line == kw_loc.line
|
79
67
|
|
80
68
|
add_offense(
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
69
|
+
kw_loc, message: format_message(alignment_node, alignment_loc, kw_loc)
|
70
|
+
) do |corrector|
|
71
|
+
autocorrect(corrector, node, alignment_loc)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def autocorrect(corrector, node, alignment_location)
|
76
|
+
whitespace = whitespace_range(node)
|
77
|
+
# Some inline node is sitting before current node.
|
78
|
+
return nil unless whitespace.source.strip.empty?
|
79
|
+
|
80
|
+
new_column = alignment_location.column
|
81
|
+
|
82
|
+
corrector.replace(whitespace, ' ' * new_column)
|
85
83
|
end
|
86
84
|
|
87
85
|
def format_message(alignment_node, alignment_loc, kw_loc)
|
@@ -183,6 +181,27 @@ module RuboCop
|
|
183
181
|
|
184
182
|
false
|
185
183
|
end
|
184
|
+
|
185
|
+
def alignment_location(alignment_node)
|
186
|
+
if begin_end_alignment_style == 'start_of_line'
|
187
|
+
start_line_range(alignment_node)
|
188
|
+
else
|
189
|
+
alignment_node.loc.expression
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
def begin_end_alignment_style
|
194
|
+
# FIXME: Workaround for pending status for `Layout/BeginEndAlignment` cop
|
195
|
+
# When RuboCop 1.0 is released, please replace it with the following condition.
|
196
|
+
#
|
197
|
+
# config.for_cop('Layout/BeginEndAlignment')['Enabled'] &&
|
198
|
+
# config.for_cop('Layout/BeginEndAlignment')['EnforcedStyleAlignWith']
|
199
|
+
if config.for_all_cops['NewCops'] == 'enable' ||
|
200
|
+
config.for_cop('Layout/BeginEndAlignment')['Enabled'] &&
|
201
|
+
config.for_cop('Layout/BeginEndAlignment')['Enabled'] != 'pending'
|
202
|
+
config.for_cop('Layout/BeginEndAlignment')['EnforcedStyleAlignWith']
|
203
|
+
end
|
204
|
+
end
|
186
205
|
end
|
187
206
|
end
|
188
207
|
end
|
@@ -13,7 +13,9 @@ module RuboCop
|
|
13
13
|
#
|
14
14
|
# # good
|
15
15
|
# def f(a:, b: 2); {a: 3}; end
|
16
|
-
class SpaceAfterColon <
|
16
|
+
class SpaceAfterColon < Base
|
17
|
+
extend AutoCorrector
|
18
|
+
|
17
19
|
MSG = 'Space missing after colon.'
|
18
20
|
|
19
21
|
def on_pair(node)
|
@@ -21,7 +23,7 @@ module RuboCop
|
|
21
23
|
|
22
24
|
colon = node.loc.operator
|
23
25
|
|
24
|
-
|
26
|
+
register_offense(colon) unless followed_by_space?(colon)
|
25
27
|
end
|
26
28
|
|
27
29
|
def on_kwoptarg(node)
|
@@ -29,15 +31,17 @@ module RuboCop
|
|
29
31
|
# optional keyword argument's name, so must construct one.
|
30
32
|
colon = node.loc.name.end.resize(1)
|
31
33
|
|
32
|
-
|
33
|
-
end
|
34
|
-
|
35
|
-
def autocorrect(range)
|
36
|
-
->(corrector) { corrector.insert_after(range, ' ') }
|
34
|
+
register_offense(colon) unless followed_by_space?(colon)
|
37
35
|
end
|
38
36
|
|
39
37
|
private
|
40
38
|
|
39
|
+
def register_offense(colon)
|
40
|
+
add_offense(colon) do |corrector|
|
41
|
+
corrector.insert_after(colon, ' ')
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
41
45
|
def followed_by_space?(colon)
|
42
46
|
/\s/.match?(colon.source_buffer.source[colon.end_pos])
|
43
47
|
end
|