rubocop 0.78.0 → 0.82.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (209) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/README.md +4 -4
  4. data/config/default.yml +158 -48
  5. data/lib/rubocop.rb +19 -4
  6. data/lib/rubocop/ast/builder.rb +45 -42
  7. data/lib/rubocop/ast/node.rb +12 -19
  8. data/lib/rubocop/ast/node/array_node.rb +13 -0
  9. data/lib/rubocop/ast/node/block_node.rb +5 -1
  10. data/lib/rubocop/ast/node/case_match_node.rb +56 -0
  11. data/lib/rubocop/ast/node/def_node.rb +11 -0
  12. data/lib/rubocop/ast/node/forward_args_node.rb +18 -0
  13. data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +8 -0
  14. data/lib/rubocop/ast/node/regexp_node.rb +2 -4
  15. data/lib/rubocop/ast/traversal.rb +29 -10
  16. data/lib/rubocop/cli.rb +10 -4
  17. data/lib/rubocop/cli/command/show_cops.rb +11 -4
  18. data/lib/rubocop/comment_config.rb +6 -1
  19. data/lib/rubocop/config.rb +36 -10
  20. data/lib/rubocop/config_loader.rb +42 -33
  21. data/lib/rubocop/config_loader_resolver.rb +1 -1
  22. data/lib/rubocop/config_obsoletion.rb +4 -1
  23. data/lib/rubocop/config_validator.rb +66 -92
  24. data/lib/rubocop/cop/autocorrect_logic.rb +6 -3
  25. data/lib/rubocop/cop/badge.rb +5 -5
  26. data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +1 -1
  27. data/lib/rubocop/cop/corrector.rb +48 -24
  28. data/lib/rubocop/cop/correctors/alignment_corrector.rb +2 -2
  29. data/lib/rubocop/cop/correctors/condition_corrector.rb +1 -2
  30. data/lib/rubocop/cop/correctors/empty_line_corrector.rb +1 -1
  31. data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +3 -3
  32. data/lib/rubocop/cop/correctors/line_break_corrector.rb +2 -2
  33. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +1 -1
  34. data/lib/rubocop/cop/correctors/string_literal_corrector.rb +2 -2
  35. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -1
  36. data/lib/rubocop/cop/generator.rb +3 -4
  37. data/lib/rubocop/cop/generator/configuration_injector.rb +1 -1
  38. data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +1 -1
  39. data/lib/rubocop/cop/layout/array_alignment.rb +53 -10
  40. data/lib/rubocop/cop/layout/block_end_newline.rb +5 -3
  41. data/lib/rubocop/cop/layout/dot_position.rb +1 -1
  42. data/lib/rubocop/cop/layout/else_alignment.rb +8 -0
  43. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +2 -1
  44. data/lib/rubocop/cop/layout/end_of_line.rb +2 -2
  45. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +16 -10
  46. data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +1 -1
  47. data/lib/rubocop/cop/layout/hash_alignment.rb +8 -4
  48. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +2 -2
  49. data/lib/rubocop/cop/layout/heredoc_indentation.rb +2 -2
  50. data/lib/rubocop/cop/layout/{tab.rb → indentation_style.rb} +48 -6
  51. data/lib/rubocop/cop/layout/leading_comment_space.rb +34 -3
  52. data/lib/rubocop/cop/layout/line_length.rb +32 -3
  53. data/lib/rubocop/cop/layout/multiline_block_layout.rb +15 -6
  54. data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +0 -4
  55. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +1 -1
  56. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +3 -3
  57. data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +133 -0
  58. data/lib/rubocop/cop/layout/space_around_operators.rb +19 -1
  59. data/lib/rubocop/cop/layout/space_before_block_braces.rb +2 -2
  60. data/lib/rubocop/cop/layout/space_before_first_arg.rb +8 -0
  61. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +1 -1
  62. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +2 -2
  63. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +2 -9
  64. data/lib/rubocop/cop/layout/space_inside_range_literal.rb +2 -2
  65. data/lib/rubocop/cop/lint/boolean_symbol.rb +12 -0
  66. data/lib/rubocop/cop/lint/debugger.rb +2 -2
  67. data/lib/rubocop/cop/lint/erb_new_arguments.rb +1 -1
  68. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -1
  69. data/lib/rubocop/cop/lint/inherit_exception.rb +1 -1
  70. data/lib/rubocop/cop/lint/interpolation_check.rb +1 -1
  71. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +1 -1
  72. data/lib/rubocop/cop/lint/loop.rb +6 -4
  73. data/lib/rubocop/cop/lint/multiple_comparison.rb +1 -1
  74. data/lib/rubocop/cop/lint/nested_method_definition.rb +2 -2
  75. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +2 -2
  76. data/lib/rubocop/cop/lint/number_conversion.rb +1 -1
  77. data/lib/rubocop/cop/lint/percent_string_array.rb +2 -2
  78. data/lib/rubocop/cop/lint/raise_exception.rb +75 -0
  79. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +1 -1
  80. data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +12 -7
  81. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +1 -1
  82. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +1 -1
  83. data/lib/rubocop/cop/lint/struct_new_override.rb +58 -0
  84. data/lib/rubocop/cop/lint/suppressed_exception.rb +12 -22
  85. data/lib/rubocop/cop/lint/unified_integer.rb +0 -2
  86. data/lib/rubocop/cop/lint/unused_method_argument.rb +32 -6
  87. data/lib/rubocop/cop/lint/uri_regexp.rb +4 -4
  88. data/lib/rubocop/cop/lint/useless_setter_call.rb +4 -0
  89. data/lib/rubocop/cop/migration/department_name.rb +47 -6
  90. data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +4 -0
  91. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +6 -1
  92. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +7 -7
  93. data/lib/rubocop/cop/mixin/hash_transform_method.rb +171 -0
  94. data/lib/rubocop/cop/mixin/line_length_help.rb +1 -1
  95. data/lib/rubocop/cop/mixin/method_complexity.rb +5 -0
  96. data/lib/rubocop/cop/mixin/statement_modifier.rb +4 -3
  97. data/lib/rubocop/cop/mixin/trailing_comma.rb +3 -10
  98. data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +1 -1
  99. data/lib/rubocop/cop/naming/constant_name.rb +2 -1
  100. data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +1 -1
  101. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +1 -1
  102. data/lib/rubocop/cop/naming/method_name.rb +30 -0
  103. data/lib/rubocop/cop/naming/method_parameter_name.rb +1 -1
  104. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +1 -1
  105. data/lib/rubocop/cop/registry.rb +15 -3
  106. data/lib/rubocop/cop/style/access_modifier_declarations.rb +26 -6
  107. data/lib/rubocop/cop/style/alias.rb +4 -4
  108. data/lib/rubocop/cop/style/and_or.rb +5 -6
  109. data/lib/rubocop/cop/style/array_join.rb +1 -1
  110. data/lib/rubocop/cop/style/block_delimiters.rb +60 -1
  111. data/lib/rubocop/cop/style/case_equality.rb +24 -1
  112. data/lib/rubocop/cop/style/character_literal.rb +2 -2
  113. data/lib/rubocop/cop/style/collection_methods.rb +2 -0
  114. data/lib/rubocop/cop/style/conditional_assignment.rb +8 -8
  115. data/lib/rubocop/cop/style/copyright.rb +1 -1
  116. data/lib/rubocop/cop/style/dir.rb +1 -1
  117. data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +49 -0
  118. data/lib/rubocop/cop/style/documentation.rb +43 -5
  119. data/lib/rubocop/cop/style/double_cop_disable_directive.rb +1 -1
  120. data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -1
  121. data/lib/rubocop/cop/style/each_with_object.rb +3 -3
  122. data/lib/rubocop/cop/style/empty_method.rb +1 -1
  123. data/lib/rubocop/cop/style/end_block.rb +6 -0
  124. data/lib/rubocop/cop/style/even_odd.rb +1 -1
  125. data/lib/rubocop/cop/style/expand_path_arguments.rb +3 -3
  126. data/lib/rubocop/cop/style/exponential_notation.rb +119 -0
  127. data/lib/rubocop/cop/style/format_string.rb +2 -2
  128. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +89 -11
  129. data/lib/rubocop/cop/style/hash_each_methods.rb +89 -0
  130. data/lib/rubocop/cop/style/hash_syntax.rb +3 -5
  131. data/lib/rubocop/cop/style/hash_transform_keys.rb +83 -0
  132. data/lib/rubocop/cop/style/hash_transform_values.rb +80 -0
  133. data/lib/rubocop/cop/style/if_unless_modifier.rb +23 -3
  134. data/lib/rubocop/cop/style/inverse_methods.rb +9 -5
  135. data/lib/rubocop/cop/style/lambda.rb +3 -2
  136. data/lib/rubocop/cop/style/lambda_call.rb +2 -2
  137. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +7 -205
  138. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +169 -0
  139. data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +54 -0
  140. data/lib/rubocop/cop/style/mixin_grouping.rb +1 -1
  141. data/lib/rubocop/cop/style/module_function.rb +58 -12
  142. data/lib/rubocop/cop/style/multiline_if_modifier.rb +1 -1
  143. data/lib/rubocop/cop/style/multiline_memoization.rb +1 -1
  144. data/lib/rubocop/cop/style/multiline_when_then.rb +5 -1
  145. data/lib/rubocop/cop/style/mutable_constant.rb +2 -4
  146. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +4 -4
  147. data/lib/rubocop/cop/style/next.rb +2 -2
  148. data/lib/rubocop/cop/style/nil_comparison.rb +1 -1
  149. data/lib/rubocop/cop/style/non_nil_check.rb +4 -4
  150. data/lib/rubocop/cop/style/not.rb +1 -1
  151. data/lib/rubocop/cop/style/numeric_literal_prefix.rb +1 -1
  152. data/lib/rubocop/cop/style/numeric_literals.rb +1 -1
  153. data/lib/rubocop/cop/style/numeric_predicate.rb +5 -4
  154. data/lib/rubocop/cop/style/one_line_conditional.rb +4 -3
  155. data/lib/rubocop/cop/style/or_assignment.rb +4 -3
  156. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +7 -7
  157. data/lib/rubocop/cop/style/percent_q_literals.rb +1 -1
  158. data/lib/rubocop/cop/style/perl_backrefs.rb +2 -2
  159. data/lib/rubocop/cop/style/proc.rb +1 -1
  160. data/lib/rubocop/cop/style/raise_args.rb +1 -1
  161. data/lib/rubocop/cop/style/random_with_offset.rb +3 -3
  162. data/lib/rubocop/cop/style/redundant_condition.rb +18 -6
  163. data/lib/rubocop/cop/style/redundant_conditional.rb +1 -1
  164. data/lib/rubocop/cop/style/redundant_exception.rb +3 -3
  165. data/lib/rubocop/cop/style/redundant_interpolation.rb +2 -2
  166. data/lib/rubocop/cop/style/redundant_percent_q.rb +2 -2
  167. data/lib/rubocop/cop/style/redundant_return.rb +5 -7
  168. data/lib/rubocop/cop/style/redundant_self.rb +1 -1
  169. data/lib/rubocop/cop/style/redundant_sort.rb +2 -2
  170. data/lib/rubocop/cop/style/rescue_modifier.rb +1 -1
  171. data/lib/rubocop/cop/style/return_nil.rb +1 -1
  172. data/lib/rubocop/cop/style/safe_navigation.rb +1 -1
  173. data/lib/rubocop/cop/style/self_assignment.rb +1 -1
  174. data/lib/rubocop/cop/style/special_global_vars.rb +1 -1
  175. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -4
  176. data/lib/rubocop/cop/style/string_hash_keys.rb +1 -1
  177. data/lib/rubocop/cop/style/symbol_array.rb +3 -3
  178. data/lib/rubocop/cop/style/symbol_literal.rb +2 -2
  179. data/lib/rubocop/cop/style/ternary_parentheses.rb +2 -3
  180. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +35 -22
  181. data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +41 -0
  182. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +88 -0
  183. data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +44 -0
  184. data/lib/rubocop/cop/style/trivial_accessors.rb +1 -1
  185. data/lib/rubocop/cop/style/unpack_first.rb +0 -4
  186. data/lib/rubocop/cop/style/variable_interpolation.rb +1 -1
  187. data/lib/rubocop/cop/style/while_until_modifier.rb +1 -1
  188. data/lib/rubocop/cop/style/word_array.rb +1 -1
  189. data/lib/rubocop/cop/style/yoda_condition.rb +16 -1
  190. data/lib/rubocop/cop/style/zero_length_predicate.rb +1 -1
  191. data/lib/rubocop/cop/variable_force.rb +4 -1
  192. data/lib/rubocop/formatter/clang_style_formatter.rb +1 -1
  193. data/lib/rubocop/formatter/formatter_set.rb +1 -1
  194. data/lib/rubocop/formatter/junit_formatter.rb +74 -0
  195. data/lib/rubocop/formatter/pacman_formatter.rb +1 -1
  196. data/lib/rubocop/formatter/tap_formatter.rb +1 -1
  197. data/lib/rubocop/node_pattern.rb +96 -10
  198. data/lib/rubocop/options.rb +7 -1
  199. data/lib/rubocop/processed_source.rb +1 -4
  200. data/lib/rubocop/rspec/cop_helper.rb +1 -1
  201. data/lib/rubocop/rspec/expect_offense.rb +1 -1
  202. data/lib/rubocop/rspec/shared_contexts.rb +5 -4
  203. data/lib/rubocop/runner.rb +1 -1
  204. data/lib/rubocop/target_ruby.rb +151 -0
  205. data/lib/rubocop/version.rb +1 -1
  206. metadata +39 -12
  207. data/lib/rubocop/cop/lint/end_in_method.rb +0 -40
  208. data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +0 -209
  209. data/lib/rubocop/formatter/disabled_lines_formatter.rb +0 -57
