rubocop 0.81.0 → 0.85.1

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 (306) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +13 -17
  3. data/config/default.yml +141 -35
  4. data/lib/rubocop.rb +17 -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 +1 -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 +36 -21
  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/case_indentation.rb +3 -3
  36. data/lib/rubocop/cop/layout/class_structure.rb +19 -16
  37. data/lib/rubocop/cop/layout/condition_position.rb +12 -2
  38. data/lib/rubocop/cop/layout/dot_position.rb +1 -1
  39. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +2 -6
  40. data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +126 -0
  41. data/lib/rubocop/cop/layout/end_of_line.rb +2 -2
  42. data/lib/rubocop/cop/layout/first_argument_indentation.rb +1 -3
  43. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +14 -10
  44. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -1
  45. data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +1 -1
  46. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -3
  47. data/lib/rubocop/cop/layout/first_parameter_indentation.rb +2 -2
  48. data/lib/rubocop/cop/layout/hash_alignment.rb +6 -6
  49. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +5 -9
  50. data/lib/rubocop/cop/layout/heredoc_indentation.rb +21 -104
  51. data/lib/rubocop/cop/layout/{tab.rb → indentation_style.rb} +48 -6
  52. data/lib/rubocop/cop/layout/indentation_width.rb +1 -3
  53. data/lib/rubocop/cop/layout/leading_comment_space.rb +1 -1
  54. data/lib/rubocop/cop/layout/line_length.rb +23 -20
  55. data/lib/rubocop/cop/layout/multiline_block_layout.rb +1 -1
  56. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -3
  57. data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +13 -4
  58. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +3 -3
  59. data/lib/rubocop/cop/layout/space_around_keyword.rb +2 -2
  60. data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +131 -0
  61. data/lib/rubocop/cop/layout/space_around_operators.rb +19 -2
  62. data/lib/rubocop/cop/layout/space_before_comment.rb +1 -3
  63. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +1 -1
  64. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +1 -3
  65. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +2 -2
  66. data/lib/rubocop/cop/layout/space_inside_range_literal.rb +2 -2
  67. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +1 -3
  68. data/lib/rubocop/cop/layout/trailing_whitespace.rb +2 -2
  69. data/lib/rubocop/cop/lint/ambiguous_operator.rb +41 -0
  70. data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +14 -0
  71. data/lib/rubocop/cop/lint/boolean_symbol.rb +2 -2
  72. data/lib/rubocop/cop/lint/debugger.rb +1 -1
  73. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +137 -0
  74. data/lib/rubocop/cop/lint/duplicate_methods.rb +1 -5
  75. data/lib/rubocop/cop/lint/empty_when.rb +29 -6
  76. data/lib/rubocop/cop/lint/ensure_return.rb +19 -2
  77. data/lib/rubocop/cop/lint/erb_new_arguments.rb +1 -3
  78. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +33 -2
  79. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -1
  80. data/lib/rubocop/cop/lint/inherit_exception.rb +1 -1
  81. data/lib/rubocop/cop/lint/interpolation_check.rb +1 -1
  82. data/lib/rubocop/cop/lint/literal_as_condition.rb +10 -13
  83. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +1 -1
  84. data/lib/rubocop/cop/lint/loop.rb +1 -1
  85. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +69 -0
  86. data/lib/rubocop/cop/lint/multiple_comparison.rb +1 -1
  87. data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -1
  88. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +2 -2
  89. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +7 -7
  90. data/lib/rubocop/cop/lint/number_conversion.rb +1 -1
  91. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +33 -11
  92. data/lib/rubocop/cop/lint/percent_string_array.rb +2 -4
  93. data/lib/rubocop/cop/lint/raise_exception.rb +42 -6
  94. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +1 -6
  95. data/lib/rubocop/cop/lint/redundant_require_statement.rb +3 -3
  96. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +1 -1
  97. data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
  98. data/lib/rubocop/cop/lint/suppressed_exception.rb +11 -4
  99. data/lib/rubocop/cop/lint/syntax.rb +1 -3
  100. data/lib/rubocop/cop/lint/unified_integer.rb +0 -2
  101. data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
  102. data/lib/rubocop/cop/lint/uri_regexp.rb +4 -4
  103. data/lib/rubocop/cop/lint/useless_access_modifier.rb +13 -3
  104. data/lib/rubocop/cop/lint/useless_assignment.rb +3 -2
  105. data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +6 -1
  106. data/lib/rubocop/cop/lint/useless_setter_call.rb +1 -1
  107. data/lib/rubocop/cop/migration/department_name.rb +7 -7
  108. data/lib/rubocop/cop/mixin/alignment.rb +1 -3
  109. data/lib/rubocop/cop/mixin/array_min_size.rb +1 -3
  110. data/lib/rubocop/cop/mixin/check_line_breakable.rb +3 -9
  111. data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +1 -3
  112. data/lib/rubocop/cop/mixin/configurable_formatting.rb +2 -4
  113. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +10 -1
  114. data/lib/rubocop/cop/mixin/hash_transform_method.rb +9 -2
  115. data/lib/rubocop/cop/mixin/ignored_pattern.rb +1 -1
  116. data/lib/rubocop/cop/mixin/line_length_help.rb +3 -2
  117. data/lib/rubocop/cop/mixin/parser_diagnostic.rb +1 -1
  118. data/lib/rubocop/cop/mixin/regexp_literal_help.rb +16 -0
  119. data/lib/rubocop/cop/mixin/statement_modifier.rb +7 -22
  120. data/lib/rubocop/cop/mixin/target_ruby_version.rb +5 -1
  121. data/lib/rubocop/cop/mixin/trailing_comma.rb +2 -4
  122. data/lib/rubocop/cop/mixin/uncommunicative_name.rb +1 -1
  123. data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +11 -1
  124. data/lib/rubocop/cop/naming/constant_name.rb +2 -1
  125. data/lib/rubocop/cop/naming/file_name.rb +27 -14
  126. data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +1 -1
  127. data/lib/rubocop/cop/naming/method_name.rb +1 -5
  128. data/lib/rubocop/cop/naming/predicate_name.rb +1 -1
  129. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +1 -1
  130. data/lib/rubocop/cop/registry.rb +74 -14
  131. data/lib/rubocop/cop/severity.rb +1 -3
  132. data/lib/rubocop/cop/style/alias.rb +4 -4
  133. data/lib/rubocop/cop/style/and_or.rb +7 -8
  134. data/lib/rubocop/cop/style/array_join.rb +2 -2
  135. data/lib/rubocop/cop/style/attr.rb +1 -3
  136. data/lib/rubocop/cop/style/bare_percent_literals.rb +1 -1
  137. data/lib/rubocop/cop/style/block_delimiters.rb +2 -8
  138. data/lib/rubocop/cop/style/case_equality.rb +24 -1
  139. data/lib/rubocop/cop/style/character_literal.rb +2 -2
  140. data/lib/rubocop/cop/style/conditional_assignment.rb +9 -11
  141. data/lib/rubocop/cop/style/copyright.rb +3 -3
  142. data/lib/rubocop/cop/style/dir.rb +1 -1
  143. data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +49 -0
  144. data/lib/rubocop/cop/style/double_cop_disable_directive.rb +1 -1
  145. data/lib/rubocop/cop/style/double_negation.rb +41 -4
  146. data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -1
  147. data/lib/rubocop/cop/style/each_with_object.rb +3 -3
  148. data/lib/rubocop/cop/style/empty_literal.rb +1 -3
  149. data/lib/rubocop/cop/style/empty_method.rb +2 -6
  150. data/lib/rubocop/cop/style/even_odd.rb +1 -1
  151. data/lib/rubocop/cop/style/expand_path_arguments.rb +3 -3
  152. data/lib/rubocop/cop/style/exponential_notation.rb +119 -0
  153. data/lib/rubocop/cop/style/format_string.rb +2 -2
  154. data/lib/rubocop/cop/style/format_string_token.rb +2 -3
  155. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -6
  156. data/lib/rubocop/cop/style/guard_clause.rb +25 -2
  157. data/lib/rubocop/cop/style/hash_each_methods.rb +4 -4
  158. data/lib/rubocop/cop/style/hash_syntax.rb +19 -12
  159. data/lib/rubocop/cop/style/hash_transform_values.rb +0 -3
  160. data/lib/rubocop/cop/style/if_unless_modifier.rb +23 -3
  161. data/lib/rubocop/cop/style/if_with_semicolon.rb +16 -0
  162. data/lib/rubocop/cop/style/inline_comment.rb +1 -1
  163. data/lib/rubocop/cop/style/lambda.rb +2 -2
  164. data/lib/rubocop/cop/style/lambda_call.rb +1 -21
  165. data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +1 -3
  166. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -3
  167. data/lib/rubocop/cop/style/mixin_grouping.rb +1 -1
  168. data/lib/rubocop/cop/style/module_function.rb +2 -2
  169. data/lib/rubocop/cop/style/multiline_if_modifier.rb +1 -1
  170. data/lib/rubocop/cop/style/multiline_memoization.rb +1 -1
  171. data/lib/rubocop/cop/style/multiline_when_then.rb +16 -1
  172. data/lib/rubocop/cop/style/mutable_constant.rb +2 -4
  173. data/lib/rubocop/cop/style/negated_if.rb +3 -3
  174. data/lib/rubocop/cop/style/negated_unless.rb +3 -3
  175. data/lib/rubocop/cop/style/next.rb +2 -2
  176. data/lib/rubocop/cop/style/nil_comparison.rb +1 -1
  177. data/lib/rubocop/cop/style/non_nil_check.rb +5 -5
  178. data/lib/rubocop/cop/style/not.rb +1 -1
  179. data/lib/rubocop/cop/style/numeric_literal_prefix.rb +1 -1
  180. data/lib/rubocop/cop/style/numeric_literals.rb +1 -1
  181. data/lib/rubocop/cop/style/numeric_predicate.rb +1 -1
  182. data/lib/rubocop/cop/style/one_line_conditional.rb +3 -7
  183. data/lib/rubocop/cop/style/optional_arguments.rb +1 -1
  184. data/lib/rubocop/cop/style/or_assignment.rb +1 -1
  185. data/lib/rubocop/cop/style/percent_q_literals.rb +1 -1
  186. data/lib/rubocop/cop/style/perl_backrefs.rb +2 -2
  187. data/lib/rubocop/cop/style/proc.rb +1 -1
  188. data/lib/rubocop/cop/style/raise_args.rb +1 -1
  189. data/lib/rubocop/cop/style/random_with_offset.rb +3 -3
  190. data/lib/rubocop/cop/style/redundant_condition.rb +3 -4
  191. data/lib/rubocop/cop/style/redundant_conditional.rb +5 -4
  192. data/lib/rubocop/cop/style/redundant_exception.rb +3 -3
  193. data/lib/rubocop/cop/style/redundant_interpolation.rb +2 -2
  194. data/lib/rubocop/cop/style/redundant_parentheses.rb +2 -6
  195. data/lib/rubocop/cop/style/redundant_percent_q.rb +3 -3
  196. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +89 -0
  197. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +130 -0
  198. data/lib/rubocop/cop/style/redundant_return.rb +5 -7
  199. data/lib/rubocop/cop/style/redundant_self.rb +1 -1
  200. data/lib/rubocop/cop/style/rescue_modifier.rb +1 -1
  201. data/lib/rubocop/cop/style/return_nil.rb +1 -1
  202. data/lib/rubocop/cop/style/safe_navigation.rb +3 -7
  203. data/lib/rubocop/cop/style/self_assignment.rb +1 -1
  204. data/lib/rubocop/cop/style/slicing_with_range.rb +39 -0
  205. data/lib/rubocop/cop/style/special_global_vars.rb +3 -7
  206. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -4
  207. data/lib/rubocop/cop/style/string_hash_keys.rb +1 -1
  208. data/lib/rubocop/cop/style/symbol_array.rb +2 -2
  209. data/lib/rubocop/cop/style/symbol_literal.rb +2 -2
  210. data/lib/rubocop/cop/style/ternary_parentheses.rb +2 -5
  211. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +4 -3
  212. data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +3 -3
  213. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +16 -13
  214. data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +3 -3
  215. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +1 -3
  216. data/lib/rubocop/cop/style/trivial_accessors.rb +1 -1
  217. data/lib/rubocop/cop/style/unless_else.rb +1 -1
  218. data/lib/rubocop/cop/style/unpack_first.rb +0 -4
  219. data/lib/rubocop/cop/style/variable_interpolation.rb +1 -1
  220. data/lib/rubocop/cop/style/when_then.rb +1 -1
  221. data/lib/rubocop/cop/style/while_until_modifier.rb +1 -1
  222. data/lib/rubocop/cop/style/word_array.rb +1 -1
  223. data/lib/rubocop/cop/style/zero_length_predicate.rb +1 -1
  224. data/lib/rubocop/cop/team.rb +69 -25
  225. data/lib/rubocop/cop/util.rb +25 -1
  226. data/lib/rubocop/cop/utils/format_string.rb +18 -0
  227. data/lib/rubocop/cop/variable_force.rb +3 -9
  228. data/lib/rubocop/cop/variable_force/assignment.rb +1 -0
  229. data/lib/rubocop/cop/variable_force/branch.rb +1 -3
  230. data/lib/rubocop/cop/variable_force/scope.rb +1 -0
  231. data/lib/rubocop/cop/variable_force/variable.rb +3 -6
  232. data/lib/rubocop/ext/processed_source.rb +18 -0
  233. data/lib/rubocop/formatter/base_formatter.rb +0 -4
  234. data/lib/rubocop/formatter/disabled_config_formatter.rb +4 -12
  235. data/lib/rubocop/formatter/formatter_set.rb +1 -4
  236. data/lib/rubocop/formatter/junit_formatter.rb +14 -4
  237. data/lib/rubocop/formatter/pacman_formatter.rb +1 -1
  238. data/lib/rubocop/magic_comment.rb +1 -1
  239. data/lib/rubocop/name_similarity.rb +12 -9
  240. data/lib/rubocop/options.rb +33 -12
  241. data/lib/rubocop/remote_config.rb +1 -3
  242. data/lib/rubocop/result_cache.rb +5 -7
  243. data/lib/rubocop/rspec/cop_helper.rb +3 -26
  244. data/lib/rubocop/rspec/expect_offense.rb +49 -16
  245. data/lib/rubocop/rspec/shared_contexts.rb +54 -20
  246. data/lib/rubocop/runner.rb +21 -14
  247. data/lib/rubocop/target_finder.rb +7 -7
  248. data/lib/rubocop/target_ruby.rb +5 -2
  249. data/lib/rubocop/version.rb +5 -3
  250. metadata +47 -77
  251. data/lib/rubocop/ast/builder.rb +0 -85
  252. data/lib/rubocop/ast/node.rb +0 -637
  253. data/lib/rubocop/ast/node/alias_node.rb +0 -24
  254. data/lib/rubocop/ast/node/and_node.rb +0 -29
  255. data/lib/rubocop/ast/node/args_node.rb +0 -29
  256. data/lib/rubocop/ast/node/array_node.rb +0 -57
  257. data/lib/rubocop/ast/node/block_node.rb +0 -121
  258. data/lib/rubocop/ast/node/break_node.rb +0 -17
  259. data/lib/rubocop/ast/node/case_match_node.rb +0 -56
  260. data/lib/rubocop/ast/node/case_node.rb +0 -56
  261. data/lib/rubocop/ast/node/class_node.rb +0 -31
  262. data/lib/rubocop/ast/node/def_node.rb +0 -82
  263. data/lib/rubocop/ast/node/defined_node.rb +0 -17
  264. data/lib/rubocop/ast/node/ensure_node.rb +0 -17
  265. data/lib/rubocop/ast/node/float_node.rb +0 -12
  266. data/lib/rubocop/ast/node/for_node.rb +0 -53
  267. data/lib/rubocop/ast/node/forward_args_node.rb +0 -18
  268. data/lib/rubocop/ast/node/hash_node.rb +0 -109
  269. data/lib/rubocop/ast/node/if_node.rb +0 -175
  270. data/lib/rubocop/ast/node/int_node.rb +0 -12
  271. data/lib/rubocop/ast/node/keyword_splat_node.rb +0 -45
  272. data/lib/rubocop/ast/node/mixin/basic_literal_node.rb +0 -16
  273. data/lib/rubocop/ast/node/mixin/binary_operator_node.rb +0 -43
  274. data/lib/rubocop/ast/node/mixin/collection_node.rb +0 -15
  275. data/lib/rubocop/ast/node/mixin/conditional_node.rb +0 -45
  276. data/lib/rubocop/ast/node/mixin/hash_element_node.rb +0 -125
  277. data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +0 -261
  278. data/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +0 -114
  279. data/lib/rubocop/ast/node/mixin/modifier_node.rb +0 -17
  280. data/lib/rubocop/ast/node/mixin/numeric_node.rb +0 -21
  281. data/lib/rubocop/ast/node/mixin/parameterized_node.rb +0 -61
  282. data/lib/rubocop/ast/node/mixin/predicate_operator_node.rb +0 -35
  283. data/lib/rubocop/ast/node/module_node.rb +0 -24
  284. data/lib/rubocop/ast/node/or_node.rb +0 -29
  285. data/lib/rubocop/ast/node/pair_node.rb +0 -63
  286. data/lib/rubocop/ast/node/range_node.rb +0 -18
  287. data/lib/rubocop/ast/node/regexp_node.rb +0 -33
  288. data/lib/rubocop/ast/node/resbody_node.rb +0 -24
  289. data/lib/rubocop/ast/node/retry_node.rb +0 -17
  290. data/lib/rubocop/ast/node/return_node.rb +0 -24
  291. data/lib/rubocop/ast/node/self_class_node.rb +0 -24
  292. data/lib/rubocop/ast/node/send_node.rb +0 -13
  293. data/lib/rubocop/ast/node/str_node.rb +0 -16
  294. data/lib/rubocop/ast/node/super_node.rb +0 -21
  295. data/lib/rubocop/ast/node/symbol_node.rb +0 -12
  296. data/lib/rubocop/ast/node/until_node.rb +0 -35
  297. data/lib/rubocop/ast/node/when_node.rb +0 -53
  298. data/lib/rubocop/ast/node/while_node.rb +0 -35
  299. data/lib/rubocop/ast/node/yield_node.rb +0 -21
  300. data/lib/rubocop/ast/sexp.rb +0 -16
  301. data/lib/rubocop/ast/traversal.rb +0 -202
  302. data/lib/rubocop/formatter/disabled_lines_formatter.rb +0 -57
  303. data/lib/rubocop/node_pattern.rb +0 -887
  304. data/lib/rubocop/processed_source.rb +0 -216
  305. data/lib/rubocop/string_util.rb +0 -14
  306. data/lib/rubocop/token.rb +0 -114
