rubocop 0.80.1 → 0.85.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 (324) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -4
  3. data/config/default.yml +202 -49
  4. data/lib/rubocop.rb +20 -61
  5. data/lib/rubocop/ast_aliases.rb +8 -0
  6. data/lib/rubocop/cli.rb +13 -7
  7. data/lib/rubocop/cli/command/auto_genenerate_config.rb +2 -2
  8. data/lib/rubocop/cli/command/show_cops.rb +2 -6
  9. data/lib/rubocop/comment_config.rb +1 -1
  10. data/lib/rubocop/config.rb +14 -2
  11. data/lib/rubocop/config_loader.rb +37 -33
  12. data/lib/rubocop/config_loader_resolver.rb +45 -6
  13. data/lib/rubocop/config_obsoletion.rb +2 -0
  14. data/lib/rubocop/config_store.rb +12 -2
  15. data/lib/rubocop/config_validator.rb +18 -1
  16. data/lib/rubocop/cop/autocorrect_logic.rb +1 -2
  17. data/lib/rubocop/cop/badge.rb +5 -5
  18. data/lib/rubocop/cop/bundler/gem_comment.rb +70 -1
  19. data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +1 -1
  20. data/lib/rubocop/cop/commissioner.rb +0 -21
  21. data/lib/rubocop/cop/cop.rb +14 -6
  22. data/lib/rubocop/cop/corrector.rb +48 -24
  23. data/lib/rubocop/cop/correctors/alignment_corrector.rb +4 -8
  24. data/lib/rubocop/cop/correctors/condition_corrector.rb +1 -2
  25. data/lib/rubocop/cop/correctors/empty_line_corrector.rb +1 -1
  26. data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +4 -4
  27. data/lib/rubocop/cop/correctors/line_break_corrector.rb +2 -2
  28. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +1 -1
  29. data/lib/rubocop/cop/correctors/space_corrector.rb +1 -3
  30. data/lib/rubocop/cop/correctors/string_literal_corrector.rb +2 -2
  31. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -3
  32. data/lib/rubocop/cop/generator.rb +4 -3
  33. data/lib/rubocop/cop/ignored_node.rb +1 -3
  34. data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +1 -1
  35. data/lib/rubocop/cop/layout/array_alignment.rb +53 -10
  36. data/lib/rubocop/cop/layout/block_end_newline.rb +5 -3
  37. data/lib/rubocop/cop/layout/case_indentation.rb +3 -3
  38. data/lib/rubocop/cop/layout/class_structure.rb +19 -16
  39. data/lib/rubocop/cop/layout/condition_position.rb +12 -2
  40. data/lib/rubocop/cop/layout/dot_position.rb +1 -1
  41. data/lib/rubocop/cop/layout/else_alignment.rb +8 -0
  42. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +2 -6
  43. data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +126 -0
  44. data/lib/rubocop/cop/layout/end_of_line.rb +2 -2
  45. data/lib/rubocop/cop/layout/first_argument_indentation.rb +1 -3
  46. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +14 -10
  47. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -1
  48. data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +1 -1
  49. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -3
  50. data/lib/rubocop/cop/layout/first_parameter_indentation.rb +2 -2
  51. data/lib/rubocop/cop/layout/hash_alignment.rb +6 -6
  52. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +5 -9
  53. data/lib/rubocop/cop/layout/heredoc_indentation.rb +20 -103
  54. data/lib/rubocop/cop/layout/{tab.rb → indentation_style.rb} +48 -6
  55. data/lib/rubocop/cop/layout/indentation_width.rb +1 -3
  56. data/lib/rubocop/cop/layout/leading_comment_space.rb +1 -1
  57. data/lib/rubocop/cop/layout/line_length.rb +23 -20
  58. data/lib/rubocop/cop/layout/multiline_block_layout.rb +1 -1
  59. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -3
  60. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +1 -1
  61. data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +13 -4
  62. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +3 -3
  63. data/lib/rubocop/cop/layout/space_around_keyword.rb +2 -2
  64. data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +131 -0
  65. data/lib/rubocop/cop/layout/space_around_operators.rb +19 -2
  66. data/lib/rubocop/cop/layout/space_before_comment.rb +1 -3
  67. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +1 -1
  68. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +1 -3
  69. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +2 -2
  70. data/lib/rubocop/cop/layout/space_inside_range_literal.rb +2 -2
  71. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +1 -3
  72. data/lib/rubocop/cop/layout/trailing_whitespace.rb +2 -2
  73. data/lib/rubocop/cop/lint/ambiguous_operator.rb +41 -0
  74. data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +14 -0
  75. data/lib/rubocop/cop/lint/boolean_symbol.rb +12 -0
  76. data/lib/rubocop/cop/lint/debugger.rb +1 -1
  77. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +137 -0
  78. data/lib/rubocop/cop/lint/duplicate_methods.rb +1 -5
  79. data/lib/rubocop/cop/lint/empty_when.rb +29 -6
  80. data/lib/rubocop/cop/lint/ensure_return.rb +19 -2
  81. data/lib/rubocop/cop/lint/erb_new_arguments.rb +2 -4
  82. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -1
  83. data/lib/rubocop/cop/lint/inherit_exception.rb +1 -1
  84. data/lib/rubocop/cop/lint/interpolation_check.rb +1 -1
  85. data/lib/rubocop/cop/lint/literal_as_condition.rb +10 -13
  86. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +1 -1
  87. data/lib/rubocop/cop/lint/loop.rb +7 -5
  88. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +62 -0
  89. data/lib/rubocop/cop/lint/multiple_comparison.rb +1 -1
  90. data/lib/rubocop/cop/lint/nested_method_definition.rb +2 -2
  91. data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -1
  92. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +2 -2
  93. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +7 -7
  94. data/lib/rubocop/cop/lint/number_conversion.rb +1 -1
  95. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +33 -11
  96. data/lib/rubocop/cop/lint/percent_string_array.rb +2 -4
  97. data/lib/rubocop/cop/lint/raise_exception.rb +75 -0
  98. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +1 -6
  99. data/lib/rubocop/cop/lint/redundant_require_statement.rb +3 -3
  100. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +1 -1
  101. data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
  102. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +1 -1
  103. data/lib/rubocop/cop/lint/struct_new_override.rb +58 -0
  104. data/lib/rubocop/cop/lint/suppressed_exception.rb +23 -26
  105. data/lib/rubocop/cop/lint/syntax.rb +1 -3
  106. data/lib/rubocop/cop/lint/unified_integer.rb +0 -2
  107. data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
  108. data/lib/rubocop/cop/lint/unused_method_argument.rb +32 -6
  109. data/lib/rubocop/cop/lint/uri_regexp.rb +4 -4
  110. data/lib/rubocop/cop/lint/useless_access_modifier.rb +13 -3
  111. data/lib/rubocop/cop/lint/useless_assignment.rb +3 -2
  112. data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +6 -1
  113. data/lib/rubocop/cop/lint/useless_setter_call.rb +1 -1
  114. data/lib/rubocop/cop/migration/department_name.rb +22 -9
  115. data/lib/rubocop/cop/mixin/alignment.rb +1 -3
  116. data/lib/rubocop/cop/mixin/array_min_size.rb +1 -3
  117. data/lib/rubocop/cop/mixin/check_line_breakable.rb +3 -9
  118. data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +1 -3
  119. data/lib/rubocop/cop/mixin/configurable_formatting.rb +2 -4
  120. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +6 -1
  121. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +10 -1
  122. data/lib/rubocop/cop/mixin/hash_transform_method.rb +9 -2
  123. data/lib/rubocop/cop/mixin/ignored_pattern.rb +1 -1
  124. data/lib/rubocop/cop/mixin/line_length_help.rb +3 -2
  125. data/lib/rubocop/cop/mixin/method_complexity.rb +5 -0
  126. data/lib/rubocop/cop/mixin/parser_diagnostic.rb +1 -1
  127. data/lib/rubocop/cop/mixin/regexp_literal_help.rb +16 -0
  128. data/lib/rubocop/cop/mixin/statement_modifier.rb +7 -22
  129. data/lib/rubocop/cop/mixin/target_ruby_version.rb +5 -1
  130. data/lib/rubocop/cop/mixin/trailing_comma.rb +2 -4
  131. data/lib/rubocop/cop/mixin/uncommunicative_name.rb +1 -1
  132. data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +11 -1
  133. data/lib/rubocop/cop/naming/constant_name.rb +2 -1
  134. data/lib/rubocop/cop/naming/file_name.rb +27 -14
  135. data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +1 -1
  136. data/lib/rubocop/cop/naming/method_name.rb +26 -0
  137. data/lib/rubocop/cop/naming/predicate_name.rb +1 -1
  138. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +1 -1
  139. data/lib/rubocop/cop/registry.rb +12 -7
  140. data/lib/rubocop/cop/severity.rb +1 -3
  141. data/lib/rubocop/cop/style/access_modifier_declarations.rb +26 -6
  142. data/lib/rubocop/cop/style/alias.rb +4 -4
  143. data/lib/rubocop/cop/style/and_or.rb +7 -8
  144. data/lib/rubocop/cop/style/array_join.rb +2 -2
  145. data/lib/rubocop/cop/style/attr.rb +1 -3
  146. data/lib/rubocop/cop/style/bare_percent_literals.rb +1 -1
  147. data/lib/rubocop/cop/style/block_delimiters.rb +2 -8
  148. data/lib/rubocop/cop/style/case_equality.rb +24 -1
  149. data/lib/rubocop/cop/style/character_literal.rb +2 -2
  150. data/lib/rubocop/cop/style/collection_methods.rb +2 -0
  151. data/lib/rubocop/cop/style/conditional_assignment.rb +9 -11
  152. data/lib/rubocop/cop/style/copyright.rb +3 -3
  153. data/lib/rubocop/cop/style/dir.rb +1 -1
  154. data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +49 -0
  155. data/lib/rubocop/cop/style/documentation.rb +43 -5
  156. data/lib/rubocop/cop/style/double_cop_disable_directive.rb +1 -1
  157. data/lib/rubocop/cop/style/double_negation.rb +41 -4
  158. data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -1
  159. data/lib/rubocop/cop/style/each_with_object.rb +3 -3
  160. data/lib/rubocop/cop/style/empty_literal.rb +1 -3
  161. data/lib/rubocop/cop/style/empty_method.rb +2 -6
  162. data/lib/rubocop/cop/style/end_block.rb +6 -0
  163. data/lib/rubocop/cop/style/even_odd.rb +1 -1
  164. data/lib/rubocop/cop/style/expand_path_arguments.rb +3 -3
  165. data/lib/rubocop/cop/style/exponential_notation.rb +119 -0
  166. data/lib/rubocop/cop/style/format_string.rb +2 -2
  167. data/lib/rubocop/cop/style/format_string_token.rb +2 -3
  168. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -6
  169. data/lib/rubocop/cop/style/guard_clause.rb +25 -2
  170. data/lib/rubocop/cop/style/hash_each_methods.rb +6 -4
  171. data/lib/rubocop/cop/style/hash_syntax.rb +19 -12
  172. data/lib/rubocop/cop/style/hash_transform_keys.rb +6 -2
  173. data/lib/rubocop/cop/style/hash_transform_values.rb +6 -5
  174. data/lib/rubocop/cop/style/if_unless_modifier.rb +23 -3
  175. data/lib/rubocop/cop/style/if_with_semicolon.rb +16 -0
  176. data/lib/rubocop/cop/style/inline_comment.rb +1 -1
  177. data/lib/rubocop/cop/style/inverse_methods.rb +1 -1
  178. data/lib/rubocop/cop/style/lambda.rb +3 -2
  179. data/lib/rubocop/cop/style/lambda_call.rb +1 -21
  180. data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +1 -3
  181. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -3
  182. data/lib/rubocop/cop/style/mixin_grouping.rb +1 -1
  183. data/lib/rubocop/cop/style/module_function.rb +58 -12
  184. data/lib/rubocop/cop/style/multiline_if_modifier.rb +1 -1
  185. data/lib/rubocop/cop/style/multiline_memoization.rb +1 -1
  186. data/lib/rubocop/cop/style/multiline_when_then.rb +16 -1
  187. data/lib/rubocop/cop/style/mutable_constant.rb +2 -4
  188. data/lib/rubocop/cop/style/negated_if.rb +3 -3
  189. data/lib/rubocop/cop/style/negated_unless.rb +3 -3
  190. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +2 -2
  191. data/lib/rubocop/cop/style/next.rb +2 -2
  192. data/lib/rubocop/cop/style/nil_comparison.rb +1 -1
  193. data/lib/rubocop/cop/style/non_nil_check.rb +5 -5
  194. data/lib/rubocop/cop/style/not.rb +1 -1
  195. data/lib/rubocop/cop/style/numeric_literal_prefix.rb +1 -1
  196. data/lib/rubocop/cop/style/numeric_literals.rb +1 -1
  197. data/lib/rubocop/cop/style/numeric_predicate.rb +1 -1
  198. data/lib/rubocop/cop/style/one_line_conditional.rb +6 -9
  199. data/lib/rubocop/cop/style/optional_arguments.rb +1 -1
  200. data/lib/rubocop/cop/style/or_assignment.rb +1 -1
  201. data/lib/rubocop/cop/style/percent_q_literals.rb +1 -1
  202. data/lib/rubocop/cop/style/perl_backrefs.rb +2 -2
  203. data/lib/rubocop/cop/style/proc.rb +1 -1
  204. data/lib/rubocop/cop/style/raise_args.rb +1 -1
  205. data/lib/rubocop/cop/style/random_with_offset.rb +3 -3
  206. data/lib/rubocop/cop/style/redundant_condition.rb +3 -4
  207. data/lib/rubocop/cop/style/redundant_conditional.rb +1 -1
  208. data/lib/rubocop/cop/style/redundant_exception.rb +3 -3
  209. data/lib/rubocop/cop/style/redundant_interpolation.rb +2 -2
  210. data/lib/rubocop/cop/style/redundant_parentheses.rb +2 -6
  211. data/lib/rubocop/cop/style/redundant_percent_q.rb +3 -3
  212. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +89 -0
  213. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +130 -0
  214. data/lib/rubocop/cop/style/redundant_return.rb +5 -7
  215. data/lib/rubocop/cop/style/redundant_self.rb +1 -1
  216. data/lib/rubocop/cop/style/redundant_sort.rb +2 -2
  217. data/lib/rubocop/cop/style/rescue_modifier.rb +1 -1
  218. data/lib/rubocop/cop/style/return_nil.rb +1 -1
  219. data/lib/rubocop/cop/style/safe_navigation.rb +3 -7
  220. data/lib/rubocop/cop/style/self_assignment.rb +1 -1
  221. data/lib/rubocop/cop/style/slicing_with_range.rb +39 -0
  222. data/lib/rubocop/cop/style/special_global_vars.rb +3 -7
  223. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -4
  224. data/lib/rubocop/cop/style/string_hash_keys.rb +1 -1
  225. data/lib/rubocop/cop/style/symbol_array.rb +2 -2
  226. data/lib/rubocop/cop/style/symbol_literal.rb +2 -2
  227. data/lib/rubocop/cop/style/ternary_parentheses.rb +2 -5
  228. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +35 -0
  229. data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +41 -0
  230. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +88 -0
  231. data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +44 -0
  232. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +1 -3
  233. data/lib/rubocop/cop/style/trivial_accessors.rb +1 -1
  234. data/lib/rubocop/cop/style/unless_else.rb +1 -1
  235. data/lib/rubocop/cop/style/unpack_first.rb +0 -4
  236. data/lib/rubocop/cop/style/variable_interpolation.rb +1 -1
  237. data/lib/rubocop/cop/style/when_then.rb +1 -1
  238. data/lib/rubocop/cop/style/while_until_modifier.rb +1 -1
  239. data/lib/rubocop/cop/style/word_array.rb +1 -1
  240. data/lib/rubocop/cop/style/zero_length_predicate.rb +1 -1
  241. data/lib/rubocop/cop/team.rb +61 -25
  242. data/lib/rubocop/cop/util.rb +25 -1
  243. data/lib/rubocop/cop/variable_force.rb +3 -9
  244. data/lib/rubocop/cop/variable_force/assignment.rb +1 -0
  245. data/lib/rubocop/cop/variable_force/branch.rb +1 -3
  246. data/lib/rubocop/cop/variable_force/scope.rb +1 -0
  247. data/lib/rubocop/cop/variable_force/variable.rb +3 -6
  248. data/lib/rubocop/ext/processed_source.rb +18 -0
  249. data/lib/rubocop/formatter/base_formatter.rb +0 -4
  250. data/lib/rubocop/formatter/clang_style_formatter.rb +1 -1
  251. data/lib/rubocop/formatter/disabled_config_formatter.rb +4 -12
  252. data/lib/rubocop/formatter/formatter_set.rb +1 -4
  253. data/lib/rubocop/formatter/junit_formatter.rb +27 -6
  254. data/lib/rubocop/formatter/pacman_formatter.rb +1 -1
  255. data/lib/rubocop/formatter/tap_formatter.rb +1 -1
  256. data/lib/rubocop/magic_comment.rb +1 -1
  257. data/lib/rubocop/name_similarity.rb +12 -9
  258. data/lib/rubocop/options.rb +33 -12
  259. data/lib/rubocop/remote_config.rb +1 -3
  260. data/lib/rubocop/result_cache.rb +5 -7
  261. data/lib/rubocop/rspec/cop_helper.rb +3 -26
  262. data/lib/rubocop/rspec/expect_offense.rb +46 -16
  263. data/lib/rubocop/rspec/shared_contexts.rb +54 -20
  264. data/lib/rubocop/runner.rb +21 -14
  265. data/lib/rubocop/target_finder.rb +7 -7
  266. data/lib/rubocop/target_ruby.rb +5 -2
  267. data/lib/rubocop/version.rb +5 -3
  268. metadata +50 -77
  269. data/lib/rubocop/ast/builder.rb +0 -83
  270. data/lib/rubocop/ast/node.rb +0 -632
  271. data/lib/rubocop/ast/node/alias_node.rb +0 -24
  272. data/lib/rubocop/ast/node/and_node.rb +0 -29
  273. data/lib/rubocop/ast/node/args_node.rb +0 -29
  274. data/lib/rubocop/ast/node/array_node.rb +0 -57
  275. data/lib/rubocop/ast/node/block_node.rb +0 -117
  276. data/lib/rubocop/ast/node/break_node.rb +0 -17
  277. data/lib/rubocop/ast/node/case_node.rb +0 -56
  278. data/lib/rubocop/ast/node/class_node.rb +0 -31
  279. data/lib/rubocop/ast/node/def_node.rb +0 -82
  280. data/lib/rubocop/ast/node/defined_node.rb +0 -17
  281. data/lib/rubocop/ast/node/ensure_node.rb +0 -17
  282. data/lib/rubocop/ast/node/float_node.rb +0 -12
  283. data/lib/rubocop/ast/node/for_node.rb +0 -53
  284. data/lib/rubocop/ast/node/forward_args_node.rb +0 -18
  285. data/lib/rubocop/ast/node/hash_node.rb +0 -109
  286. data/lib/rubocop/ast/node/if_node.rb +0 -175
  287. data/lib/rubocop/ast/node/int_node.rb +0 -12
  288. data/lib/rubocop/ast/node/keyword_splat_node.rb +0 -45
  289. data/lib/rubocop/ast/node/mixin/basic_literal_node.rb +0 -16
  290. data/lib/rubocop/ast/node/mixin/binary_operator_node.rb +0 -43
  291. data/lib/rubocop/ast/node/mixin/collection_node.rb +0 -15
  292. data/lib/rubocop/ast/node/mixin/conditional_node.rb +0 -45
  293. data/lib/rubocop/ast/node/mixin/hash_element_node.rb +0 -125
  294. data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +0 -261
  295. data/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +0 -114
  296. data/lib/rubocop/ast/node/mixin/modifier_node.rb +0 -17
  297. data/lib/rubocop/ast/node/mixin/numeric_node.rb +0 -21
  298. data/lib/rubocop/ast/node/mixin/parameterized_node.rb +0 -61
  299. data/lib/rubocop/ast/node/mixin/predicate_operator_node.rb +0 -35
  300. data/lib/rubocop/ast/node/module_node.rb +0 -24
  301. data/lib/rubocop/ast/node/or_node.rb +0 -29
  302. data/lib/rubocop/ast/node/pair_node.rb +0 -63
  303. data/lib/rubocop/ast/node/range_node.rb +0 -18
  304. data/lib/rubocop/ast/node/regexp_node.rb +0 -33
  305. data/lib/rubocop/ast/node/resbody_node.rb +0 -24
  306. data/lib/rubocop/ast/node/retry_node.rb +0 -17
  307. data/lib/rubocop/ast/node/return_node.rb +0 -24
  308. data/lib/rubocop/ast/node/self_class_node.rb +0 -24
  309. data/lib/rubocop/ast/node/send_node.rb +0 -13
  310. data/lib/rubocop/ast/node/str_node.rb +0 -16
  311. data/lib/rubocop/ast/node/super_node.rb +0 -21
  312. data/lib/rubocop/ast/node/symbol_node.rb +0 -12
  313. data/lib/rubocop/ast/node/until_node.rb +0 -35
  314. data/lib/rubocop/ast/node/when_node.rb +0 -53
  315. data/lib/rubocop/ast/node/while_node.rb +0 -35
  316. data/lib/rubocop/ast/node/yield_node.rb +0 -21
  317. data/lib/rubocop/ast/sexp.rb +0 -16
  318. data/lib/rubocop/ast/traversal.rb +0 -200
  319. data/lib/rubocop/cop/lint/end_in_method.rb +0 -40
  320. data/lib/rubocop/formatter/disabled_lines_formatter.rb +0 -57
  321. data/lib/rubocop/node_pattern.rb +0 -887
  322. data/lib/rubocop/processed_source.rb +0 -216
  323. data/lib/rubocop/string_util.rb +0 -14
  324. data/lib/rubocop/token.rb +0 -114
