rubocop 0.80.0 → 0.84.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.
Files changed (293) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -4
  3. data/config/default.yml +171 -34
  4. data/lib/rubocop.rb +15 -62
  5. data/lib/rubocop/ast_aliases.rb +8 -0
  6. data/lib/rubocop/cli.rb +11 -5
  7. data/lib/rubocop/cli/command/show_cops.rb +2 -6
  8. data/lib/rubocop/config.rb +41 -13
  9. data/lib/rubocop/config_loader.rb +40 -36
  10. data/lib/rubocop/config_loader_resolver.rb +27 -4
  11. data/lib/rubocop/config_obsoletion.rb +2 -0
  12. data/lib/rubocop/config_validator.rb +18 -1
  13. data/lib/rubocop/cop/autocorrect_logic.rb +1 -2
  14. data/lib/rubocop/cop/badge.rb +5 -5
  15. data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +1 -1
  16. data/lib/rubocop/cop/corrector.rb +49 -27
  17. data/lib/rubocop/cop/correctors/alignment_corrector.rb +4 -8
  18. data/lib/rubocop/cop/correctors/condition_corrector.rb +1 -2
  19. data/lib/rubocop/cop/correctors/empty_line_corrector.rb +1 -1
  20. data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +3 -3
  21. data/lib/rubocop/cop/correctors/line_break_corrector.rb +2 -2
  22. data/lib/rubocop/cop/correctors/parentheses_corrector.rb +1 -3
  23. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +1 -1
  24. data/lib/rubocop/cop/correctors/space_corrector.rb +1 -3
  25. data/lib/rubocop/cop/correctors/string_literal_corrector.rb +2 -2
  26. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -3
  27. data/lib/rubocop/cop/generator.rb +4 -3
  28. data/lib/rubocop/cop/ignored_node.rb +1 -3
  29. data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +1 -1
  30. data/lib/rubocop/cop/layout/array_alignment.rb +53 -10
  31. data/lib/rubocop/cop/layout/block_end_newline.rb +5 -3
  32. data/lib/rubocop/cop/layout/condition_position.rb +12 -2
  33. data/lib/rubocop/cop/layout/dot_position.rb +1 -1
  34. data/lib/rubocop/cop/layout/else_alignment.rb +8 -0
  35. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +2 -6
  36. data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +126 -0
  37. data/lib/rubocop/cop/layout/end_of_line.rb +2 -2
  38. data/lib/rubocop/cop/layout/first_argument_indentation.rb +0 -2
  39. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +14 -10
  40. data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +1 -1
  41. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -3
  42. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +4 -8
  43. data/lib/rubocop/cop/layout/heredoc_indentation.rb +2 -2
  44. data/lib/rubocop/cop/layout/{tab.rb → indentation_style.rb} +48 -6
  45. data/lib/rubocop/cop/layout/indentation_width.rb +1 -3
  46. data/lib/rubocop/cop/layout/leading_comment_space.rb +1 -1
  47. data/lib/rubocop/cop/layout/line_length.rb +7 -4
  48. data/lib/rubocop/cop/layout/multiline_block_layout.rb +2 -4
  49. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -3
  50. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +1 -1
  51. data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +13 -4
  52. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +3 -3
  53. data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +129 -0
  54. data/lib/rubocop/cop/layout/space_around_operators.rb +19 -2
  55. data/lib/rubocop/cop/layout/space_before_comment.rb +1 -3
  56. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +1 -1
  57. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +1 -3
  58. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +2 -2
  59. data/lib/rubocop/cop/layout/space_inside_range_literal.rb +2 -2
  60. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +2 -6
  61. data/lib/rubocop/cop/layout/trailing_whitespace.rb +2 -2
  62. data/lib/rubocop/cop/lint/ambiguous_operator.rb +40 -0
  63. data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +14 -0
  64. data/lib/rubocop/cop/lint/boolean_symbol.rb +12 -0
  65. data/lib/rubocop/cop/lint/debugger.rb +1 -1
  66. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +133 -0
  67. data/lib/rubocop/cop/lint/duplicate_methods.rb +1 -5
  68. data/lib/rubocop/cop/lint/empty_when.rb +29 -6
  69. data/lib/rubocop/cop/lint/ensure_return.rb +18 -1
  70. data/lib/rubocop/cop/lint/erb_new_arguments.rb +3 -7
  71. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -1
  72. data/lib/rubocop/cop/lint/inherit_exception.rb +1 -1
  73. data/lib/rubocop/cop/lint/interpolation_check.rb +1 -1
  74. data/lib/rubocop/cop/lint/literal_as_condition.rb +10 -13
  75. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +1 -1
  76. data/lib/rubocop/cop/lint/loop.rb +6 -4
  77. data/lib/rubocop/cop/lint/multiple_comparison.rb +1 -1
  78. data/lib/rubocop/cop/lint/nested_method_definition.rb +2 -2
  79. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +2 -2
  80. data/lib/rubocop/cop/lint/number_conversion.rb +1 -1
  81. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +31 -11
  82. data/lib/rubocop/cop/lint/percent_string_array.rb +2 -4
  83. data/lib/rubocop/cop/lint/raise_exception.rb +75 -0
  84. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +1 -6
  85. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +1 -1
  86. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +1 -1
  87. data/lib/rubocop/cop/lint/struct_new_override.rb +58 -0
  88. data/lib/rubocop/cop/lint/suppressed_exception.rb +20 -25
  89. data/lib/rubocop/cop/lint/syntax.rb +1 -3
  90. data/lib/rubocop/cop/lint/unified_integer.rb +0 -2
  91. data/lib/rubocop/cop/lint/unused_method_argument.rb +32 -6
  92. data/lib/rubocop/cop/lint/uri_regexp.rb +4 -4
  93. data/lib/rubocop/cop/lint/useless_access_modifier.rb +13 -3
  94. data/lib/rubocop/cop/lint/useless_assignment.rb +3 -2
  95. data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +5 -0
  96. data/lib/rubocop/cop/migration/department_name.rb +21 -12
  97. data/lib/rubocop/cop/mixin/alignment.rb +1 -3
  98. data/lib/rubocop/cop/mixin/array_min_size.rb +2 -6
  99. data/lib/rubocop/cop/mixin/check_line_breakable.rb +4 -12
  100. data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +1 -3
  101. data/lib/rubocop/cop/mixin/configurable_formatting.rb +1 -3
  102. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +6 -1
  103. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +10 -1
  104. data/lib/rubocop/cop/mixin/hash_transform_method.rb +9 -3
  105. data/lib/rubocop/cop/mixin/line_length_help.rb +2 -1
  106. data/lib/rubocop/cop/mixin/method_complexity.rb +5 -0
  107. data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +1 -3
  108. data/lib/rubocop/cop/mixin/parser_diagnostic.rb +1 -1
  109. data/lib/rubocop/cop/mixin/statement_modifier.rb +7 -22
  110. data/lib/rubocop/cop/mixin/surrounding_space.rb +1 -3
  111. data/lib/rubocop/cop/mixin/target_ruby_version.rb +5 -1
  112. data/lib/rubocop/cop/mixin/trailing_comma.rb +2 -4
  113. data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +1 -1
  114. data/lib/rubocop/cop/naming/constant_name.rb +2 -1
  115. data/lib/rubocop/cop/naming/file_name.rb +1 -3
  116. data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +1 -1
  117. data/lib/rubocop/cop/naming/method_name.rb +26 -0
  118. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +1 -1
  119. data/lib/rubocop/cop/registry.rb +13 -10
  120. data/lib/rubocop/cop/severity.rb +1 -3
  121. data/lib/rubocop/cop/style/access_modifier_declarations.rb +26 -6
  122. data/lib/rubocop/cop/style/alias.rb +4 -4
  123. data/lib/rubocop/cop/style/and_or.rb +7 -8
  124. data/lib/rubocop/cop/style/array_join.rb +1 -1
  125. data/lib/rubocop/cop/style/attr.rb +1 -3
  126. data/lib/rubocop/cop/style/block_delimiters.rb +2 -8
  127. data/lib/rubocop/cop/style/case_equality.rb +24 -1
  128. data/lib/rubocop/cop/style/character_literal.rb +2 -2
  129. data/lib/rubocop/cop/style/collection_methods.rb +2 -0
  130. data/lib/rubocop/cop/style/conditional_assignment.rb +9 -11
  131. data/lib/rubocop/cop/style/copyright.rb +1 -1
  132. data/lib/rubocop/cop/style/dir.rb +1 -1
  133. data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +49 -0
  134. data/lib/rubocop/cop/style/documentation.rb +43 -5
  135. data/lib/rubocop/cop/style/double_cop_disable_directive.rb +1 -1
  136. data/lib/rubocop/cop/style/double_negation.rb +41 -4
  137. data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -1
  138. data/lib/rubocop/cop/style/each_with_object.rb +3 -3
  139. data/lib/rubocop/cop/style/empty_literal.rb +1 -3
  140. data/lib/rubocop/cop/style/empty_method.rb +1 -5
  141. data/lib/rubocop/cop/style/end_block.rb +6 -0
  142. data/lib/rubocop/cop/style/even_odd.rb +1 -1
  143. data/lib/rubocop/cop/style/expand_path_arguments.rb +3 -3
  144. data/lib/rubocop/cop/style/exponential_notation.rb +119 -0
  145. data/lib/rubocop/cop/style/format_string.rb +2 -2
  146. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +2 -4
  147. data/lib/rubocop/cop/style/guard_clause.rb +25 -2
  148. data/lib/rubocop/cop/style/hash_each_methods.rb +5 -3
  149. data/lib/rubocop/cop/style/hash_syntax.rb +15 -10
  150. data/lib/rubocop/cop/style/hash_transform_keys.rb +6 -2
  151. data/lib/rubocop/cop/style/hash_transform_values.rb +6 -5
  152. data/lib/rubocop/cop/style/if_unless_modifier.rb +23 -3
  153. data/lib/rubocop/cop/style/if_with_semicolon.rb +16 -0
  154. data/lib/rubocop/cop/style/inverse_methods.rb +9 -5
  155. data/lib/rubocop/cop/style/lambda.rb +3 -2
  156. data/lib/rubocop/cop/style/lambda_call.rb +1 -21
  157. data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +1 -3
  158. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -3
  159. data/lib/rubocop/cop/style/mixin_grouping.rb +1 -1
  160. data/lib/rubocop/cop/style/module_function.rb +58 -12
  161. data/lib/rubocop/cop/style/multiline_if_modifier.rb +1 -1
  162. data/lib/rubocop/cop/style/multiline_memoization.rb +1 -1
  163. data/lib/rubocop/cop/style/multiline_when_then.rb +16 -1
  164. data/lib/rubocop/cop/style/mutable_constant.rb +2 -4
  165. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +4 -4
  166. data/lib/rubocop/cop/style/next.rb +2 -2
  167. data/lib/rubocop/cop/style/nil_comparison.rb +1 -1
  168. data/lib/rubocop/cop/style/non_nil_check.rb +4 -4
  169. data/lib/rubocop/cop/style/not.rb +1 -1
  170. data/lib/rubocop/cop/style/numeric_literal_prefix.rb +1 -1
  171. data/lib/rubocop/cop/style/numeric_literals.rb +1 -1
  172. data/lib/rubocop/cop/style/numeric_predicate.rb +1 -1
  173. data/lib/rubocop/cop/style/one_line_conditional.rb +6 -9
  174. data/lib/rubocop/cop/style/optional_arguments.rb +1 -1
  175. data/lib/rubocop/cop/style/or_assignment.rb +1 -1
  176. data/lib/rubocop/cop/style/percent_q_literals.rb +1 -1
  177. data/lib/rubocop/cop/style/perl_backrefs.rb +2 -2
  178. data/lib/rubocop/cop/style/proc.rb +1 -1
  179. data/lib/rubocop/cop/style/raise_args.rb +1 -1
  180. data/lib/rubocop/cop/style/random_with_offset.rb +3 -3
  181. data/lib/rubocop/cop/style/redundant_condition.rb +18 -6
  182. data/lib/rubocop/cop/style/redundant_conditional.rb +1 -1
  183. data/lib/rubocop/cop/style/redundant_exception.rb +3 -3
  184. data/lib/rubocop/cop/style/redundant_interpolation.rb +2 -2
  185. data/lib/rubocop/cop/style/redundant_parentheses.rb +2 -6
  186. data/lib/rubocop/cop/style/redundant_percent_q.rb +2 -2
  187. data/lib/rubocop/cop/style/redundant_return.rb +5 -7
  188. data/lib/rubocop/cop/style/redundant_self.rb +1 -1
  189. data/lib/rubocop/cop/style/redundant_sort.rb +2 -2
  190. data/lib/rubocop/cop/style/rescue_modifier.rb +1 -1
  191. data/lib/rubocop/cop/style/return_nil.rb +1 -1
  192. data/lib/rubocop/cop/style/safe_navigation.rb +3 -7
  193. data/lib/rubocop/cop/style/self_assignment.rb +1 -1
  194. data/lib/rubocop/cop/style/slicing_with_range.rb +39 -0
  195. data/lib/rubocop/cop/style/special_global_vars.rb +3 -7
  196. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -4
  197. data/lib/rubocop/cop/style/string_hash_keys.rb +1 -1
  198. data/lib/rubocop/cop/style/symbol_array.rb +1 -1
  199. data/lib/rubocop/cop/style/symbol_literal.rb +2 -2
  200. data/lib/rubocop/cop/style/ternary_parentheses.rb +2 -5
  201. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +35 -0
  202. data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +41 -0
  203. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +88 -0
  204. data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +44 -0
  205. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +2 -6
  206. data/lib/rubocop/cop/style/trivial_accessors.rb +1 -1
  207. data/lib/rubocop/cop/style/unpack_first.rb +0 -4
  208. data/lib/rubocop/cop/style/variable_interpolation.rb +1 -1
  209. data/lib/rubocop/cop/style/while_until_modifier.rb +1 -1
  210. data/lib/rubocop/cop/style/word_array.rb +1 -1
  211. data/lib/rubocop/cop/style/zero_length_predicate.rb +1 -1
  212. data/lib/rubocop/cop/util.rb +24 -0
  213. data/lib/rubocop/cop/variable_force.rb +3 -9
  214. data/lib/rubocop/cop/variable_force/assignment.rb +1 -0
  215. data/lib/rubocop/cop/variable_force/branch.rb +2 -6
  216. data/lib/rubocop/cop/variable_force/scope.rb +1 -0
  217. data/lib/rubocop/cop/variable_force/variable.rb +3 -6
  218. data/lib/rubocop/ext/processed_source.rb +18 -0
  219. data/lib/rubocop/formatter/base_formatter.rb +0 -4
  220. data/lib/rubocop/formatter/clang_style_formatter.rb +1 -1
  221. data/lib/rubocop/formatter/disabled_config_formatter.rb +4 -12
  222. data/lib/rubocop/formatter/formatter_set.rb +1 -4
  223. data/lib/rubocop/formatter/junit_formatter.rb +17 -6
  224. data/lib/rubocop/formatter/pacman_formatter.rb +1 -1
  225. data/lib/rubocop/formatter/tap_formatter.rb +1 -1
  226. data/lib/rubocop/name_similarity.rb +12 -9
  227. data/lib/rubocop/options.rb +20 -13
  228. data/lib/rubocop/remote_config.rb +1 -3
  229. data/lib/rubocop/result_cache.rb +1 -3
  230. data/lib/rubocop/rspec/cop_helper.rb +2 -4
  231. data/lib/rubocop/rspec/expect_offense.rb +4 -10
  232. data/lib/rubocop/rspec/shared_contexts.rb +54 -20
  233. data/lib/rubocop/runner.rb +15 -12
  234. data/lib/rubocop/target_finder.rb +5 -7
  235. data/lib/rubocop/target_ruby.rb +2 -2
  236. data/lib/rubocop/version.rb +5 -3
  237. metadata +32 -77
  238. data/lib/rubocop/ast/builder.rb +0 -83
  239. data/lib/rubocop/ast/node.rb +0 -632
  240. data/lib/rubocop/ast/node/alias_node.rb +0 -24
  241. data/lib/rubocop/ast/node/and_node.rb +0 -29
  242. data/lib/rubocop/ast/node/args_node.rb +0 -29
  243. data/lib/rubocop/ast/node/array_node.rb +0 -57
  244. data/lib/rubocop/ast/node/block_node.rb +0 -117
  245. data/lib/rubocop/ast/node/break_node.rb +0 -17
  246. data/lib/rubocop/ast/node/case_node.rb +0 -56
  247. data/lib/rubocop/ast/node/class_node.rb +0 -31
  248. data/lib/rubocop/ast/node/def_node.rb +0 -82
  249. data/lib/rubocop/ast/node/defined_node.rb +0 -17
  250. data/lib/rubocop/ast/node/ensure_node.rb +0 -17
  251. data/lib/rubocop/ast/node/float_node.rb +0 -12
  252. data/lib/rubocop/ast/node/for_node.rb +0 -53
  253. data/lib/rubocop/ast/node/forward_args_node.rb +0 -18
  254. data/lib/rubocop/ast/node/hash_node.rb +0 -109
  255. data/lib/rubocop/ast/node/if_node.rb +0 -175
  256. data/lib/rubocop/ast/node/int_node.rb +0 -12
  257. data/lib/rubocop/ast/node/keyword_splat_node.rb +0 -45
  258. data/lib/rubocop/ast/node/mixin/basic_literal_node.rb +0 -16
  259. data/lib/rubocop/ast/node/mixin/binary_operator_node.rb +0 -43
  260. data/lib/rubocop/ast/node/mixin/collection_node.rb +0 -15
  261. data/lib/rubocop/ast/node/mixin/conditional_node.rb +0 -45
  262. data/lib/rubocop/ast/node/mixin/hash_element_node.rb +0 -125
  263. data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +0 -261
  264. data/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +0 -114
  265. data/lib/rubocop/ast/node/mixin/modifier_node.rb +0 -17
  266. data/lib/rubocop/ast/node/mixin/numeric_node.rb +0 -21
  267. data/lib/rubocop/ast/node/mixin/parameterized_node.rb +0 -61
  268. data/lib/rubocop/ast/node/mixin/predicate_operator_node.rb +0 -35
  269. data/lib/rubocop/ast/node/module_node.rb +0 -24
  270. data/lib/rubocop/ast/node/or_node.rb +0 -29
  271. data/lib/rubocop/ast/node/pair_node.rb +0 -63
  272. data/lib/rubocop/ast/node/range_node.rb +0 -18
  273. data/lib/rubocop/ast/node/regexp_node.rb +0 -33
  274. data/lib/rubocop/ast/node/resbody_node.rb +0 -24
  275. data/lib/rubocop/ast/node/retry_node.rb +0 -17
  276. data/lib/rubocop/ast/node/return_node.rb +0 -24
  277. data/lib/rubocop/ast/node/self_class_node.rb +0 -24
  278. data/lib/rubocop/ast/node/send_node.rb +0 -13
  279. data/lib/rubocop/ast/node/str_node.rb +0 -16
  280. data/lib/rubocop/ast/node/super_node.rb +0 -21
  281. data/lib/rubocop/ast/node/symbol_node.rb +0 -12
  282. data/lib/rubocop/ast/node/until_node.rb +0 -35
  283. data/lib/rubocop/ast/node/when_node.rb +0 -53
  284. data/lib/rubocop/ast/node/while_node.rb +0 -35
  285. data/lib/rubocop/ast/node/yield_node.rb +0 -21
  286. data/lib/rubocop/ast/sexp.rb +0 -16
  287. data/lib/rubocop/ast/traversal.rb +0 -200
  288. data/lib/rubocop/cop/lint/end_in_method.rb +0 -40
  289. data/lib/rubocop/formatter/disabled_lines_formatter.rb +0 -57
  290. data/lib/rubocop/node_pattern.rb +0 -887
  291. data/lib/rubocop/processed_source.rb +0 -216
  292. data/lib/rubocop/string_util.rb +0 -14
  293. data/lib/rubocop/token.rb +0 -114