@@ -26,7 +26,6 @@ module RuboCop
26
26
  # # good
27
27
  # x += 1
28
28
  class RedundantCopDisableDirective < Cop
29
- include NameSimilarity
30
29
  include RangeHelp
31
30
 
32
31
  COP_NAME = 'Lint/RedundantCopDisableDirective'
@@ -235,7 +234,7 @@ module RuboCop
235
234
  elsif all_cop_names.include?(cop)
236
235
  "`#{cop}`"
237
236
  else
238
- similar = find_similar_name(cop, [])
237
+ similar = NameSimilarity.find_similar_name(cop, all_cop_names)
239
238
  if similar
240
239
  "`#{cop}` (did you mean `#{similar}`?)"
241
240
  else
@@ -244,10 +243,6 @@ module RuboCop
244
243
  end
245
244
  end
246
245
 
247
- def collect_variable_like_names(scope)
248
- all_cop_names.each { |name| scope << name }
249
- end
250
-
251
246
  def all_cop_names
252
247
  @all_cop_names ||= Cop.registry.names
253
248
  end
@@ -8,9 +8,9 @@ module RuboCop
8
8
  # The following features are unnecessary `require` statement because
9
9
  # they are already loaded.
10
10
  #
11
- # ruby -ve 'p $LOADED_FEATURES.reject { |feature| %r|/| =~ feature }'
12
- # ruby 2.2.8p477 (2017-09-14 revision 59906) [x86_64-darwin13]
13
- # ["enumerator.so", "rational.so", "complex.so", "thread.rb"]
11
+ # ruby -ve 'p $LOADED_FEATURES.reject { |feature| %r|/| =~ feature }'
12
+ # ruby 2.2.8p477 (2017-09-14 revision 59906) [x86_64-darwin13]
13
+ # ["enumerator.so", "rational.so", "complex.so", "thread.rb"]
14
14
  #