@@ -0,0 +1,133 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Layout
6
+ # Checks method call operators to not have spaces around them.
7
+ #
8
+ # @example
9
+ # # bad
10
+ # foo. bar
11
+ # foo .bar
12
+ # foo . bar
13
+ # foo. bar .buzz
14
+ # foo
15
+ # . bar
16
+ # . buzz
17
+ # foo&. bar
18
+ # foo &.bar
19
+ # foo &. bar
20
+ # foo &. bar&. buzz
21
+ # RuboCop:: Cop
22
+ # RuboCop:: Cop:: Cop
23
+ # :: RuboCop::Cop
24
+ #
25
+ # # good
26
+ # foo.bar
27
+ # foo.bar.buzz
28
+ # foo
29
+ # .bar
30
+ # .buzz
31
+ # foo&.bar
32
+ # foo&.bar&.buzz
33
+ # RuboCop::Cop
34
+ # RuboCop::Cop::Cop
35
+ # ::RuboCop::Cop
36
+ #
37
+ class SpaceAroundMethodCallOperator < Cop
38
+ include SurroundingSpace
39
+
40
+ MSG = 'Avoid using spaces around a method call operator.'
41
+
42
+ def on_send(node)
43
+ return unless dot_or_safe_navigation_operator?(node)
44
+
45
+ check_and_add_offense(node)
46
+ end
47
+
48
+ def on_const(node)
49
+ return unless node.loc.double_colon
50
+
51
+ check_and_add_offense(node, false)
52
+ end
53
+
54
+ def autocorrect(node)
55
+ operator = operator_token(node)
56
+ left = left_token_for_auto_correction(node, operator)
57
+ right = right_token_for_auto_correction(operator)
58
+
59
+ lambda do |corrector|
60
+ SpaceCorrector.remove_space(
61
+ processed_source, corrector, left, right
62
+ )
63
+ end
64
+ end
65
+
66
+ alias on_csend on_send
67
+
68
+ private
69
+
70
+ def check_and_add_offense(node, add_left_offense = true)
71
+ operator = operator_token(node)
72
+ left = previous_token(operator)
73
+ right = next_token(operator)
74
+
75
+ if !right.comment? && valid_right_token?(right, operator)
76
+ no_space_offenses(node, operator, right, MSG)
77
+ end
78
+ return unless valid_left_token?(left, operator)
79
+
80
+ no_space_offenses(node, left, operator, MSG) if add_left_offense
81
+ end
82
+
83
+ def operator_token(node)
84
+ operator_location =
85
+ node.const_type? ? node.loc.double_colon : node.loc.dot
86
+
87
+ processed_source.find_token do |token|
88
+ token.pos == operator_location
89
+ end
90
+ end
91
+
92
+ def previous_token(current_token)
93
+ index = processed_source.tokens.index(current_token)
94
+ index.zero? ? nil : processed_source.tokens[index - 1]
95
+ end
96
+
97
+ def next_token(current_token)
98
+ index = processed_source.tokens.index(current_token)
99
+ processed_source.tokens[index + 1]
100
+ end
101
+
102
+ def dot_or_safe_navigation_operator?(node)
103
+ node.dot? || node.safe_navigation?
104
+ end
105
+
106
+ def valid_left_token?(left, operator)
107
+ left && left.line == operator.line
108
+ end
109
+
110
+ def valid_right_token?(right, operator)
111
+ right && right.line == operator.line
112
+ end
113
+
114
+ def left_token_for_auto_correction(node, operator)
115
+ left_token = previous_token(operator)
116
+ return operator if node.const_type?
117
+ return left_token if valid_left_token?(left_token, operator)
118
+
119
+ operator
120
+ end
121
+
122
+ def right_token_for_auto_correction(operator)
123
+ right_token = next_token(operator)
124
+ if !right_token.comment? && valid_right_token?(right_token, operator)
125
+ return right_token
126
+ end
127
+
128
+ operator
129
+ end
130
+ end
131
+ end
132
+ end
133
+ end
@@ -6,6 +6,10 @@ module RuboCop
6
6
  # Checks that operators have space around them, except for ** which