@@ -111,15 +111,15 @@ module RuboCop
111
111
 
112
112
  return if expr == new_code
113
113
 
114
- ->(corrector) { corrector.replace(node.source_range, new_code) }
114
+ ->(corrector) { corrector.replace(node, new_code) }
115
115
  end
116
116
 
117
117
  def autocorrect_non_nil(node, inner_node)
118
118
  lambda do |corrector|
119
119
  if inner_node.receiver
120
- corrector.replace(node.source_range, inner_node.receiver.source)
120
+ corrector.replace(node, inner_node.receiver.source)
121
121
  else
122
- corrector.replace(node.source_range, 'self')
122
+ corrector.replace(node, 'self')
123
123
  end
124
124
  end
125
125
  end
@@ -127,7 +127,7 @@ module RuboCop
127
127
  def autocorrect_unless_nil(node, receiver)
128
128
  lambda do |corrector|
129
129
  corrector.replace(node.parent.loc.keyword, 'if')
130
- corrector.replace(node.source_range, receiver.source)
130
+ corrector.replace(node, receiver.source)
131
131
  end
132
132
  end
133
133
  end
@@ -69,7 +69,7 @@ module RuboCop
69
69
  def correct_with_parens(range, node)
70
70
  lambda do |corrector|
71
71
  corrector.replace(range, '!(')