15
15
  # This cop targets Ruby 2.2 or higher containing these 4 features.
16
16
  #
@@ -38,7 +38,7 @@ module RuboCop
38
38
  lambda do |corrector|
39
39
  receiver = node.receiver
40
40
  corrector.replace(
41
- node.source_range,
41
+ node,
42
42
  if receiver
43
43
  receiver.source
44
44
  else
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Lint
6
- # This cop checks for *rescue* blocks targeting the Exception class.
6
+ # This cop checks for `rescue` blocks targeting the Exception class.
7
7
  #
8
8
  # @example
9
9
  #
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Lint
6
- # This cop checks for *rescue* blocks with no body.
6
+ # This cop checks for `rescue` blocks with no body.
7
7
  #
8
8
  # @example
9
9
  #
@@ -69,15 +69,22 @@ module RuboCop
69
69
 
70
70
  def on_resbody(node)
71
71
  return if node.body
72
- return if cop_config['AllowComments'] && comment_lines?(node)
72
+ return if cop_config['AllowComments'] && comment_between_rescue_and_end?(node)
73
73
 
74
74
  add_offense(node)
75
75
  end
76
76
 
77
77
  private
78
78
 
79
- def comment_lines?(node)
80
- processed_source[line_range(node)].any? { |line| comment_line?(line) }
79
+ def comment_between_rescue_and_end?(node)
80
+ end_line = nil
81
+ node.each_ancestor(:kwbegin, :def, :defs, :block) do |ancestor|
82
+ end_line = ancestor.loc.end.line
83
+ break
84
+ end
85
+ return false unless end_line
86
+
87
+ processed_source[node.first_line...end_line].any? { |line| comment_line?(line) }
81
88
  end
82
89
  end
83
90
  end
@@ -16,9 +16,7 @@ module RuboCop
16
16
  config, options)