@@ -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
@@ -48,11 +48,11 @@ module RuboCop
48
48
  if node.ternary?
49
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
@@ -116,8 +116,7 @@ module RuboCop
116
116
 
117
117
  return unless node.else_branch.range_type?
118
118
 
119
- corrector.insert_before(node.else_branch.loc.expression, '(')
120
- corrector.insert_after(node.else_branch.loc.expression, ')')
119
+ corrector.wrap(node.else_branch, '(', ')')
121
120
  end
122
121
  end
123
122
  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
 
@@ -27,7 +27,7 @@ module RuboCop
27
27
  EMPTY = ''
28
28
  PERCENT_Q = '%q'
29
29
  PERCENT_CAPITAL_Q = '%Q'
30
- STRING_INTERPOLATION_REGEXP = /#\{.+}/.freeze
30
+ STRING_INTERPOLATION_REGEXP = /#\{.+\}/.freeze
31
31
  ESCAPED_NON_BACKSLASH = /\\[^\\]/.freeze
32
32
 
33
33
  def on_dstr(node)
@@ -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
@@ -0,0 +1,89 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Style
6
+ # This cop checks for unnecessary single-element Regexp character classes.
7
+ #
8
+ # @example
9
+ #
10
+ # # bad
11
+ # r = /[x]/
12
+ #
13
+ # # good
14
+ # r = /x/
15
+ #
16
+ # # bad
17
+ # r = /[\s]/
18
+ #
19
+ # # good
20
+ # r = /\s/
21
+ #
22
+ # # good
23
+ # r = /[ab]/
24
+ class RedundantRegexpCharacterClass < Cop
25
+ include MatchRange
26
+ include RegexpLiteralHelp
27
+
28
+ MSG_REDUNDANT_CHARACTER_CLASS = 'Redundant single-element character class, ' \
29
+ '`%<char_class>s` can be replaced with `%<element>s`.'
30
+
31
+ PATTERN = /
32
+ (
33
+ (?<!\\) # No \-prefix (i.e. not escaped)
34
+ \[ # Literal [
35
+ (?!\#\{) # Not (the start of) an interpolation
36
+ (?: # Either...
37
+ \\. | # Any escaped character
38
+ [^.*+?{}()|$] | # or one that doesn't require escaping outside the character class
39
+ \\[upP]\{[^}]+\} # or a unicode code-point or property
40
+ )
41
+ \] # Literal ]
42
+ )
43
+ /x.freeze
44
+
45
+ def on_regexp(node)
46
+ each_redundant_character_class(node) do |loc|
47
+ next if whitespace_in_free_space_mode?(node, loc)
48
+
49
+ add_offense(
50
+ node,
51
+ location: loc,
52
+ message: format(
53
+ MSG_REDUNDANT_CHARACTER_CLASS,
54
+ char_class: loc.source,
55
+ element: without_character_class(loc)
56
+ )
57
+ )
58
+ end
59
+ end
60
+
61
+ def autocorrect(node)
62
+ lambda do |corrector|
63
+ each_redundant_character_class(node) do |loc|
64
+ corrector.replace(loc, without_character_class(loc))
65
+ end
66
+ end
67
+ end
68
+
69
+ def each_redundant_character_class(node)
70
+ each_match_range(node.loc.expression, PATTERN) do |loc|
71
+ yield loc
72
+ end
73
+ end
74
+
75
+ private
76
+
77
+ def without_character_class(loc)
78
+ loc.source[1..-2]
79
+ end
80
+
81
+ def whitespace_in_free_space_mode?(node, loc)
82
+ return false unless freespace_mode_regexp?(node)
83
+
84
+ /\[\s\]/.match?(loc.source)
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,130 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Style
6
+ # This cop checks for redundant escapes inside Regexp literals.
7
+ #
8
+ # @example
9
+ # # bad
10
+ # %r{foo\/bar}
11
+ #
12
+ # # good
13
+ # %r{foo/bar}
14
+ #
15
+ # # good
16
+ # /foo\/bar/
17
+ #
18
+ # # good
19
+ # %r/foo\/bar/
20
+ #
21
+ # # bad
22
+ # /a\-b/
23
+ #
24
+ # # good
25
+ # /a-b/
26
+ #
27
+ # # bad
28
+ # /[\+\-]\d/
29
+ #
30
+ # # good
31
+ # /[+\-]\d/
32
+ class RedundantRegexpEscape < Cop
33
+ include RangeHelp
34
+ include RegexpLiteralHelp
35
+
36
+ MSG_REDUNDANT_ESCAPE = 'Redundant escape inside regexp literal'
37
+
38
+ ALLOWED_ALWAYS_ESCAPES = ' []^\\#'.chars.freeze
39
+ ALLOWED_WITHIN_CHAR_CLASS_METACHAR_ESCAPES = '-'.chars.freeze
40
+ ALLOWED_OUTSIDE_CHAR_CLASS_METACHAR_ESCAPES = '.*+?{}()|$'.chars.freeze
41
+
42
+ def on_regexp(node)
43
+ each_escape(node) do |char, index, within_character_class|
44
+ next if allowed_escape?(node, char, within_character_class)
45
+
46
+ add_offense(
47
+ node,
48
+ location: escape_range_at_index(node, index),
49
+ message: MSG_REDUNDANT_ESCAPE
50
+ )
51
+ end
52
+ end
53
+
54
+ def autocorrect(node)
55
+ lambda do |corrector|
56
+ each_escape(node) do |char, index, within_character_class|
57
+ next if allowed_escape?(node, char, within_character_class)
58
+
59
+ corrector.remove_leading(escape_range_at_index(node, index), 1)
60
+ end
61
+ end
62
+ end
63
+
64
+ private
65
+
66
+ def slash_literal?(node)
67
+ ['/', '%r/'].include?(node.loc.begin.source)
68
+ end
69
+
70
+ def allowed_escape?(node, char, within_character_class)
71
+ # Strictly speaking a few single-letter metachars are currently
72
+ # unnecessary to "escape", e.g. g, i, E, F, but enumerating them is
73
+ # rather difficult, and their behaviour could change over time with
74
+ # different versions of Ruby so that e.g. /\g/ != /g/
75
+ return true if /[[:alnum:]]/.match?(char)
76
+ return true if ALLOWED_ALWAYS_ESCAPES.include?(char)
77
+
78
+ if char == '/'
79
+ slash_literal?(node)
80
+ elsif within_character_class
81
+ ALLOWED_WITHIN_CHAR_CLASS_METACHAR_ESCAPES.include?(char)
82
+ else
83
+ ALLOWED_OUTSIDE_CHAR_CLASS_METACHAR_ESCAPES.include?(char)
84
+ end
85
+ end
86
+
87
+ def each_escape(node)
88
+ pattern_source(node).each_char.with_index.reduce(
89
+ [nil, false]
90
+ ) do |(previous, within_character_class), (current, index)|
91
+ if previous == '\\'
92
+ yield [current, index - 1, within_character_class]
93
+
94
+ [nil, within_character_class]
95
+ elsif previous == '[' && current != ':'
96
+ [current, true]
97
+ elsif previous != ':' && current == ']'
98
+ [current, false]
99
+ else
100
+ [current, within_character_class]
101
+ end
102
+ end
103
+ end
104
+
105
+ def escape_range_at_index(node, index)
106
+ regexp_begin = node.loc.begin.end_pos
107
+
108
+ start = regexp_begin + index
109
+
110
+ range_between(start, start + 2)
111
+ end
112
+
113
+ def pattern_source(node)
114
+ freespace_mode = freespace_mode_regexp?(node)
115
+
116
+ node.children.reject(&:regopt_type?).map do |child|
117
+ source = child.source
118
+
119
+ if freespace_mode
120
+ # Remove comments to avoid misleading results
121
+ source.sub(/(?<!\\)#.*/, '')
122
+ else
123
+ source
124
+ end
125
+ end.join
126
+ end
127
+ end
128
+ end
129
+ end
130
+ 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)