72
- corrector.insert_after(node.source_range, ')')
72
+ corrector.insert_after(node, ')')
73
73
  end
74
74
  end
75
75
 
@@ -59,7 +59,7 @@ module RuboCop
59
59
  def autocorrect(node)
60
60
  lambda do |corrector|
61
61
  type = literal_type(node)
62
- corrector.replace(node.source_range,
62
+ corrector.replace(node,
63
63
  send(:"format_#{type}", node.source))
64
64
  end
65
65
  end
@@ -48,7 +48,7 @@ module RuboCop
48
48
 
49
49
  def autocorrect(node)
50
50
  lambda do |corrector|
51
- corrector.replace(node.source_range, format_number(node))
51
+ corrector.replace(node, format_number(node))
52
52
  end
53
53
  end
54
54
 
@@ -73,7 +73,7 @@ module RuboCop
73
73
  _, replacement = check(node)
74
74
 
75
75
  lambda do |corrector|
76
- corrector.replace(node.loc.expression, replacement)
76
+ corrector.replace(node, replacement)
77
77
  end
78
78
  end
79
79
 
@@ -36,7 +36,7 @@ module RuboCop
36
36
 
37
37
  def autocorrect(node)
38
38
  lambda do |corrector|
39
- corrector.replace(node.source_range, replacement(node))
39
+ corrector.replace(node, replacement(node))
40
40
  end
41
41
  end
42
42
 
@@ -49,13 +49,9 @@ module RuboCop
49
49
  def replacement(node)
50
50
  return to_ternary(node) unless node.parent
51
51
 
52
- if %i[and or].include?(node.parent.type)
53
- return "(#{to_ternary(node)})"
54
- end
52
+ return "(#{to_ternary(node)})" if %i[and or].include?(node.parent.type)
55
53
 
56
- if node.parent.send_type? && node.parent.operator_method?
57
- return "(#{to_ternary(node)})"
58
- end
54
+ return "(#{to_ternary(node)})" if node.parent.send_type? && node.parent.operator_method?
59
55
 
60
56
  to_ternary(node)
61
57
  end
@@ -91,9 +87,10 @@ module RuboCop
91
87
 
92
88
  def keyword_with_changed_precedence?(node)
93
89
  return false unless node.keyword?
94
- return true if node.prefix_not?
90
+ return true if node.respond_to?(:prefix_not?) && node.prefix_not?
95
91
 
96
- node.arguments? && !node.parenthesized_call?
92
+ node.respond_to?(:arguments?) && node.arguments? &&
93
+ !node.parenthesized_call?
97
94
  end
98
95
  end
99
96
  end
@@ -4,7 +4,7 @@ module RuboCop
4
4
  module Cop
5
5
  module Style
6
6
  # This cop checks for optional arguments to methods
7
- # that do not come at the end of the argument list
7
+ # that do not come at the end of the argument list.
8
8
  #
9
9
  # @example
10
10
  # # bad
@@ -69,7 +69,7 @@ module RuboCop
69
69
  end
70
70
 
71
71
  lambda do |corrector|
72
- corrector.replace(node.source_range,
72
+ corrector.replace(node,
73
73
  "#{variable} ||= #{default.source}")
74
74
  end
75
75
  end
@@ -39,7 +39,7 @@ module RuboCop
39
39
 
40
40
  def autocorrect(node)
41
41
  lambda do |corrector|
42
- corrector.replace(node.source_range, corrected(node.source))
42
+ corrector.replace(node, corrected(node.source))
43
43
  end
44
44
  end
45
45
 
@@ -24,10 +24,10 @@ module RuboCop
24
24
  backref, = *node
25
25
  parent_type = node.parent ? node.parent.type : nil
26
26
  if %i[dstr xstr regexp].include?(parent_type)
27
- corrector.replace(node.source_range,
27
+ corrector.replace(node,
28
28
  "{Regexp.last_match(#{backref})}")
29
29
  else
30
- corrector.replace(node.source_range,
30
+ corrector.replace(node,
31
31
  "Regexp.last_match(#{backref})")
32
32
  end
33
33
  end
@@ -26,7 +26,7 @@ module RuboCop
26
26
  end
27
27
 
28
28
  def autocorrect(node)
29
- ->(corrector) { corrector.replace(node.source_range, 'proc') }
29
+ ->(corrector) { corrector.replace(node, 'proc') }
30
30
  end
31
31
  end
32
32
  end
@@ -58,7 +58,7 @@ module RuboCop
58
58
  correction_compact_to_exploded(node)
59
59
  end
60
60
 
61
- ->(corrector) { corrector.replace(node.source_range, replacement) }
61
+ ->(corrector) { corrector.replace(node, replacement) }
62
62
  end
63
63
 
64
64
  private
@@ -66,13 +66,13 @@ module RuboCop
66
66
  def autocorrect(node)
67
67
  lambda do |corrector|
68
68
  if integer_op_rand?(node)
69
- corrector.replace(node.source_range,
69
+ corrector.replace(node,
70
70
  corrected_integer_op_rand(node))
71
71
  elsif rand_op_integer?(node)
72
- corrector.replace(node.source_range,
72
+ corrector.replace(node,
73
73
  corrected_rand_op_integer(node))
74
74
  elsif rand_modified?(node)
75
- corrector.replace(node.source_range,
75
+ corrector.replace(node,
76
76
  corrected_rand_modified(node))
77
77
  end
78
78
  end
@@ -46,13 +46,13 @@ module RuboCop
46
46
  def autocorrect(node)
47
47
  lambda do |corrector|
48
48
  if node.ternary?
49
- corrector.replace(range_of_offense(node), '||')
49
+ correct_ternary(corrector, node)
50
50
  elsif node.modifier_form? || !node.else_branch
51
- corrector.replace(node.source_range, node.if_branch.source)
51
+ corrector.replace(node, node.if_branch.source)
52
52
  else
53
53
  corrected = make_ternary_form(node)
54
54
 
55
- corrector.replace(node.source_range, corrected)
55
+ corrector.replace(node, corrected)
56
56
  end
57
57
  end
58
58
  end
@@ -90,9 +90,13 @@ module RuboCop
90
90
  end
91
91
 
92
92
  def else_source(else_branch)
93
- wrap_else =
94
- else_branch.basic_conditional? && else_branch.modifier_form?
95
- wrap_else ? "(#{else_branch.source})" : else_branch.source
93
+ if else_branch.basic_conditional? &&
94
+ else_branch.modifier_form? ||
95
+ else_branch.range_type?
96
+ "(#{else_branch.source})"
97
+ else
98
+ else_branch.source
99
+ end
96
100
  end
97
101
 
98
102
  def make_ternary_form(node)
@@ -106,6 +110,14 @@ module RuboCop
106
110
  ternary_form
107
111
  end
108
112
  end
113
+
114
+ def correct_ternary(corrector, node)
115
+ corrector.replace(range_of_offense(node), '||')
116
+
117
+ return unless node.else_branch.range_type?
118
+
119
+ corrector.wrap(node.else_branch, '(', ')')
120
+ end
109
121
  end
110
122
  end
111
123
  end
@@ -40,7 +40,7 @@ module RuboCop
40
40
 
41
41
  def autocorrect(node)
42
42
  lambda do |corrector|
43
- corrector.replace(node.loc.expression, replacement_condition(node))
43
+ corrector.replace(node, replacement_condition(node))
44
44
  end
45
45
  end
46
46
 
@@ -32,17 +32,17 @@ module RuboCop
32
32
  exploded?(node) do |command, message|
33
33
  return lambda do |corrector|
34
34
  if node.parenthesized?
35
- corrector.replace(node.source_range,
35
+ corrector.replace(node,
36
36
  "#{command}(#{message.source})")
37
37
  else
38
- corrector.replace(node.source_range,
38
+ corrector.replace(node,
39
39
  "#{command} #{message.source}")
40
40
  end
41
41
  end
42
42
  end
43
43
  compact?(node) do |new_call, message|
44
44
  lambda do |corrector|
45
- corrector.replace(new_call.source_range, message.source)
45
+ corrector.replace(new_call, message.source)
46
46
  end
47
47
  end
48
48
  end
@@ -72,13 +72,13 @@ module RuboCop
72
72
 
73
73
  def autocorrect_variable_interpolation(embedded_node, node)
74
74
  replacement = "#{embedded_node.loc.expression.source}.to_s"
75
- ->(corrector) { corrector.replace(node.loc.expression, replacement) }
75
+ ->(corrector) { corrector.replace(node, replacement) }
76
76
  end
77
77
 
78
78
  def autocorrect_single_variable_interpolation(embedded_node, node)
79
79
  variable_loc = embedded_node.children.first.loc
80
80
  replacement = "#{variable_loc.expression.source}.to_s"
81
- ->(corrector) { corrector.replace(node.loc.expression, replacement) }
81
+ ->(corrector) { corrector.replace(node, replacement) }
82
82
  end
83
83
 
84
84
  def autocorrect_other(embedded_node, node)
@@ -93,12 +93,8 @@ module RuboCop
93
93
 
94
94
  def check(begin_node)
95
95
  node = begin_node.children.first
96
- if keyword_with_redundant_parentheses?(node)
97
- return offense(begin_node, 'a keyword')
98
- end
99
- if disallowed_literal?(begin_node, node)
100
- return offense(begin_node, 'a literal')
101
- end
96
+ return offense(begin_node, 'a keyword') if keyword_with_redundant_parentheses?(node)
97
+ return offense(begin_node, 'a literal') if disallowed_literal?(begin_node, node)
102
98
  return offense(begin_node, 'a variable') if node.variable?
103
99
  return offense(begin_node, 'a constant') if node.const_type?
104
100
 
@@ -47,7 +47,7 @@ module RuboCop
47
47
 
48
48
  def autocorrect(node)
49
49
  delimiter =
50
- node.source =~ /^%Q[^"]+$|'/ ? QUOTE : SINGLE_QUOTE
50
+ /^%Q[^"]+$|'/.match?(node.source) ? QUOTE : SINGLE_QUOTE
51
51
  lambda do |corrector|
52
52
  corrector.replace(node.loc.begin, delimiter)
53
53
  corrector.replace(node.loc.end, delimiter)
@@ -95,7 +95,7 @@ module RuboCop
95
95
  def acceptable_q?(node)
96
96
  src = node.source
97
97
 
98
- return true if src =~ STRING_INTERPOLATION_REGEXP
98
+ return true if STRING_INTERPOLATION_REGEXP.match?(src)
99
99
 
100
100
  src.scan(/\\./).any? { |s| s =~ ESCAPED_NON_BACKSLASH }
101
101
  end
@@ -71,7 +71,7 @@ module RuboCop
71
71
  private
72
72
 
73
73
  def correct_without_arguments(return_node, corrector)
74
- corrector.replace(return_node.source_range, 'nil')
74
+ corrector.replace(return_node, 'nil')
75
75
  end
76
76
 
77
77
  def correct_with_arguments(return_node, corrector)
@@ -91,15 +91,13 @@ module RuboCop
91
91
  end
92
92
 
93
93
  def add_brackets(corrector, node)
94
- kids = node.children.map(&:source_range)
95
- corrector.insert_before(kids.first, '[')
96
- corrector.insert_after(kids.last, ']')
94
+ corrector.insert_before(node.children.first, '[')
95
+ corrector.insert_after(node.children.last, ']')
97
96
  end
98
97
 
99
98
  def add_braces(corrector, node)
100
- kids = node.children.map(&:source_range)
101
- corrector.insert_before(kids.first, '{')
102
- corrector.insert_after(kids.last, '}')
99
+ corrector.insert_before(node.children.first, '{')
100
+ corrector.insert_after(node.children.last, '}')
103
101
  end
104
102
 
105
103
  # rubocop:disable Metrics/CyclomaticComplexity
@@ -110,7 +110,7 @@ module RuboCop
110
110
 
111
111
  def autocorrect(node)
112
112
  lambda do |corrector|
113
- corrector.remove(node.receiver.source_range)
113
+ corrector.remove(node.receiver)
114
114
  corrector.remove(node.loc.dot)
115
115
  end
116
116
  end
@@ -63,9 +63,9 @@ module RuboCop
63
63
  (send $(send _ $:sort_by _) ${:last :first})
64
64
  (send $(send _ $:sort_by _) ${:[] :at :slice} {(int 0) (int -1)})
65
65
 
66
- (send (block $(send _ ${:sort_by :sort}) ...) ${:last :first})
66
+ (send ({block numblock} $(send _ ${:sort_by :sort}) ...) ${:last :first})
67
67
  (send
68
- (block $(send _ ${:sort_by :sort}) ...)
68
+ ({block numblock} $(send _ ${:sort_by :sort}) ...)
69
69
  ${:[] :at :slice} {(int 0) (int -1)}
70
70
  )
71
71
  }
@@ -64,7 +64,7 @@ module RuboCop
64
64
  "\n#{offset(node)}end"
65
65
 
66
66
  lambda do |corrector|
67
- corrector.replace(node.source_range, correction)
67
+ corrector.replace(node, correction)
68
68
  end
69
69
  end
70
70
  end
@@ -60,7 +60,7 @@ module RuboCop
60
60
  def autocorrect(node)
61
61
  lambda do |corrector|
62
62
  corrected = style == :return ? 'return' : 'return nil'
63
- corrector.replace(node.source_range, corrected)
63
+ corrector.replace(node, corrected)
64
64
  end
65
65
  end
66
66
 
@@ -131,7 +131,7 @@ module RuboCop
131
131
  comments = comments(node)
132
132
  return if comments.empty?
133
133
 
134
- corrector.insert_before(method_call.loc.expression,
134
+ corrector.insert_before(method_call,
135
135
  "#{comments.map(&:text).join("\n")}\n")
136
136
  end
137
137
 
@@ -167,9 +167,7 @@ module RuboCop
167
167
  checked_variable, matching_receiver, method =
168
168
  extract_common_parts(receiver, variable)
169
169
 
170
- if receiver && LOGIC_JUMP_KEYWORDS.include?(receiver.type)
171
- matching_receiver = nil
172
- end
170
+ matching_receiver = nil if receiver && LOGIC_JUMP_KEYWORDS.include?(receiver.type)
173
171
 
174
172
  [checked_variable, matching_receiver, receiver, method]
175
173
  end
@@ -221,9 +219,7 @@ module RuboCop
221
219
  return true if unsafe_method?(method)
222
220
 
223
221
  method.each_ancestor(:send).any? do |ancestor|
224
- unless config.for_cop('Lint/SafeNavigationChain')['Enabled']
225
- break true
226
- end
222
+ break true unless config.for_cop('Lint/SafeNavigationChain')['Enabled']
227
223
 
228
224
  break true if unsafe_method?(ancestor)
229
225
  break true if nil_methods.include?(ancestor.method_name)
@@ -88,7 +88,7 @@ module RuboCop
88
88
  def apply_autocorrect(node, rhs, operator, new_rhs)
89
89
  lambda do |corrector|
90
90
  corrector.insert_before(node.loc.operator, operator)
91
- corrector.replace(rhs.source_range, new_rhs.source)
91
+ corrector.replace(rhs, new_rhs.source)
92
92
  end
93
93
  end
94
94
  end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Style
6
+ # This cop checks that arrays are sliced with endless ranges instead of
7
+ # `ary[start..-1]` on Ruby 2.6+.
8
+ #
9
+ # @example
10
+ # # bad
11
+ # items[1..-1]
12
+ #
13
+ # # good
14
+ # items[1..]
15
+ class SlicingWithRange < Cop
16
+ extend TargetRubyVersion
17
+
18
+ minimum_target_ruby_version 2.6
19
+
20
+ MSG = 'Prefer ary[n..] over ary[n..-1].'
21
+
22
+ def_node_matcher :range_till_minus_one?, '(irange !nil? (int -1))'
23
+
24
+ def on_send(node)
25
+ return unless node.method?(:[]) && node.arguments.count == 1
26
+ return unless range_till_minus_one?(node.arguments.first)
27
+
28
+ add_offense(node.arguments.first)
29
+ end
30
+
31
+ def autocorrect(node)
32
+ lambda do |corrector|
33
+ corrector.remove(node.end)
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end