17
17
  cop = new(config, options)
18
18
 
19
- if processed_source.parser_error
20
- cop.add_offense_from_error(processed_source.parser_error)
21
- end
19
+ cop.add_offense_from_error(processed_source.parser_error) if processed_source.parser_error
22
20
 
23
21
  processed_source.diagnostics.each do |diagnostic|
24
22
  cop.add_offense_from_diagnostic(diagnostic,
@@ -33,8 +33,6 @@ module RuboCop
33
33
  end
34
34
 
35
35
  def autocorrect(node)
36
- return false if target_ruby_version <= 2.3
37
-
38
36
  lambda do |corrector|
39
37
  corrector.replace(node.loc.name, 'Integer')
40
38
  end
@@ -5,7 +5,7 @@ module RuboCop
5
5
  module Lint
6
6
  # This cop checks for unreachable code.
7
7
  # The check are based on the presence of flow of control
8
- # statement in non-final position in *begin*(implicit) blocks.
8
+ # statement in non-final position in `begin` (implicit) blocks.
9
9
  #
10
10
  # @example
11
11
  #
@@ -21,7 +21,7 @@ module RuboCop
21
21
  def_node_matcher :uri_regexp_with_argument?, <<~PATTERN
22
22
  (send
23
23
  (const ${nil? cbase} :URI) :regexp
24
- (str $_))
24
+ ${(str _) (array ...)})
25
25
  PATTERN