7
7
  # should or shouldn't have surrounding space depending on configuration.
8
8
  #
9
+ # This cop has `AllowForAlignment` option. When `true`, allows most
10
+ # uses of extra spacing if the intent is to align with an operator on
11
+ # the previous or next line, not counting empty lines or comment lines.
12
+ #
9
13
  # @example
10
14
  # # bad
11
15
  # total = 3*4
@@ -17,6 +21,20 @@ module RuboCop
17
21
  # "apple" + "juice"
18
22
  # my_number = 38 / 4
19
23
  #
24
+ # @example AllowForAlignment: true (default)
25
+ # # good
26
+ # {
27
+ # 1 => 2,
28
+ # 11 => 3
29
+ # }
30
+ #
31
+ # @example AllowForAlignment: false
32
+ # # bad
33
+ # {
34
+ # 1 => 2,
35
+ # 11 => 3
36
+ # }
37
+ #
20
38
  # @example EnforcedStyleForExponentOperator: no_space (default)
21
39
  # # bad
22
40
  # a ** b
@@ -157,7 +175,7 @@ module RuboCop
157
175
  return if with_space.is?(operator.source)
158
176
 
159
177
  "Space around operator `#{operator.source}` detected."
160
- elsif with_space.source !~ /^\s.*\s$/
178
+ elsif !/^\s.*\s$/.match?(with_space.source)
161
179
  "Surrounding space missing for operator `#{operator.source}`."
