rubocop 1.62.1 → 1.67.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 +67 -68
- data/config/default.yml +82 -12
- data/config/internal_affairs.yml +11 -0
- data/exe/rubocop +4 -3
- data/lib/rubocop/cached_data.rb +11 -3
- data/lib/rubocop/cli/command/auto_generate_config.rb +6 -7
- data/lib/rubocop/cli/command/lsp.rb +2 -2
- data/lib/rubocop/cli/command/show_docs_url.rb +2 -2
- data/lib/rubocop/cli.rb +4 -0
- data/lib/rubocop/comment_config.rb +1 -1
- data/lib/rubocop/config.rb +37 -11
- data/lib/rubocop/config_loader.rb +15 -9
- data/lib/rubocop/config_loader_resolver.rb +13 -8
- data/lib/rubocop/config_obsoletion.rb +1 -1
- data/lib/rubocop/config_validator.rb +3 -2
- data/lib/rubocop/cop/base.rb +56 -16
- data/lib/rubocop/cop/bundler/gem_version.rb +4 -5
- data/lib/rubocop/cop/cop.rb +30 -4
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +2 -0
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +1 -1
- data/lib/rubocop/cop/documentation.rb +32 -5
- data/lib/rubocop/cop/force.rb +12 -0
- data/lib/rubocop/cop/gemspec/add_runtime_dependency.rb +38 -0
- data/lib/rubocop/cop/gemspec/dependency_version.rb +3 -5
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +2 -2
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +3 -3
- data/lib/rubocop/cop/internal_affairs/cop_description.rb +0 -4
- data/lib/rubocop/cop/internal_affairs/empty_line_between_expect_offense_and_correction.rb +2 -1
- data/lib/rubocop/cop/internal_affairs/example_description.rb +2 -1
- data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +6 -21
- data/lib/rubocop/cop/internal_affairs/redundant_source_range.rb +8 -1
- data/lib/rubocop/cop/internal_affairs/undefined_config.rb +11 -1
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +0 -5
- data/lib/rubocop/cop/internal_affairs.rb +16 -0
- data/lib/rubocop/cop/layout/access_modifier_indentation.rb +5 -1
- data/lib/rubocop/cop/layout/assignment_indentation.rb +3 -2
- data/lib/rubocop/cop/layout/block_alignment.rb +30 -12
- data/lib/rubocop/cop/layout/case_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/comment_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/condition_position.rb +0 -4
- data/lib/rubocop/cop/layout/def_end_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/empty_comment.rb +3 -1
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +1 -1
- data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +1 -1
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +2 -1
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +8 -3
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +2 -2
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +2 -3
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +8 -0
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/indentation_width.rb +5 -6
- data/lib/rubocop/cop/layout/leading_comment_space.rb +28 -1
- data/lib/rubocop/cop/layout/line_length.rb +20 -20
- data/lib/rubocop/cop/layout/space_around_operators.rb +3 -0
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +3 -4
- data/lib/rubocop/cop/legacy/corrector.rb +12 -2
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +0 -2
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +0 -2
- data/lib/rubocop/cop/lint/ambiguous_range.rb +4 -1
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +0 -2
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +2 -2
- data/lib/rubocop/cop/lint/big_decimal_new.rb +4 -7
- data/lib/rubocop/cop/lint/boolean_symbol.rb +1 -3
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +0 -13
- data/lib/rubocop/cop/lint/debugger.rb +27 -6
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +1 -1
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +0 -10
- data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -5
- data/lib/rubocop/cop/lint/duplicate_hash_key.rb +0 -4
- data/lib/rubocop/cop/lint/duplicate_methods.rb +0 -10
- data/lib/rubocop/cop/lint/duplicate_set_element.rb +74 -0
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +0 -4
- data/lib/rubocop/cop/lint/else_layout.rb +0 -2
- data/lib/rubocop/cop/lint/empty_conditional_body.rb +28 -7
- data/lib/rubocop/cop/lint/empty_ensure.rb +1 -11
- data/lib/rubocop/cop/lint/empty_interpolation.rb +0 -4
- data/lib/rubocop/cop/lint/empty_when.rb +1 -3
- data/lib/rubocop/cop/lint/ensure_return.rb +1 -9
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +21 -14
- data/lib/rubocop/cop/lint/float_comparison.rb +1 -1
- data/lib/rubocop/cop/lint/float_out_of_range.rb +0 -4
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +0 -10
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +23 -12
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +0 -7
- data/lib/rubocop/cop/lint/interpolation_check.rb +0 -4
- data/lib/rubocop/cop/lint/it_without_arguments_in_block.rb +5 -14
- data/lib/rubocop/cop/lint/literal_as_condition.rb +1 -1
- data/lib/rubocop/cop/lint/literal_assignment_in_condition.rb +1 -1
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +25 -6
- data/lib/rubocop/cop/lint/loop.rb +6 -12
- data/lib/rubocop/cop/lint/mixed_case_range.rb +9 -4
- data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -7
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +0 -4
- data/lib/rubocop/cop/lint/no_return_in_begin_end_blocks.rb +0 -5
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +1 -1
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +5 -6
- data/lib/rubocop/cop/lint/percent_string_array.rb +0 -4
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +0 -4
- data/lib/rubocop/cop/lint/rand_one.rb +0 -4
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +3 -1
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +0 -4
- data/lib/rubocop/cop/lint/redundant_with_index.rb +3 -0
- data/lib/rubocop/cop/lint/require_parentheses.rb +0 -4
- data/lib/rubocop/cop/lint/rescue_exception.rb +0 -4
- data/lib/rubocop/cop/lint/return_in_void_context.rb +0 -2
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +0 -4
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +105 -41
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +6 -10
- data/lib/rubocop/cop/lint/symbol_conversion.rb +1 -1
- data/lib/rubocop/cop/lint/to_enum_arguments.rb +2 -9
- data/lib/rubocop/cop/lint/unified_integer.rb +0 -4
- data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +1 -0
- data/lib/rubocop/cop/lint/unreachable_code.rb +4 -7
- data/lib/rubocop/cop/lint/unreachable_loop.rb +8 -2
- data/lib/rubocop/cop/lint/uri_regexp.rb +25 -7
- data/lib/rubocop/cop/lint/useless_assignment.rb +19 -16
- data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +0 -4
- data/lib/rubocop/cop/lint/useless_numeric_operation.rb +77 -0
- data/lib/rubocop/cop/lint/useless_setter_call.rb +0 -4
- data/lib/rubocop/cop/lint/void.rb +35 -8
- data/lib/rubocop/cop/metrics/block_length.rb +6 -5
- data/lib/rubocop/cop/metrics/block_nesting.rb +19 -7
- data/lib/rubocop/cop/metrics/class_length.rb +6 -5
- data/lib/rubocop/cop/metrics/method_length.rb +6 -5
- data/lib/rubocop/cop/metrics/module_length.rb +6 -5
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +5 -5
- data/lib/rubocop/cop/mixin/alignment.rb +5 -1
- data/lib/rubocop/cop/mixin/allowed_methods.rb +7 -1
- data/lib/rubocop/cop/mixin/allowed_pattern.rb +15 -3
- data/lib/rubocop/cop/mixin/annotation_comment.rb +0 -2
- data/lib/rubocop/cop/mixin/code_length.rb +12 -1
- data/lib/rubocop/cop/mixin/configurable_max.rb +5 -1
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +19 -9
- data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +9 -2
- data/lib/rubocop/cop/mixin/line_length_help.rb +7 -2
- data/lib/rubocop/cop/mixin/method_complexity.rb +15 -6
- data/lib/rubocop/cop/mixin/percent_array.rb +1 -1
- data/lib/rubocop/cop/mixin/rescue_node.rb +4 -0
- data/lib/rubocop/cop/mixin/safe_assignment.rb +1 -1
- data/lib/rubocop/cop/mixin/statement_modifier.rb +3 -2
- data/lib/rubocop/cop/mixin/string_literals_help.rb +12 -0
- data/lib/rubocop/cop/naming/accessor_method_name.rb +5 -0
- data/lib/rubocop/cop/naming/block_forwarding.rb +31 -12
- data/lib/rubocop/cop/naming/file_name.rb +2 -2
- data/lib/rubocop/cop/naming/inclusive_language.rb +13 -5
- data/lib/rubocop/cop/naming/predicate_name.rb +53 -27
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +10 -1
- data/lib/rubocop/cop/offense.rb +2 -2
- data/lib/rubocop/cop/security/compound_hash.rb +2 -2
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +62 -2
- data/lib/rubocop/cop/style/accessor_grouping.rb +10 -2
- data/lib/rubocop/cop/style/alias.rb +2 -1
- data/lib/rubocop/cop/style/arguments_forwarding.rb +59 -11
- data/lib/rubocop/cop/style/block_delimiters.rb +14 -1
- data/lib/rubocop/cop/style/collection_compact.rb +9 -9
- data/lib/rubocop/cop/style/combinable_loops.rb +7 -0
- data/lib/rubocop/cop/style/commented_keyword.rb +7 -1
- data/lib/rubocop/cop/style/conditional_assignment.rb +2 -2
- data/lib/rubocop/cop/style/copyright.rb +31 -21
- data/lib/rubocop/cop/style/data_inheritance.rb +1 -1
- data/lib/rubocop/cop/style/def_with_parentheses.rb +0 -2
- data/lib/rubocop/cop/style/documentation.rb +24 -24
- data/lib/rubocop/cop/style/documentation_method.rb +20 -0
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +0 -1
- data/lib/rubocop/cop/style/empty_else.rb +6 -5
- data/lib/rubocop/cop/style/empty_heredoc.rb +1 -14
- data/lib/rubocop/cop/style/empty_literal.rb +31 -22
- data/lib/rubocop/cop/style/eval_with_location.rb +16 -13
- data/lib/rubocop/cop/style/exact_regexp_match.rb +2 -1
- data/lib/rubocop/cop/style/file_read.rb +2 -5
- data/lib/rubocop/cop/style/file_write.rb +2 -5
- data/lib/rubocop/cop/style/format_string.rb +9 -9
- data/lib/rubocop/cop/style/format_string_token.rb +2 -2
- data/lib/rubocop/cop/style/global_std_stream.rb +7 -1
- data/lib/rubocop/cop/style/guard_clause.rb +3 -1
- data/lib/rubocop/cop/style/hash_each_methods.rb +6 -0
- data/lib/rubocop/cop/style/hash_except.rb +8 -5
- data/lib/rubocop/cop/style/hash_syntax.rb +20 -2
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +1 -1
- data/lib/rubocop/cop/style/if_inside_else.rb +1 -1
- data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +5 -4
- data/lib/rubocop/cop/style/if_with_semicolon.rb +49 -6
- data/lib/rubocop/cop/style/in_pattern_then.rb +6 -2
- data/lib/rubocop/cop/style/invertible_unless_condition.rb +2 -2
- data/lib/rubocop/cop/style/lambda.rb +1 -1
- data/lib/rubocop/cop/style/magic_comment_format.rb +1 -1
- data/lib/rubocop/cop/style/map_compact_with_conditional_block.rb +77 -43
- data/lib/rubocop/cop/style/map_into_array.rb +228 -0
- data/lib/rubocop/cop/style/map_to_hash.rb +1 -1
- data/lib/rubocop/cop/style/map_to_set.rb +1 -1
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +17 -7
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +2 -2
- data/lib/rubocop/cop/style/missing_else.rb +0 -4
- data/lib/rubocop/cop/style/multiline_memoization.rb +1 -1
- data/lib/rubocop/cop/style/multiline_when_then.rb +0 -4
- data/lib/rubocop/cop/style/multiple_comparison.rb +3 -11
- data/lib/rubocop/cop/style/nested_modifier.rb +1 -1
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +1 -1
- data/lib/rubocop/cop/style/numeric_predicate.rb +12 -4
- data/lib/rubocop/cop/style/one_line_conditional.rb +6 -2
- data/lib/rubocop/cop/style/operator_method_call.rb +25 -6
- data/lib/rubocop/cop/style/parallel_assignment.rb +5 -4
- data/lib/rubocop/cop/style/quoted_symbols.rb +1 -3
- data/lib/rubocop/cop/style/redundant_argument.rb +24 -1
- data/lib/rubocop/cop/style/redundant_begin.rb +5 -1
- data/lib/rubocop/cop/style/redundant_condition.rb +4 -4
- data/lib/rubocop/cop/style/redundant_current_directory_in_path.rb +1 -1
- data/lib/rubocop/cop/style/redundant_each.rb +1 -1
- data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +1 -1
- data/lib/rubocop/cop/style/redundant_filter_chain.rb +1 -1
- data/lib/rubocop/cop/style/redundant_interpolation_unfreeze.rb +46 -0
- data/lib/rubocop/cop/style/redundant_line_continuation.rb +15 -18
- data/lib/rubocop/cop/style/redundant_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/redundant_percent_q.rb +1 -1
- data/lib/rubocop/cop/style/redundant_regexp_argument.rb +4 -1
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +8 -24
- data/lib/rubocop/cop/style/require_order.rb +2 -2
- data/lib/rubocop/cop/style/rescue_modifier.rb +13 -1
- data/lib/rubocop/cop/style/return_nil_in_predicate_method_definition.rb +54 -12
- data/lib/rubocop/cop/style/safe_navigation.rb +94 -52
- data/lib/rubocop/cop/style/select_by_regexp.rb +9 -6
- data/lib/rubocop/cop/style/semicolon.rb +1 -1
- data/lib/rubocop/cop/style/send.rb +4 -4
- data/lib/rubocop/cop/style/send_with_literal_method_name.rb +104 -0
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +21 -2
- data/lib/rubocop/cop/style/special_global_vars.rb +1 -2
- data/lib/rubocop/cop/style/struct_inheritance.rb +1 -1
- data/lib/rubocop/cop/style/super_arguments.rb +174 -0
- data/lib/rubocop/cop/style/symbol_proc.rb +39 -5
- data/lib/rubocop/cop/style/ternary_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/top_level_method_definition.rb +1 -1
- data/lib/rubocop/cop/style/trivial_accessors.rb +1 -1
- data/lib/rubocop/cop/style/while_until_do.rb +0 -2
- data/lib/rubocop/cop/style/while_until_modifier.rb +0 -1
- data/lib/rubocop/cop/style/zero_length_predicate.rb +32 -24
- data/lib/rubocop/cop/team.rb +27 -3
- data/lib/rubocop/cop/util.rb +8 -2
- data/lib/rubocop/cop/variable_force.rb +13 -1
- data/lib/rubocop/cops_documentation_generator.rb +73 -34
- data/lib/rubocop/core_ext/string.rb +2 -6
- data/lib/rubocop/ext/regexp_node.rb +9 -31
- data/lib/rubocop/ext/regexp_parser.rb +4 -21
- data/lib/rubocop/file_finder.rb +9 -4
- data/lib/rubocop/formatter/clang_style_formatter.rb +3 -7
- data/lib/rubocop/formatter/disabled_config_formatter.rb +13 -9
- data/lib/rubocop/formatter/formatter_set.rb +7 -1
- data/lib/rubocop/formatter/html_formatter.rb +3 -1
- data/lib/rubocop/formatter/junit_formatter.rb +70 -23
- data/lib/rubocop/formatter/tap_formatter.rb +3 -7
- data/lib/rubocop/lockfile.rb +58 -7
- data/lib/rubocop/lsp/routes.rb +10 -13
- data/lib/rubocop/lsp/runtime.rb +2 -0
- data/lib/rubocop/lsp/server.rb +2 -1
- data/lib/rubocop/lsp.rb +9 -2
- data/lib/rubocop/options.rb +6 -4
- data/lib/rubocop/rake_task.rb +1 -1
- data/lib/rubocop/remote_config.rb +5 -1
- data/lib/rubocop/result_cache.rb +2 -8
- data/lib/rubocop/rspec/expect_offense.rb +9 -0
- data/lib/rubocop/rspec/shared_contexts.rb +35 -3
- data/lib/rubocop/rspec/support.rb +1 -0
- data/lib/rubocop/runner.rb +8 -1
- data/lib/rubocop/server/cache.rb +16 -1
- data/lib/rubocop/server/client_command/exec.rb +2 -2
- data/lib/rubocop/server/client_command/start.rb +1 -1
- data/lib/rubocop/server/core.rb +5 -0
- data/lib/rubocop/target_ruby.rb +19 -15
- data/lib/rubocop/version.rb +7 -5
- data/lib/rubocop/yaml_duplication_checker.rb +20 -26
- data/lib/rubocop.rb +13 -1
- metadata +20 -32
|
@@ -45,7 +45,8 @@ module RuboCop
|
|
|
45
45
|
EXPECT_OFFENSE_DESCRIPTION_MAPPING = {
|
|
46
46
|
/\A(does not|doesn't) (register|find|flag|report)/ => 'registers',
|
|
47
47
|
/\A(does not|doesn't) add (a|an|any )?offense/ => 'registers an offense',
|
|
48
|
-
/\
|
|
48
|
+
/\Aregisters no offense/ => 'registers an offense',
|
|
49
|
+
/\A(accepts|register)\b/ => 'registers'
|
|
49
50
|
}.freeze
|
|
50
51
|
|
|
51
52
|
EXPECT_NO_CORRECTIONS_DESCRIPTION_MAPPING = {
|
|
@@ -11,13 +11,9 @@ module RuboCop
|
|
|
11
11
|
#
|
|
12
12
|
# # bad
|
|
13
13
|
# add_offense(node, message: MSG)
|
|
14
|
-
# add_offense(node, message: message)
|
|
15
|
-
# add_offense(node, message: message(node))
|
|
16
14
|
#
|
|
17
15
|
# # good
|
|
18
16
|
# add_offense(node)
|
|
19
|
-
# add_offense(node, message: CUSTOM_MSG)
|
|
20
|
-
# add_offense(node, message: message(other_node))
|
|
21
17
|
#
|
|
22
18
|
class RedundantMessageArgument < Base
|
|
23
19
|
include RangeHelp
|
|
@@ -28,22 +24,21 @@ module RuboCop
|
|
|
28
24
|
|
|
29
25
|
# @!method node_type_check(node)
|
|
30
26
|
def_node_matcher :node_type_check, <<~PATTERN
|
|
31
|
-
(send nil? :add_offense
|
|
27
|
+
(send nil? :add_offense _node $hash)
|
|
32
28
|
PATTERN
|
|
33
29
|
|
|
34
30
|
# @!method redundant_message_argument(node)
|
|
35
31
|
def_node_matcher :redundant_message_argument, <<~PATTERN
|
|
36
32
|
(pair
|
|
37
33
|
(sym :message)
|
|
38
|
-
$
|
|
34
|
+
$(const nil? :MSG))
|
|
39
35
|
PATTERN
|
|
40
36
|
|
|
41
|
-
# @!method message_method_call(node)
|
|
42
|
-
def_node_matcher :message_method_call, '(send nil? :message $_node)'
|
|
43
|
-
|
|
44
37
|
def on_send(node)
|
|
45
|
-
node_type_check(node)
|
|
46
|
-
|
|
38
|
+
return unless (kwargs = node_type_check(node))
|
|
39
|
+
|
|
40
|
+
kwargs.pairs.each do |pair|
|
|
41
|
+
redundant_message_argument(pair) do
|
|
47
42
|
add_offense(pair) do |corrector|
|
|
48
43
|
range = offending_range(pair)
|
|
49
44
|
|
|
@@ -60,16 +55,6 @@ module RuboCop
|
|
|
60
55
|
|
|
61
56
|
range_with_surrounding_comma(with_space, :left)
|
|
62
57
|
end
|
|
63
|
-
|
|
64
|
-
def find_offending_argument(searched_node, kwargs)
|
|
65
|
-
kwargs.pairs.each do |pair|
|
|
66
|
-
redundant_message_argument(pair) do |message_argument|
|
|
67
|
-
node = message_method_call(message_argument)
|
|
68
|
-
|
|
69
|
-
yield pair if !node || node == searched_node
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
58
|
end
|
|
74
59
|
end
|
|
75
60
|
end
|
|
@@ -14,6 +14,12 @@ module RuboCop
|
|
|
14
14
|
# node.source
|
|
15
15
|
#
|
|
16
16
|
# # bad
|
|
17
|
+
# add_offense(node.source_range)
|
|
18
|
+
#
|
|
19
|
+
# # good
|
|
20
|
+
# add_offense(node)
|
|
21
|
+
#
|
|
22
|
+
# # bad
|
|
17
23
|
# add_offense(node) { |corrector| corrector.replace(node.source_range, prefer) }
|
|
18
24
|
# add_offense(node) { |corrector| corrector.insert_before(node.source_range, prefer) }
|
|
19
25
|
# add_offense(node) { |corrector| corrector.insert_before_multi(node.source_range, prefer) }
|
|
@@ -34,7 +40,7 @@ module RuboCop
|
|
|
34
40
|
|
|
35
41
|
MSG = 'Remove the redundant `source_range`.'
|
|
36
42
|
RESTRICT_ON_SEND = %i[
|
|
37
|
-
source
|
|
43
|
+
source add_offense
|
|
38
44
|
replace remove insert_before insert_before_multi insert_after insert_after_multi swap
|
|
39
45
|
].freeze
|
|
40
46
|
|
|
@@ -42,6 +48,7 @@ module RuboCop
|
|
|
42
48
|
def_node_matcher :redundant_source_range, <<~PATTERN
|
|
43
49
|
{
|
|
44
50
|
(send $(send _ :source_range) :source)
|
|
51
|
+
(send nil? :add_offense $(send _ :source_range) ...)
|
|
45
52
|
(send _ {
|
|
46
53
|
:replace :insert_before :insert_before_multi :insert_after :insert_after_multi
|
|
47
54
|
} $(send _ :source_range) _)
|
|
@@ -5,12 +5,22 @@ module RuboCop
|
|
|
5
5
|
module InternalAffairs
|
|
6
6
|
# Looks for references to a cop configuration key that isn't defined in config/default.yml.
|
|
7
7
|
class UndefinedConfig < Base
|
|
8
|
+
# `FileFinder` is a private API not intended to be used by cops,
|
|
9
|
+
# but it's fine for `InternalAffairs`.
|
|
10
|
+
extend FileFinder
|
|
11
|
+
|
|
8
12
|
ALLOWED_CONFIGURATIONS = %w[
|
|
9
13
|
Safe SafeAutoCorrect AutoCorrect Severity StyleGuide Details Reference Include Exclude
|
|
10
14
|
].freeze
|
|
11
15
|
RESTRICT_ON_SEND = %i[[] fetch].freeze
|
|
12
16
|
MSG = '`%<name>s` is not defined in the configuration for `%<cop>s` ' \
|
|
13
17
|
'in `config/default.yml`.'
|
|
18
|
+
CONFIG_PATH = find_file_upwards('config/default.yml', Dir.pwd)
|
|
19
|
+
CONFIG = if CONFIG_PATH
|
|
20
|
+
ConfigLoader.load_yaml_configuration(CONFIG_PATH)
|
|
21
|
+
else
|
|
22
|
+
{}
|
|
23
|
+
end
|
|
14
24
|
|
|
15
25
|
# @!method cop_class_def(node)
|
|
16
26
|
def_node_search :cop_class_def, <<~PATTERN
|
|
@@ -31,7 +41,7 @@ module RuboCop
|
|
|
31
41
|
cop_class = cop_class_def(processed_source.ast).first
|
|
32
42
|
return unless (@cop_class_name = extract_cop_name(cop_class))
|
|
33
43
|
|
|
34
|
-
@config_for_cop =
|
|
44
|
+
@config_for_cop = CONFIG[@cop_class_name] || {}
|
|
35
45
|
end
|
|
36
46
|
|
|
37
47
|
def on_send(node)
|
|
@@ -31,3 +31,19 @@ require_relative 'internal_affairs/style_detected_api_use'
|
|
|
31
31
|
require_relative 'internal_affairs/undefined_config'
|
|
32
32
|
require_relative 'internal_affairs/useless_message_assertion'
|
|
33
33
|
require_relative 'internal_affairs/useless_restrict_on_send'
|
|
34
|
+
|
|
35
|
+
module RuboCop
|
|
36
|
+
# Patch in the InternalAffairs specific config values
|
|
37
|
+
module InternalAffairs
|
|
38
|
+
def self.inject!
|
|
39
|
+
path = File.join(ConfigLoader::RUBOCOP_HOME, 'config', 'internal_affairs.yml')
|
|
40
|
+
hash = ConfigLoader.load_yaml_configuration(path)
|
|
41
|
+
config = Config.new(hash, path)
|
|
42
|
+
puts "configuration from #{path}" if ConfigLoader.debug?
|
|
43
|
+
config = ConfigLoader.merge_with_default(config, path)
|
|
44
|
+
ConfigLoader.instance_variable_set(:@default_configuration, config)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
RuboCop::InternalAffairs.inject!
|
|
@@ -59,7 +59,11 @@ module RuboCop
|
|
|
59
59
|
modifiers = body.each_child_node(:send).select(&:bare_access_modifier?)
|
|
60
60
|
end_range = node.loc.end
|
|
61
61
|
|
|
62
|
-
modifiers.each
|
|
62
|
+
modifiers.each do |modifier|
|
|
63
|
+
next if same_line?(node, modifier)
|
|
64
|
+
|
|
65
|
+
check_modifier(modifier, end_range)
|
|
66
|
+
end
|
|
63
67
|
end
|
|
64
68
|
|
|
65
69
|
def check_modifier(send_node, end_range)
|
|
@@ -6,6 +6,9 @@ module RuboCop
|
|
|
6
6
|
# Checks the indentation of the first line of the
|
|
7
7
|
# right-hand-side of a multi-line assignment.
|
|
8
8
|
#
|
|
9
|
+
# The indentation of the remaining lines can be corrected with
|
|
10
|
+
# other cops such as `Layout/IndentationConsistency` and `Layout/EndAlignment`.
|
|
11
|
+
#
|
|
9
12
|
# @example
|
|
10
13
|
# # bad
|
|
11
14
|
# value =
|
|
@@ -19,8 +22,6 @@ module RuboCop
|
|
|
19
22
|
# 'bar'
|
|
20
23
|
# end
|
|
21
24
|
#
|
|
22
|
-
# The indentation of the remaining lines can be corrected with
|
|
23
|
-
# other cops such as `IndentationConsistency` and `EndAlignment`.
|
|
24
25
|
class AssignmentIndentation < Base
|
|
25
26
|
include CheckAssignment
|
|
26
27
|
include Alignment
|
|
@@ -16,7 +16,7 @@ module RuboCop
|
|
|
16
16
|
# start of the line where the expression started.
|
|
17
17
|
#
|
|
18
18
|
# `either` (which is the default) : the `end` is allowed to be in either
|
|
19
|
-
# location. The
|
|
19
|
+
# location. The autocorrect will default to `start_of_line`.
|
|
20
20
|
#
|
|
21
21
|
# @example EnforcedStyleAlignWith: either (default)
|
|
22
22
|
# # bad
|
|
@@ -92,16 +92,6 @@ module RuboCop
|
|
|
92
92
|
|
|
93
93
|
private
|
|
94
94
|
|
|
95
|
-
def start_for_block_node(block_node)
|
|
96
|
-
# Which node should we align the 'end' with?
|
|
97
|
-
result = block_end_align_target(block_node)
|
|
98
|
-
|
|
99
|
-
# In offense message, we want to show the assignment LHS rather than
|
|
100
|
-
# the entire assignment
|
|
101
|
-
result, = *result while result.op_asgn_type? || result.masgn_type?
|
|
102
|
-
result
|
|
103
|
-
end
|
|
104
|
-
|
|
105
95
|
def block_end_align_target(node)
|
|
106
96
|
lineage = [node, *node.ancestors]
|
|
107
97
|
|
|
@@ -153,7 +143,11 @@ module RuboCop
|
|
|
153
143
|
end
|
|
154
144
|
|
|
155
145
|
def autocorrect(corrector, node)
|
|
156
|
-
ancestor_node =
|
|
146
|
+
ancestor_node = if style == :start_of_block
|
|
147
|
+
start_for_block_node(node)
|
|
148
|
+
else
|
|
149
|
+
start_for_line_node(node)
|
|
150
|
+
end
|
|
157
151
|
start_col = compute_start_col(ancestor_node, node)
|
|
158
152
|
loc_end = node.loc.end
|
|
159
153
|
delta = start_col - loc_end.column
|
|
@@ -175,6 +169,30 @@ module RuboCop
|
|
|
175
169
|
)
|
|
176
170
|
end
|
|
177
171
|
|
|
172
|
+
def start_for_block_node(block_node)
|
|
173
|
+
# Which node should we align the 'end' with?
|
|
174
|
+
start_node = block_end_align_target(block_node)
|
|
175
|
+
|
|
176
|
+
find_lhs_node(start_node)
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
def start_for_line_node(block_node)
|
|
180
|
+
start_node = start_for_block_node(block_node)
|
|
181
|
+
|
|
182
|
+
start_node = start_node.each_ancestor.to_a.reverse.find do |node|
|
|
183
|
+
same_line?(start_node, node)
|
|
184
|
+
end || start_node
|
|
185
|
+
|
|
186
|
+
find_lhs_node(start_node)
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
# In offense message, we want to show the assignment LHS rather than
|
|
190
|
+
# the entire assignment.
|
|
191
|
+
def find_lhs_node(node)
|
|
192
|
+
node, = *node while node.op_asgn_type? || node.masgn_type?
|
|
193
|
+
node
|
|
194
|
+
end
|
|
195
|
+
|
|
178
196
|
def compute_do_source_line_column(node, end_loc)
|
|
179
197
|
do_loc = node.loc.begin # Actually it's either do or {.
|
|
180
198
|
|
|
@@ -121,7 +121,7 @@ module RuboCop
|
|
|
121
121
|
return if case_node.single_line?
|
|
122
122
|
return if enforced_style_end? && end_and_last_conditional_same_line?(case_node)
|
|
123
123
|
|
|
124
|
-
case_node.
|
|
124
|
+
case_node.when_branches.each { |when_node| check_when(when_node, 'when') }
|
|
125
125
|
end
|
|
126
126
|
|
|
127
127
|
def on_case_match(case_match_node)
|
|
@@ -61,7 +61,7 @@ module RuboCop
|
|
|
61
61
|
private
|
|
62
62
|
|
|
63
63
|
def autocorrect(corrector, node)
|
|
64
|
-
if style == :start_of_line && node.parent
|
|
64
|
+
if style == :start_of_line && node.parent&.send_type?
|
|
65
65
|
AlignmentCorrector.align_end(corrector, processed_source, node, node.parent)
|
|
66
66
|
else
|
|
67
67
|
AlignmentCorrector.align_end(corrector, processed_source, node, node)
|
|
@@ -106,7 +106,9 @@ module RuboCop
|
|
|
106
106
|
end
|
|
107
107
|
|
|
108
108
|
def concat_consecutive_comments(comments)
|
|
109
|
-
consecutive_comments = comments.chunk_while
|
|
109
|
+
consecutive_comments = comments.chunk_while do |i, j|
|
|
110
|
+
i.loc.line.succ == j.loc.line && i.loc.column == j.loc.column
|
|
111
|
+
end
|
|
110
112
|
|
|
111
113
|
consecutive_comments.map do |chunk|
|
|
112
114
|
joined_text = chunk.map { |c| comment_text(c) }.join
|
|
@@ -149,7 +149,8 @@ module RuboCop
|
|
|
149
149
|
newline_pos = source_buffer.source.index("\n", end_pos)
|
|
150
150
|
|
|
151
151
|
# Handle the case when multiple one-liners are on the same line.
|
|
152
|
-
|
|
152
|
+
begin_pos = node.source_range.begin_pos
|
|
153
|
+
newline_pos = begin_pos - 1 if newline_pos > begin_pos
|
|
153
154
|
|
|
154
155
|
if count > maximum_empty_lines
|
|
155
156
|
autocorrect_remove_lines(corrector, newline_pos, count)
|
|
@@ -83,7 +83,7 @@ module RuboCop
|
|
|
83
83
|
|
|
84
84
|
locations.each do |loc|
|
|
85
85
|
line = loc.line
|
|
86
|
-
next if line == line_of_def_or_kwbegin ||
|
|
86
|
+
next if line == line_of_def_or_kwbegin || last_body_and_end_on_same_line?(body)
|
|
87
87
|
|
|
88
88
|
keyword = loc.source
|
|
89
89
|
# below the keyword
|
|
@@ -93,8 +93,13 @@ module RuboCop
|
|
|
93
93
|
end
|
|
94
94
|
end
|
|
95
95
|
|
|
96
|
-
def
|
|
97
|
-
|
|
96
|
+
def last_body_and_end_on_same_line?(body)
|
|
97
|
+
end_keyword_line = body.parent.loc.end.line
|
|
98
|
+
return body.loc.last_line == end_keyword_line unless body.rescue_type?
|
|
99
|
+
|
|
100
|
+
last_body_line = body.else? ? body.loc.else.line : body.resbody_branches.last.loc.line
|
|
101
|
+
|
|
102
|
+
last_body_line == end_keyword_line
|
|
98
103
|
end
|
|
99
104
|
|
|
100
105
|
def message(location, keyword)
|
|
@@ -118,8 +118,8 @@ module RuboCop
|
|
|
118
118
|
#
|
|
119
119
|
# @example EnforcedStyle: special_for_inner_method_call
|
|
120
120
|
# # The first argument should normally be indented one step more than
|
|
121
|
-
# # the preceding line, but if it's
|
|
122
|
-
# # is itself
|
|
121
|
+
# # the preceding line, but if it's an argument for a method call that
|
|
122
|
+
# # is itself an argument in a method call, then the inner argument
|
|
123
123
|
# # should be indented relative to the inner method.
|
|
124
124
|
#
|
|
125
125
|
# # good
|
|
@@ -51,7 +51,6 @@ module RuboCop
|
|
|
51
51
|
# # defined inside a method call.
|
|
52
52
|
#
|
|
53
53
|
# # bad
|
|
54
|
-
# # consistent
|
|
55
54
|
# array = [
|
|
56
55
|
# :value
|
|
57
56
|
# ]
|
|
@@ -72,13 +71,11 @@ module RuboCop
|
|
|
72
71
|
# # brackets are indented to the same position.
|
|
73
72
|
#
|
|
74
73
|
# # bad
|
|
75
|
-
# # align_brackets
|
|
76
74
|
# and_now_for_something = [
|
|
77
75
|
# :completely_different
|
|
78
76
|
# ]
|
|
79
77
|
#
|
|
80
78
|
# # good
|
|
81
|
-
# # align_brackets
|
|
82
79
|
# and_now_for_something = [
|
|
83
80
|
# :completely_different
|
|
84
81
|
# ]
|
|
@@ -92,6 +89,8 @@ module RuboCop
|
|
|
92
89
|
'in an array, relative to %<base_description>s.'
|
|
93
90
|
|
|
94
91
|
def on_array(node)
|
|
92
|
+
return if style != :consistent && enforce_first_argument_with_fixed_indentation?
|
|
93
|
+
|
|
95
94
|
check(node, nil) if node.loc.begin
|
|
96
95
|
end
|
|
97
96
|
|
|
@@ -63,13 +63,21 @@ module RuboCop
|
|
|
63
63
|
# }
|
|
64
64
|
# )
|
|
65
65
|
#
|
|
66
|
+
# @example AllowedMethods: ['some_method']
|
|
67
|
+
#
|
|
68
|
+
# # good
|
|
69
|
+
# some_method(foo, bar,
|
|
70
|
+
# baz)
|
|
66
71
|
class FirstMethodArgumentLineBreak < Base
|
|
67
72
|
include FirstElementLineBreak
|
|
73
|
+
include AllowedMethods
|
|
68
74
|
extend AutoCorrector
|
|
69
75
|
|
|
70
76
|
MSG = 'Add a line break before the first argument of a multi-line method argument list.'
|
|
71
77
|
|
|
72
78
|
def on_send(node)
|
|
79
|
+
return if allowed_method?(node.method_name)
|
|
80
|
+
|
|
73
81
|
args = node.arguments.dup
|
|
74
82
|
|
|
75
83
|
# If there is a trailing hash arg without explicit braces, like this:
|
|
@@ -6,7 +6,7 @@ module RuboCop
|
|
|
6
6
|
# Checks the indentation of the here document bodies. The bodies
|
|
7
7
|
# are indented one step.
|
|
8
8
|
#
|
|
9
|
-
#
|
|
9
|
+
# NOTE: When ``Layout/LineLength``'s `AllowHeredoc` is false (not default),
|
|
10
10
|
# this cop does not add any offenses for long here documents to
|
|
11
11
|
# avoid ``Layout/LineLength``'s offenses.
|
|
12
12
|
#
|
|
@@ -3,13 +3,12 @@
|
|
|
3
3
|
module RuboCop
|
|
4
4
|
module Cop
|
|
5
5
|
module Layout
|
|
6
|
-
# Checks for indentation that doesn't use the specified number
|
|
7
|
-
#
|
|
6
|
+
# Checks for indentation that doesn't use the specified number of spaces.
|
|
7
|
+
# The indentation width can be configured using the `Width` setting. The default width is 2.
|
|
8
8
|
#
|
|
9
|
-
# See also the IndentationConsistency cop which is the companion to this
|
|
10
|
-
# one.
|
|
9
|
+
# See also the `Layout/IndentationConsistency` cop which is the companion to this one.
|
|
11
10
|
#
|
|
12
|
-
# @example
|
|
11
|
+
# @example Width: 2 (default)
|
|
13
12
|
# # bad
|
|
14
13
|
# class A
|
|
15
14
|
# def test
|
|
@@ -136,7 +135,7 @@ module RuboCop
|
|
|
136
135
|
alias on_until on_while
|
|
137
136
|
|
|
138
137
|
def on_case(case_node)
|
|
139
|
-
case_node.
|
|
138
|
+
case_node.when_branches.each do |when_node|
|
|
140
139
|
check_indentation(when_node.loc.keyword, when_node.body)
|
|
141
140
|
end
|
|
142
141
|
|
|
@@ -49,18 +49,37 @@ module RuboCop
|
|
|
49
49
|
# #ruby=2.7.0
|
|
50
50
|
# #ruby-gemset=myproject
|
|
51
51
|
#
|
|
52
|
+
# @example AllowRBSInlineAnnotation: false (default)
|
|
53
|
+
#
|
|
54
|
+
# # bad
|
|
55
|
+
#
|
|
56
|
+
# include Enumerable #[Integer]
|
|
57
|
+
#
|
|
58
|
+
# attr_reader :name #: String
|
|
59
|
+
# attr_reader :age #: Integer?
|
|
60
|
+
#
|
|
61
|
+
# @example AllowRBSInlineAnnotation: true
|
|
62
|
+
#
|
|
63
|
+
# # good
|
|
64
|
+
#
|
|
65
|
+
# include Enumerable #[Integer]
|
|
66
|
+
#
|
|
67
|
+
# attr_reader :name #: String
|
|
68
|
+
# attr_reader :age #: Integer?
|
|
69
|
+
#
|
|
52
70
|
class LeadingCommentSpace < Base
|
|
53
71
|
include RangeHelp
|
|
54
72
|
extend AutoCorrector
|
|
55
73
|
|
|
56
74
|
MSG = 'Missing space after `#`.'
|
|
57
75
|
|
|
58
|
-
def on_new_investigation
|
|
76
|
+
def on_new_investigation # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
|
|
59
77
|
processed_source.comments.each do |comment|
|
|
60
78
|
next unless /\A(?!#\+\+|#--)(#+[^#\s=])/.match?(comment.text)
|
|
61
79
|
next if comment.loc.line == 1 && allowed_on_first_line?(comment)
|
|
62
80
|
next if doxygen_comment_style?(comment)
|
|
63
81
|
next if gemfile_ruby_comment?(comment)
|
|
82
|
+
next if rbs_inline_annotation?(comment)
|
|
64
83
|
|
|
65
84
|
add_offense(comment) do |corrector|
|
|
66
85
|
expr = comment.source_range
|
|
@@ -115,6 +134,14 @@ module RuboCop
|
|
|
115
134
|
def gemfile_ruby_comment?(comment)
|
|
116
135
|
allow_gemfile_ruby_comment? && ruby_comment_in_gemfile?(comment)
|
|
117
136
|
end
|
|
137
|
+
|
|
138
|
+
def allow_rbs_inline_annotation?
|
|
139
|
+
cop_config['AllowRBSInlineAnnotation']
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def rbs_inline_annotation?(comment)
|
|
143
|
+
allow_rbs_inline_annotation? && comment.text.start_with?(/#:|#\[.+\]/)
|
|
144
|
+
end
|
|
118
145
|
end
|
|
119
146
|
end
|
|
120
147
|
end
|
|
@@ -17,29 +17,29 @@ module RuboCop
|
|
|
17
17
|
# split across lines. These include arrays, hashes, and
|
|
18
18
|
# method calls with argument lists.
|
|
19
19
|
#
|
|
20
|
-
# If autocorrection is enabled, the following
|
|
20
|
+
# If autocorrection is enabled, the following cops
|
|
21
21
|
# are recommended to further format the broken lines.
|
|
22
22
|
# (Many of these are enabled by default.)
|
|
23
23
|
#
|
|
24
|
-
# * ArgumentAlignment
|
|
25
|
-
# * ArrayAlignment
|
|
26
|
-
# * BlockAlignment
|
|
27
|
-
# *
|
|
28
|
-
# *
|
|
29
|
-
# *
|
|
30
|
-
# *
|
|
31
|
-
# *
|
|
32
|
-
# *
|
|
33
|
-
# *
|
|
34
|
-
# *
|
|
35
|
-
# *
|
|
36
|
-
# *
|
|
37
|
-
# *
|
|
38
|
-
# *
|
|
39
|
-
# *
|
|
40
|
-
# *
|
|
41
|
-
# *
|
|
42
|
-
# *
|
|
24
|
+
# * `Layout/ArgumentAlignment`
|
|
25
|
+
# * `Layout/ArrayAlignment`
|
|
26
|
+
# * `Layout/BlockAlignment`
|
|
27
|
+
# * `Layout/BlockEndNewline`
|
|
28
|
+
# * `Layout/ClosingParenthesisIndentation`
|
|
29
|
+
# * `Layout/FirstArgumentIndentation`
|
|
30
|
+
# * `Layout/FirstArrayElementIndentation`
|
|
31
|
+
# * `Layout/FirstHashElementIndentation`
|
|
32
|
+
# * `Layout/FirstParameterIndentation`
|
|
33
|
+
# * `Layout/HashAlignment`
|
|
34
|
+
# * `Layout/IndentationWidth`
|
|
35
|
+
# * `Layout/MultilineArrayLineBreaks`
|
|
36
|
+
# * `Layout/MultilineBlockLayout`
|
|
37
|
+
# * `Layout/MultilineHashBraceLayout`
|
|
38
|
+
# * `Layout/MultilineHashKeyLineBreaks`
|
|
39
|
+
# * `Layout/MultilineMethodArgumentLineBreaks`
|
|
40
|
+
# * `Layout/MultilineMethodParameterLineBreaks`
|
|
41
|
+
# * `Layout//ParameterAlignment`
|
|
42
|
+
# * `Style/BlockDelimiters`
|
|
43
43
|
#
|
|
44
44
|
# Together, these cops will pretty print hashes, arrays,
|
|
45
45
|
# method calls, etc. For example, let's say the max columns
|
|
@@ -180,6 +180,9 @@ module RuboCop
|
|
|
180
180
|
with_space = range_with_surrounding_space(operator)
|
|
181
181
|
return if with_space.source.start_with?("\n")
|
|
182
182
|
|
|
183
|
+
comment = processed_source.comment_at_line(operator.line)
|
|
184
|
+
return if comment && with_space.last_column == comment.loc.column
|
|
185
|
+
|
|
183
186
|
offense(type, operator, with_space, right_operand) do |msg|
|
|
184
187
|
add_offense(operator, message: msg) do |corrector|
|
|
185
188
|
autocorrect(corrector, with_space, right_operand)
|
|
@@ -25,8 +25,7 @@ module RuboCop
|
|
|
25
25
|
include RangeHelp
|
|
26
26
|
extend AutoCorrector
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
SPACE_MSG = 'Missing space inside string interpolation detected.'
|
|
28
|
+
MSG = '%<command>s space inside string interpolation.'
|
|
30
29
|
|
|
31
30
|
def on_interpolation(begin_node)
|
|
32
31
|
return if begin_node.multiline?
|
|
@@ -36,9 +35,9 @@ module RuboCop
|
|
|
36
35
|
return if empty_brackets?(left, right, tokens: tokens)
|
|
37
36
|
|
|
38
37
|
if style == :no_space
|
|
39
|
-
no_space_offenses(begin_node, left, right,
|
|
38
|
+
no_space_offenses(begin_node, left, right, MSG)
|
|
40
39
|
else
|
|
41
|
-
space_offenses(begin_node, left, right,
|
|
40
|
+
space_offenses(begin_node, left, right, MSG)
|
|
42
41
|
end
|
|
43
42
|
end
|
|
44
43
|
|