26
26
 
27
27
  def_node_matcher :uri_regexp_without_argument?, <<~PATTERN
@@ -32,7 +32,7 @@ module RuboCop
32
32
  def on_send(node)
33
33
  uri_regexp_with_argument?(node) do |double_colon, arg|
34
34
  register_offense(
35
- node, top_level: double_colon ? '::' : '', arg: "('#{arg}')"
35
+ node, top_level: double_colon ? '::' : '', arg: "(#{arg.source})"
36
36
  )
37
37
  end
38
38
 
@@ -51,10 +51,10 @@ module RuboCop
51
51
  double_colon, arg = captured_values
52
52
 
53
53
  top_level = double_colon ? '::' : ''
54
- argument = arg ? "('#{arg}')" : ''
54
+ argument = arg ? "(#{arg.source})" : ''
55
55
 
56
56
  corrector.replace(
57
- node.loc.expression,
57
+ node,
58
58
  "#{top_level}URI::DEFAULT_PARSER.make_regexp#{argument}"
59
59
  )
60
60
  end
@@ -125,6 +125,8 @@ module RuboCop
125
125
  # delegate :method_a, to: :method_b
126
126
  # end
127
127
  class UselessAccessModifier < Cop
128
+ include RangeHelp
129
+
128
130
  MSG = 'Useless `%<current>s` access modifier.'