162
180
  elsif excess_leading_space?(type, operator, with_space) ||
163
181
  excess_trailing_space?(right_operand, with_space)
@@ -47,7 +47,7 @@ module RuboCop
47
47
  # That means preventing auto-correction to incorrect auto-corrected
48
48
  # code.
49
49
  # See: https://github.com/rubocop-hq/rubocop/issues/7534
50
- return if conflict_with_block_delimiters?
50
+ return if conflict_with_block_delimiters?(node)
51
51
 
52
52
  left_brace = node.loc.begin
53
53
  space_plus_brace = range_with_surrounding_space(range: left_brace)
@@ -118,7 +118,7 @@ module RuboCop
118
118
  end
119
119
  end
120
120
 
121
- def conflict_with_block_delimiters?
121
+ def conflict_with_block_delimiters?(node)
122
122
  block_delimiters_style == 'line_count_based' &&
123
123
  style == :no_space && node.multiline?
124
124
  end
@@ -54,6 +54,7 @@ module RuboCop
54
54
 
55
55
  def expect_params_after_method_name?(node)
56
56
  return false if node.parenthesized?
57
+ return true if no_space_between_method_name_and_first_argument?(node)
57
58
 
58
59
  first_arg = node.first_argument
59
60
 
@@ -61,6 +62,13 @@ module RuboCop
61
62
  !(allow_for_alignment? &&
62
63
  aligned_with_something?(first_arg.source_range))