129
131
 
130
132
  def on_class(node)
@@ -145,6 +147,16 @@ module RuboCop
145
147
  check_node(node.children[1]) # singleton class body
146
148
  end
147
149
 
150
+ def autocorrect(node)
151
+ lambda do |corrector|
152
+ range = range_by_whole_lines(
153
+ node.source_range, include_final_newline: true
154
+ )
155
+
156
+ corrector.remove(range)
157
+ end
158
+ end
159
+
148
160
  private
149
161
 
150
162
  def_node_matcher :static_method_definition?, <<~PATTERN
@@ -215,9 +227,7 @@ module RuboCop
215
227
  add_offense(node, message: format(MSG, current: cur_vis))
216
228
  else
217
229
  # was the previous modifier never applied to any defs?
218
- if unused
219
- add_offense(unused, message: format(MSG, current: cur_vis))
220
- end
230
+ add_offense(unused, message: format(MSG, current: cur_vis)) if unused
221
231
  # once we have already warned about a certain modifier, don't
222
232
  # warn again even if it is never applied to any method defs
223
233
  unused = node
@@ -31,7 +31,6 @@ module RuboCop
31
31
  # do_something(some_var)
32
32
  # end
33
33
  class UselessAssignment < Cop
34
- include NameSimilarity
35
34
  MSG = 'Useless assignment to variable - `%<variable>s`.'
36
35
 
37
36
  def join_force?(force_class)
@@ -94,7 +93,9 @@ module RuboCop
94
93
  end
95
94
 
96
95
  def similar_name_message(variable)
97
- similar_name = find_similar_name(variable.name, variable.scope)
96
+ variable_like_names = collect_variable_like_names(variable.scope)
97
+ similar_name = NameSimilarity.find_similar_name(variable.name,
98
+ variable_like_names)
98
99
  " Did you mean `#{similar_name}`?" if similar_name
99
100
  end
100
101
 
@@ -5,7 +5,7 @@ module RuboCop
5
5
  module Lint
6
6
  # This cop checks for useless `else` in `begin..end` without `rescue`.
7
7
  #
8
- # Note: This syntax is no longer valid on Ruby 2.6 or higher and
8
+ # NOTE: This syntax is no longer valid on Ruby 2.6 or higher and
9
9
  # this cop is going to be removed at some point the future.
10
10
  #
11
11
  # @example
@@ -40,6 +40,11 @@ module RuboCop
40
40
  diagnostic.reason == :useless_else
41
41
  end
42
42
 
43
+ def find_offense_node_by(diagnostic)
44
+ # TODO: When implementing auto-correction, this method should return
45
+ # an offense node passed as first argument of `add_offense` method.
46
+ end
47
+
43
48
  def alternative_message(_diagnostic)
44
49
  MSG
45
50
  end
@@ -6,7 +6,7 @@ module RuboCop
6
6
  # This cop checks for setter call to local variable as the final
7
7
  # expression of a function definition.
8
8
  #
9
- # Note: There are edge cases in which the local variable references a
9
+ # NOTE: There are edge cases in which the local variable references a
10
10
  # value that is also accessible outside the local scope. This is not
11
11
  # detected by the cop, and it can yield a false positive.
12
12
  #
@@ -24,15 +24,15 @@ module RuboCop
24
24
 
25
25
  offset = Regexp.last_match(1).length
26
26
 
27
- Regexp.last_match(4).scan(/[^,]+|[\W]+/) do |name|
27
+ Regexp.last_match(4).scan(/[^,]+|\W+/) do |name|
28
28
  trimmed_name = name.strip
29
29
 
30
- break if contain_plain_comment?(trimmed_name)
31
-
32
30
  unless valid_content_token?(trimmed_name)
33
31
  check_cop_name(trimmed_name, comment, offset)
34
32
  end
35
33
 
34
+ break if contain_unexpected_character_for_department_name?(name)
35
+
36
36
  offset += name.length
37
37
  end
38
38
  end
@@ -64,12 +64,12 @@ module RuboCop
64
64
  end
65
65
 
66
66
  def valid_content_token?(content_token)
67
- !/\W+/.match(content_token).nil? ||
68
- !DISABLING_COPS_CONTENT_TOKEN.match(content_token).nil?
67
+ /\W+/.match?(content_token) ||
68
+ DISABLING_COPS_CONTENT_TOKEN.match?(content_token)
69
69
  end
70
70
 
71
- def contain_plain_comment?(name)
72
- name == '#'
71
+ def contain_unexpected_character_for_department_name?(name)
72
+ name.match?(%r{[^A-z/, ]})
73
73
  end
74
74
 
75
75
  def qualified_legacy_cop_name(cop_name)
@@ -25,9 +25,7 @@ module RuboCop
25
25
  end
26
26
 
27
27
  def check_alignment(items, base_column = nil)
28
- unless items.empty?
29
- base_column ||= display_column(items.first.source_range)
30
- end
28
+ base_column ||= display_column(items.first.source_range) unless items.empty?
31
29
 
32
30
  each_bad_alignment(items, base_column) do |current|
33
31
  expr = current.source_range
@@ -48,9 +48,7 @@ module RuboCop
48
48
  def smallest_percent_size(style, ary_size)
49
49
  @smallest_percent ||= Float::INFINITY
50
50
 
51
- if style == :percent && ary_size < @smallest_percent
52
- @smallest_percent = ary_size
53
- end
51
+ @smallest_percent = ary_size if style == :percent && ary_size < @smallest_percent
54
52
 
55
53
  @smallest_percent
56
54
  end
@@ -88,9 +88,7 @@ module RuboCop
88
88
  # or redundant edits, we only mark one offense at a time.
89
89
  return true if contained_by_breakable_collection_on_same_line?(node)
90
90
 
91
- if contained_by_multiline_collection_that_could_be_broken_up?(node)
92
- return true
93
- end
91
+ return true if contained_by_multiline_collection_that_could_be_broken_up?(node)
94
92
 
95
93
  false
96
94
  end
@@ -141,9 +139,7 @@ module RuboCop
141
139
  next unless ancestor.send_type?
142
140
 
143
141
  args = process_args(ancestor.arguments)
144
- if breakable_collection?(ancestor, args)
145
- return children_could_be_broken_up?(args)
146
- end
142
+ return children_could_be_broken_up?(args) if breakable_collection?(ancestor, args)
147
143
  end
148
144
 
149
145
  false
@@ -175,9 +171,7 @@ module RuboCop
175
171
  # ...then each key/value pair is treated as a method 'argument'