63
64
  end
65
+
66
+ def no_space_between_method_name_and_first_argument?(node)
67
+ end_pos_of_method_name = node.loc.selector.end_pos
68
+ begin_pos_of_argument = node.first_argument.source_range.begin_pos
69
+
70
+ end_pos_of_method_name == begin_pos_of_argument
71
+ end
64
72
  end
65
73
  end
66
74
  end
@@ -46,7 +46,7 @@ module RuboCop
46
46
  children = lambda_node.parent.children
47
47
  lambda do |corrector|
48
48
  if style == :require_space
49
- corrector.insert_before(children[1].source_range, ' ')
49
+ corrector.insert_before(children[1], ' ')
50
50
  else
51
51
  corrector.remove(space_after_arrow(lambda_node))
52
52
  end
@@ -117,7 +117,7 @@ module RuboCop
117
117
  range = range_between(left_brace.end_pos, right_brace.begin_pos)
118
118
  inner = range.source
119
119
 
120
- if inner =~ /\S/
120
+ if /\S/.match?(inner)
121
121
  braces_with_contents_inside(node, inner)
122
122
  elsif style_for_empty_braces == :no_space
123
123
  offense(range.begin_pos, range.end_pos,
@@ -142,7 +142,7 @@ module RuboCop
142
142
  end
143
143
 
144
144
  def check_left_brace(inner, left_brace, args_delimiter)
145
- if inner =~ /\A\S/
145
+ if /\A\S/.match?(inner)
146
146
  no_space_inside_left_brace(left_brace, args_delimiter)
147
147
  else
148
148
  space_inside_left_brace(left_brace, args_delimiter)
@@ -83,17 +83,10 @@ module RuboCop
83
83
 
84
84
  def autocorrect(range)
85
85
  lambda do |corrector|
86
- # It is possible that BracesAroundHashParameters will remove the
87
- # braces while this cop inserts spaces. This can lead to unwanted
88
- # changes to the inspected code. If we replace the brace with a
89
- # brace plus space (rather than just inserting a space), then any
90
- # removal of the same brace will give us a clobbering error. This
91
- # in turn will make RuboCop fall back on cop-by-cop
92
- # auto-correction. Problem solved.
93
86
  case range.source
94
87
  when /\s/ then corrector.remove(range)
95
- when '{' then corrector.replace(range, '{ ')
96
- else corrector.replace(range, ' }')
88
+ when '{' then corrector.insert_after(range, ' ')
89
+ else corrector.insert_before(range, ' ')
97
90
  end
98
91
  end
99
92
  end
@@ -35,7 +35,7 @@ module RuboCop
35
35
 
36
36
  lambda do |corrector|
37
37
  corrector.replace(
38
- node.source_range,
38
+ node,
39
39
  expression
40
40
  .sub(/\s+#{operator_escaped}/, operator)
41
41
  .sub(/#{operator_escaped}\s+/, operator)
@@ -53,7 +53,7 @@ module RuboCop
53
53
  # account for multiline range literals
54
54
  expression.sub!(/#{escaped_op}\n\s*/, op)
55
55
 
56
- return unless expression =~ /(\s#{escaped_op})|(#{escaped_op}\s)/
56
+ return unless /(\s#{escaped_op})|(#{escaped_op}\s)/.match?(expression)
57
57
 
58
58
  add_offense(node)
59
59
  end
@@ -32,6 +32,18 @@ module RuboCop
32
32
 
33
33
  add_offense(node, message: format(MSG, boolean: node.value))
34
34
  end
35
+
36
+ def autocorrect(node)
37
+ lambda do |corrector|
38
+ boolean_literal = node.source.delete(':')
39
+ parent = node.parent
40
+ if parent&.pair_type? && node.equal?(parent.children[0])
41
+ corrector.remove(parent.loc.operator)
42
+ boolean_literal = "#{node.source} =>"
43
+ end
44
+ corrector.replace(node, boolean_literal)
45
+ end
46
+ end
35
47
  end
36
48
  end
37
49
  end
@@ -45,7 +45,7 @@ module RuboCop
45
45
  def_node_matcher :debugger_call?, <<~PATTERN
46
46
  {(send {nil? #kernel?} {:debugger :byebug :remote_byebug} ...)
47
47
  (send (send {#kernel? nil?} :binding)
48
- {:pry :remote_pry :pry_remote} ...)
48
+ {:pry :remote_pry :pry_remote :console} ...)
49
49
  (send (const {nil? (cbase)} :Pry) :rescue ...)
50
50
  (send nil? {:save_and_open_page
51
51
  :save_and_open_screenshot
@@ -69,7 +69,7 @@ module RuboCop
69
69
  end
70
70
 
71
71
  def binding_irb?(node)
72
- target_ruby_version >= 2.4 && binding_irb_call?(node)
72
+ binding_irb_call?(node)
73
73
  end
74
74
  end
75
75
  end
@@ -84,7 +84,7 @@ module RuboCop
84
84
 
85
85
  def on_send(node)
86
86
  erb_new_with_non_keyword_arguments(node) do |arguments|
87
- return if correct_arguments?(arguments)
87
+ return if arguments.empty? || correct_arguments?(arguments)
88
88
 
89
89
  arguments[1..3].each_with_index do |argument, i|
90
90
  next if !argument || argument.hash_type?
@@ -81,7 +81,7 @@ module RuboCop
81
81
  end
82
82
 
83
83
  def display_str(node)
84
- if node.source =~ /\n/
84
+ if /\n/.match?(node.source)
85
85
  str_content(node).inspect
86
86
  else
87
87
  node.source
@@ -77,7 +77,7 @@ module RuboCop
77
77
 
78
78
  def autocorrect(node)
79
79
  lambda do |corrector|
80
- corrector.replace(node.loc.expression, preferred_base_class)
80
+ corrector.replace(node, preferred_base_class)
81
81
  end
82
82
  end
83
83
 
@@ -25,7 +25,7 @@ module RuboCop
25
25
 
26
26
  parent = node.parent
27
27
  return if parent && (parent.dstr_type? || parent.regexp_type?)
28
- return unless node.source.scrub =~ /(?<!\\)#\{.*\}/
28
+ return unless /(?<!\\)#\{.*\}/.match?(node.source.scrub)
29
29
 
30
30
  add_offense(node)
31
31
  end
@@ -37,7 +37,7 @@ module RuboCop
37
37
  return if node.dstr_type? # nested, fixed in next iteration
38
38
 
39
39
  value = autocorrected_value(node)
40
- ->(corrector) { corrector.replace(node.parent.source_range, value) }
40
+ ->(corrector) { corrector.replace(node.parent, value) }
41
41
  end
42
42
 
43
43
  private
@@ -27,18 +27,20 @@ module RuboCop
27
27
  #
28
28
  # # good
29
29
  #
30
- # # using while
31
- # while some_condition
30
+ # # while replacement
31
+ # loop do
32
32
  # do_something
33
+ # break unless some_condition
33
34
  # end
34
35
  #
35
36
  # @example
36
37
  #
37
38
  # # good
38
39
  #
39
- # # using until
40
- # until some_condition
40
+ # # until replacement
41
+ # loop do
41
42
  # do_something
43
+ # break if some_condition
42
44
  # end
43
45
  class Loop < Cop
44
46
  MSG = 'Use `Kernel#loop` with `break` rather than ' \
@@ -39,7 +39,7 @@ module RuboCop
39
39
  new_center = "#{center.source} && #{center.source}"
40
40
 
41
41
  lambda do |corrector|
42
- corrector.replace(center.source_range, new_center)
42
+ corrector.replace(center, new_center)
43
43
  end
44
44
  end
45
45
  end
@@ -31,14 +31,14 @@ module RuboCop
31
31
  # # good
32
32
  #
33
33
  # def foo
34
- # self.class_eval do
34
+ # self.class.class_eval do
35
35
  # def bar
36
36
  # end
37
37
  # end
38
38
  # end
39
39
  #
40
40
  # def foo
41
- # self.module_exec do
41
+ # self.class.module_exec do
42
42
  # def bar
43
43
  # end
44
44
  # end
@@ -52,12 +52,12 @@ module RuboCop
52
52
  def autocorrect(node)
53
53
  if unsorted_dir_block?(node)
54
54
  lambda do |corrector|
55
- corrector.replace(node.loc.expression, "#{node.source}.sort.each")
55
+ corrector.replace(node, "#{node.source}.sort.each")
56
56
  end
57
57
  else
58
58
  lambda do |corrector|
59
59
  source = node.receiver.source
60
- corrector.replace(node.loc.expression, "#{source}.sort.each")
60
+ corrector.replace(node, "#{source}.sort.each")
61
61
  end
62
62
  end
63
63
  end
@@ -55,7 +55,7 @@ module RuboCop
55
55
 
56
56
  def autocorrect(node)
57
57
  lambda do |corrector|
58
- corrector.replace(node.loc.expression,
58
+ corrector.replace(node,
59
59
  correct_method(node, node.receiver))
60
60
  end
61
61
  end