176
172
  # when determining where line breaks should appear.
177
173
  if (last_arg = args.last)
178
- if last_arg.hash_type? && !last_arg.braces?
179
- args = args.concat(args.pop.children)
180
- end
174
+ args = args.concat(args.pop.children) if last_arg.hash_type? && !last_arg.braces?
181
175
  end
182
176
  args
183
177
  end
@@ -67,9 +67,7 @@ module RuboCop
67
67
  def style
68
68
  @style ||= begin
69
69
  s = cop_config[style_parameter_name].to_sym
70
- unless supported_styles.include?(s)
71
- raise "Unknown style #{s} selected!"
72
- end
70
+ raise "Unknown style #{s} selected!" unless supported_styles.include?(s)
73
71
 
74
72
  s
75
73
  end
@@ -18,14 +18,12 @@ module RuboCop
18
18
 
19
19
  def report_opposing_styles(node, name)
20
20
  alternative_styles.each do |alternative|
21
- if valid_name?(node, name, alternative)
22
- return unexpected_style_detected(alternative)
23
- end
21
+ return unexpected_style_detected(alternative) if valid_name?(node, name, alternative)
24
22
  end
25
23
  end
26
24
 
27
25
  def valid_name?(node, name, given_style = style)
28
- name.match(self.class::FORMATS.fetch(given_style)) ||
26
+ name.match?(self.class::FORMATS.fetch(given_style)) ||
29
27
  class_emitter_method?(node, name)
30
28
  end
31
29
 
@@ -46,7 +46,16 @@ module RuboCop
46
46
  end
47
47
 
48
48
  def leading_comment_lines
49
- processed_source.comments.first(3).map(&:text)
49
+ first_non_comment_token = processed_source.tokens.find do |token|
50
+ !token.comment?
51
+ end
52
+
53
+ if first_non_comment_token
54
+ # `line` is 1-indexed so we need to subtract 1 to get the array index
55
+ processed_source.lines[0...first_non_comment_token.line - 1]
56
+ else
57
+ processed_source.lines
58
+ end
50
59
  end
51
60
  end
52
61
  end
@@ -132,7 +132,14 @@ module RuboCop
132
132
  end
133
133
 
134
134
  def self.from_map_to_h(node, match)
135
- strip_trailing_chars = node.parent&.block_type? ? 0 : '.to_h'.length
135
+ strip_trailing_chars = 0
136
+
137
+ unless node.parent&.block_type?
138
+ map_range = node.children.first.source_range
139
+ node_range = node.source_range
140
+ strip_trailing_chars = node_range.end_pos - map_range.end_pos
141
+ end
142
+
136
143
  new(match, node.children.first, 0, strip_trailing_chars)
137
144
  end
138
145
 
@@ -161,7 +168,7 @@ module RuboCop
161
168
 
162
169
  def set_new_body_expression(transforming_body_expr, corrector)
163
170
  corrector.replace(
164
- block_node.body.loc.expression,
171
+ block_node.body,
165
172
  transforming_body_expr.loc.expression.source
166
173
  )
167
174
  end
@@ -18,7 +18,7 @@ module RuboCop
18
18
  end
19
19
 
20
20
  def matches_ignored_pattern?(line)
21
- ignored_patterns.any? { |pattern| Regexp.new(pattern).match(line) }
21
+ ignored_patterns.any? { |pattern| Regexp.new(pattern).match?(line) }
22
22
  end
23
23
 
24
24
  def ignored_patterns
@@ -18,7 +18,7 @@ module RuboCop
18
18
 
19
19
  return false unless comment
20
20
 
21
- comment.text.match(CommentConfig::COMMENT_DIRECTIVE_REGEXP)
21
+ comment.text.match?(CommentConfig::COMMENT_DIRECTIVE_REGEXP)
22
22
  end
23
23
 
24
24
  def allow_uri?
@@ -63,7 +63,8 @@ module RuboCop
63
63
  end
64
64
 
65
65
  def tab_indentation_width
66
- config.for_cop('Layout/Tab')['IndentationWidth']
66
+ config.for_cop('Layout/IndentationStyle')['IndentationWidth'] ||
67
+ config.for_cop('Layout/IndentationWidth')['Width']
67
68
  end
68
69
 
69
70
  def uri_regexp
@@ -26,7 +26,7 @@ module RuboCop
26
26
  d.message.capitalize
27
27
  end
28
28
 
29
- add_offense(nil,
29
+ add_offense(find_offense_node_by(d),
30
30
  location: d.location,
31
31
  message: message,
32
32
  severity: d.level)