rubocop 0.42.0 → 0.52.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 (627) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/README.md +106 -20
  4. data/assets/output.html.erb +21 -10
  5. data/bin/rubocop +1 -2
  6. data/config/default.yml +914 -483
  7. data/config/disabled.yml +61 -41
  8. data/config/enabled.yml +1396 -878
  9. data/lib/rubocop/ast/builder.rb +72 -0
  10. data/lib/rubocop/ast/node/and_node.rb +37 -0
  11. data/lib/rubocop/ast/node/args_node.rb +29 -0
  12. data/lib/rubocop/ast/node/array_node.rb +57 -0
  13. data/lib/rubocop/ast/node/block_node.rb +116 -0
  14. data/lib/rubocop/ast/node/case_node.rb +64 -0
  15. data/lib/rubocop/ast/node/def_node.rb +71 -0
  16. data/lib/rubocop/ast/node/ensure_node.rb +25 -0
  17. data/lib/rubocop/ast/node/for_node.rb +61 -0
  18. data/lib/rubocop/ast/node/hash_node.rb +109 -0
  19. data/lib/rubocop/ast/node/if_node.rb +146 -0
  20. data/lib/rubocop/ast/node/keyword_splat_node.rb +45 -0
  21. data/lib/rubocop/ast/node/mixin/basic_literal_node.rb +16 -0
  22. data/lib/rubocop/ast/node/mixin/binary_operator_node.rb +23 -0
  23. data/lib/rubocop/ast/node/mixin/collection_node.rb +15 -0
  24. data/lib/rubocop/ast/node/mixin/conditional_node.rb +45 -0
  25. data/lib/rubocop/ast/node/mixin/hash_element_node.rb +125 -0
  26. data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +174 -0
  27. data/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +89 -0
  28. data/lib/rubocop/ast/node/mixin/modifier_node.rb +17 -0
  29. data/lib/rubocop/ast/node/mixin/parameterized_node.rb +61 -0
  30. data/lib/rubocop/ast/node/mixin/predicate_operator_node.rb +35 -0
  31. data/lib/rubocop/ast/node/or_node.rb +37 -0
  32. data/lib/rubocop/ast/node/pair_node.rb +64 -0
  33. data/lib/rubocop/ast/node/regexp_node.rb +35 -0
  34. data/lib/rubocop/ast/node/resbody_node.rb +25 -0
  35. data/lib/rubocop/ast/node/send_node.rb +45 -0
  36. data/lib/rubocop/ast/node/str_node.rb +14 -0
  37. data/lib/rubocop/ast/node/super_node.rb +21 -0
  38. data/lib/rubocop/ast/node/symbol_node.rb +20 -0
  39. data/lib/rubocop/ast/node/until_node.rb +43 -0
  40. data/lib/rubocop/ast/node/when_node.rb +61 -0
  41. data/lib/rubocop/ast/node/while_node.rb +43 -0
  42. data/lib/rubocop/ast/node/yield_node.rb +21 -0
  43. data/lib/rubocop/ast/node.rb +634 -0
  44. data/lib/rubocop/ast/sexp.rb +16 -0
  45. data/lib/rubocop/{ast_node → ast}/traversal.rb +23 -24
  46. data/lib/rubocop/cached_data.rb +11 -31
  47. data/lib/rubocop/cli.rb +116 -33
  48. data/lib/rubocop/comment_config.rb +4 -10
  49. data/lib/rubocop/config.rb +355 -102
  50. data/lib/rubocop/config_loader.rb +93 -78
  51. data/lib/rubocop/config_loader_resolver.rb +106 -7
  52. data/lib/rubocop/config_store.rb +4 -1
  53. data/lib/rubocop/cop/autocorrect_logic.rb +1 -2
  54. data/lib/rubocop/cop/badge.rb +73 -0
  55. data/lib/rubocop/cop/bundler/duplicated_gem.rb +71 -0
  56. data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +67 -0
  57. data/lib/rubocop/cop/bundler/ordered_gems.rb +71 -0
  58. data/lib/rubocop/cop/commissioner.rb +27 -10
  59. data/lib/rubocop/cop/cop.rb +62 -107
  60. data/lib/rubocop/cop/corrector.rb +0 -1
  61. data/lib/rubocop/cop/correctors/alignment_corrector.rb +121 -0
  62. data/lib/rubocop/cop/correctors/condition_corrector.rb +28 -0
  63. data/lib/rubocop/cop/correctors/empty_line_corrector.rb +26 -0
  64. data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +62 -0
  65. data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +44 -0
  66. data/lib/rubocop/cop/correctors/parentheses_corrector.rb +31 -0
  67. data/lib/rubocop/cop/correctors/punctuation_corrector.rb +29 -0
  68. data/lib/rubocop/cop/correctors/space_corrector.rb +34 -0
  69. data/lib/rubocop/cop/correctors/string_literal_corrector.rb +25 -0
  70. data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +31 -0
  71. data/lib/rubocop/cop/force.rb +0 -1
  72. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +102 -0
  73. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +106 -0
  74. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +87 -0
  75. data/lib/rubocop/cop/generator/require_file_injector.rb +78 -0
  76. data/lib/rubocop/cop/generator.rb +191 -0
  77. data/lib/rubocop/cop/ignored_node.rb +0 -1
  78. data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +46 -0
  79. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +44 -0
  80. data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +54 -0
  81. data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +59 -0
  82. data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +71 -0
  83. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +52 -0
  84. data/lib/rubocop/cop/internal_affairs.rb +8 -0
  85. data/lib/rubocop/cop/{style → layout}/access_modifier_indentation.rb +39 -10
  86. data/lib/rubocop/cop/layout/align_array.rb +39 -0
  87. data/lib/rubocop/cop/layout/align_hash.rb +235 -0
  88. data/lib/rubocop/cop/{style → layout}/align_parameters.rb +38 -19
  89. data/lib/rubocop/cop/{style → layout}/block_end_newline.rb +26 -8
  90. data/lib/rubocop/cop/layout/case_indentation.rb +160 -0
  91. data/lib/rubocop/cop/layout/class_structure.rb +306 -0
  92. data/lib/rubocop/cop/{style → layout}/closing_parenthesis_indentation.rb +18 -13
  93. data/lib/rubocop/cop/{style → layout}/comment_indentation.rb +48 -6
  94. data/lib/rubocop/cop/{style → layout}/dot_position.rb +34 -21
  95. data/lib/rubocop/cop/{style → layout}/else_alignment.rb +55 -37
  96. data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +63 -0
  97. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +147 -0
  98. data/lib/rubocop/cop/{style → layout}/empty_lines.rb +17 -4
  99. data/lib/rubocop/cop/{style → layout}/empty_lines_around_access_modifier.rb +40 -24
  100. data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +87 -0
  101. data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +46 -0
  102. data/lib/rubocop/cop/{style → layout}/empty_lines_around_block_body.rb +9 -12
  103. data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +68 -0
  104. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +135 -0
  105. data/lib/rubocop/cop/{style → layout}/empty_lines_around_method_body.rb +10 -7
  106. data/lib/rubocop/cop/{style → layout}/empty_lines_around_module_body.rb +27 -9
  107. data/lib/rubocop/cop/layout/end_of_line.rb +52 -0
  108. data/lib/rubocop/cop/{style → layout}/extra_spacing.rb +63 -53
  109. data/lib/rubocop/cop/{style → layout}/first_array_element_line_break.rb +5 -2
  110. data/lib/rubocop/cop/{style → layout}/first_hash_element_line_break.rb +5 -2
  111. data/lib/rubocop/cop/{style → layout}/first_method_argument_line_break.rb +7 -4
  112. data/lib/rubocop/cop/{style → layout}/first_method_parameter_line_break.rb +8 -5
  113. data/lib/rubocop/cop/{style → layout}/first_parameter_indentation.rb +32 -26
  114. data/lib/rubocop/cop/{style → layout}/indent_array.rb +75 -25
  115. data/lib/rubocop/cop/{style → layout}/indent_assignment.rb +9 -6
  116. data/lib/rubocop/cop/{style → layout}/indent_hash.rb +80 -31
  117. data/lib/rubocop/cop/layout/indent_heredoc.rb +208 -0
  118. data/lib/rubocop/cop/{style → layout}/indentation_consistency.rb +7 -5
  119. data/lib/rubocop/cop/{style → layout}/indentation_width.rb +151 -117
  120. data/lib/rubocop/cop/layout/initial_indentation.rb +45 -0
  121. data/lib/rubocop/cop/layout/leading_comment_space.rb +58 -0
  122. data/lib/rubocop/cop/{style → layout}/multiline_array_brace_layout.rb +52 -16
  123. data/lib/rubocop/cop/{style → layout}/multiline_assignment_layout.rb +18 -21
  124. data/lib/rubocop/cop/{style → layout}/multiline_block_layout.rb +37 -43
  125. data/lib/rubocop/cop/{style → layout}/multiline_hash_brace_layout.rb +55 -15
  126. data/lib/rubocop/cop/{style → layout}/multiline_method_call_brace_layout.rb +15 -4
  127. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +221 -0
  128. data/lib/rubocop/cop/{style → layout}/multiline_method_definition_brace_layout.rb +12 -5
  129. data/lib/rubocop/cop/{style → layout}/multiline_operation_indentation.rb +23 -13
  130. data/lib/rubocop/cop/{style → layout}/rescue_ensure_alignment.rb +24 -13
  131. data/lib/rubocop/cop/{style → layout}/space_after_colon.rb +17 -13
  132. data/lib/rubocop/cop/layout/space_after_comma.rb +35 -0
  133. data/lib/rubocop/cop/{style → layout}/space_after_method_name.rb +11 -11
  134. data/lib/rubocop/cop/layout/space_after_not.rb +38 -0
  135. data/lib/rubocop/cop/{style → layout}/space_after_semicolon.rb +14 -4
  136. data/lib/rubocop/cop/{style → layout}/space_around_block_parameters.rb +52 -28
  137. data/lib/rubocop/cop/{style → layout}/space_around_equals_in_parameter_default.rb +29 -21
  138. data/lib/rubocop/cop/{style → layout}/space_around_keyword.rb +33 -29
  139. data/lib/rubocop/cop/layout/space_around_operators.rb +159 -0
  140. data/lib/rubocop/cop/layout/space_before_block_braces.rb +107 -0
  141. data/lib/rubocop/cop/layout/space_before_comma.rb +31 -0
  142. data/lib/rubocop/cop/{style → layout}/space_before_comment.rb +11 -7
  143. data/lib/rubocop/cop/{style → layout}/space_before_first_arg.rb +23 -20
  144. data/lib/rubocop/cop/layout/space_before_semicolon.rb +27 -0
  145. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +85 -0
  146. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +236 -0
  147. data/lib/rubocop/cop/{style → layout}/space_inside_array_percent_literal.rb +8 -8
  148. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +228 -0
  149. data/lib/rubocop/cop/{style → layout}/space_inside_hash_literal_braces.rb +91 -51
  150. data/lib/rubocop/cop/layout/space_inside_parens.rb +53 -0
  151. data/lib/rubocop/cop/{style → layout}/space_inside_percent_literal_delimiters.rb +14 -13
  152. data/lib/rubocop/cop/{style → layout}/space_inside_range_literal.rb +16 -17
  153. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +90 -0
  154. data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +80 -0
  155. data/lib/rubocop/cop/{style → layout}/tab.rb +8 -6
  156. data/lib/rubocop/cop/{style → layout}/trailing_blank_lines.rb +14 -15
  157. data/lib/rubocop/cop/{style → layout}/trailing_whitespace.rb +3 -4
  158. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +59 -0
  159. data/lib/rubocop/cop/lint/ambiguous_operator.rb +13 -9
  160. data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +7 -1
  161. data/lib/rubocop/cop/lint/assignment_in_condition.rb +55 -25
  162. data/lib/rubocop/cop/lint/block_alignment.rb +75 -34
  163. data/lib/rubocop/cop/lint/boolean_symbol.rb +38 -0
  164. data/lib/rubocop/cop/lint/circular_argument_reference.rb +17 -15
  165. data/lib/rubocop/cop/lint/condition_position.rb +16 -15
  166. data/lib/rubocop/cop/lint/debugger.rb +57 -23
  167. data/lib/rubocop/cop/lint/def_end_alignment.rb +28 -14
  168. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +19 -10
  169. data/lib/rubocop/cop/lint/duplicate_case_condition.rb +53 -0
  170. data/lib/rubocop/cop/lint/duplicate_methods.rb +108 -14
  171. data/lib/rubocop/cop/lint/duplicated_key.rb +16 -9
  172. data/lib/rubocop/cop/lint/each_with_object_argument.rb +15 -6
  173. data/lib/rubocop/cop/lint/else_layout.rb +27 -31
  174. data/lib/rubocop/cop/lint/empty_ensure.rb +44 -3
  175. data/lib/rubocop/cop/lint/empty_expression.rb +42 -0
  176. data/lib/rubocop/cop/lint/empty_interpolation.rb +16 -3
  177. data/lib/rubocop/cop/lint/empty_when.rb +38 -0
  178. data/lib/rubocop/cop/lint/end_alignment.rb +57 -39
  179. data/lib/rubocop/cop/lint/end_in_method.rb +24 -2
  180. data/lib/rubocop/cop/lint/ensure_return.rb +23 -3
  181. data/lib/rubocop/cop/lint/float_out_of_range.rb +10 -6
  182. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +67 -46
  183. data/lib/rubocop/cop/lint/handle_exceptions.rb +41 -4
  184. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +9 -5
  185. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +42 -29
  186. data/lib/rubocop/cop/lint/inherit_exception.rb +34 -23
  187. data/lib/rubocop/cop/lint/interpolation_check.rb +37 -0
  188. data/lib/rubocop/cop/lint/{literal_in_condition.rb → literal_as_condition.rb} +51 -40
  189. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +13 -8
  190. data/lib/rubocop/cop/lint/loop.rb +37 -2
  191. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +81 -0
  192. data/lib/rubocop/cop/lint/multiple_compare.rb +48 -0
  193. data/lib/rubocop/cop/lint/nested_method_definition.rb +54 -12
  194. data/lib/rubocop/cop/lint/nested_percent_literal.rb +58 -0
  195. data/lib/rubocop/cop/lint/next_without_accumulator.rb +7 -3
  196. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +32 -23
  197. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +22 -14
  198. data/lib/rubocop/cop/lint/percent_string_array.rb +42 -27
  199. data/lib/rubocop/cop/lint/percent_symbol_array.rb +28 -19
  200. data/lib/rubocop/cop/lint/rand_one.rb +17 -8
  201. data/lib/rubocop/cop/lint/redundant_with_index.rb +80 -0
  202. data/lib/rubocop/cop/lint/redundant_with_object.rb +81 -0
  203. data/lib/rubocop/cop/lint/regexp_as_condition.rb +29 -0
  204. data/lib/rubocop/cop/lint/require_parentheses.rb +24 -30
  205. data/lib/rubocop/cop/lint/rescue_exception.rb +21 -2
  206. data/lib/rubocop/cop/lint/rescue_type.rb +90 -0
  207. data/lib/rubocop/cop/lint/return_in_void_context.rb +74 -0
  208. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +70 -0
  209. data/lib/rubocop/cop/lint/script_permission.rb +49 -0
  210. data/lib/rubocop/cop/lint/shadowed_argument.rb +146 -0
  211. data/lib/rubocop/cop/lint/shadowed_exception.rb +78 -57
  212. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +25 -2
  213. data/lib/rubocop/cop/lint/string_conversion_in_interpolation.rb +18 -12
  214. data/lib/rubocop/cop/lint/syntax.rb +23 -21
  215. data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +26 -4
  216. data/lib/rubocop/cop/lint/unified_integer.rb +43 -0
  217. data/lib/rubocop/cop/lint/unneeded_disable.rb +117 -56
  218. data/lib/rubocop/cop/lint/unneeded_require_statement.rb +51 -0
  219. data/lib/rubocop/cop/lint/unneeded_splat_expansion.rb +167 -0
  220. data/lib/rubocop/cop/lint/unreachable_code.rb +72 -8
  221. data/lib/rubocop/cop/lint/unused_block_argument.rb +87 -27
  222. data/lib/rubocop/cop/lint/unused_method_argument.rb +18 -2
  223. data/lib/rubocop/cop/lint/uri_escape_unescape.rb +75 -0
  224. data/lib/rubocop/cop/lint/uri_regexp.rb +73 -0
  225. data/lib/rubocop/cop/lint/useless_access_modifier.rb +40 -18
  226. data/lib/rubocop/cop/lint/useless_assignment.rb +45 -14
  227. data/lib/rubocop/cop/lint/useless_comparison.rb +8 -10
  228. data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +16 -2
  229. data/lib/rubocop/cop/lint/useless_setter_call.rb +57 -43
  230. data/lib/rubocop/cop/lint/void.rb +83 -23
  231. data/lib/rubocop/cop/message_annotator.rb +118 -0
  232. data/lib/rubocop/cop/metrics/abc_size.rb +3 -4
  233. data/lib/rubocop/cop/metrics/block_length.rb +32 -0
  234. data/lib/rubocop/cop/metrics/block_nesting.rb +21 -10
  235. data/lib/rubocop/cop/metrics/class_length.rb +3 -2
  236. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +4 -4
  237. data/lib/rubocop/cop/metrics/line_length.rb +67 -14
  238. data/lib/rubocop/cop/metrics/method_length.rb +10 -10
  239. data/lib/rubocop/cop/metrics/module_length.rb +3 -2
  240. data/lib/rubocop/cop/metrics/parameter_lists.rb +15 -6
  241. data/lib/rubocop/cop/metrics/perceived_complexity.rb +5 -6
  242. data/lib/rubocop/cop/mixin/alignment.rb +70 -0
  243. data/lib/rubocop/cop/mixin/annotation_comment.rb +0 -1
  244. data/lib/rubocop/cop/mixin/array_hash_indentation.rb +26 -22
  245. data/lib/rubocop/cop/mixin/array_min_size.rb +59 -0
  246. data/lib/rubocop/cop/mixin/array_syntax.rb +4 -12
  247. data/lib/rubocop/cop/mixin/check_assignment.rb +6 -7
  248. data/lib/rubocop/cop/mixin/classish_length.rb +0 -1
  249. data/lib/rubocop/cop/mixin/code_length.rb +4 -3
  250. data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +21 -16
  251. data/lib/rubocop/cop/mixin/configurable_formatting.rb +48 -0
  252. data/lib/rubocop/cop/mixin/configurable_max.rb +5 -4
  253. data/lib/rubocop/cop/mixin/configurable_naming.rb +5 -35
  254. data/lib/rubocop/cop/mixin/configurable_numbering.rb +17 -0
  255. data/lib/rubocop/cop/mixin/def_node.rb +29 -0
  256. data/lib/rubocop/cop/mixin/documentation_comment.rb +46 -0
  257. data/lib/rubocop/cop/mixin/duplication.rb +46 -0
  258. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +119 -27
  259. data/lib/rubocop/cop/mixin/empty_parameter.rb +23 -0
  260. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +11 -27
  261. data/lib/rubocop/cop/mixin/enforce_superclass.rb +30 -0
  262. data/lib/rubocop/cop/mixin/first_element_line_break.rb +15 -11
  263. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +15 -13
  264. data/lib/rubocop/cop/mixin/hash_alignment.rb +116 -0
  265. data/lib/rubocop/cop/mixin/heredoc.rb +28 -0
  266. data/lib/rubocop/cop/mixin/ignored_pattern.rb +29 -0
  267. data/lib/rubocop/cop/mixin/integer_node.rb +2 -1
  268. data/lib/rubocop/cop/mixin/match_range.rb +4 -6
  269. data/lib/rubocop/cop/mixin/method_complexity.rb +33 -8
  270. data/lib/rubocop/cop/mixin/method_preference.rb +2 -1
  271. data/lib/rubocop/cop/mixin/min_body_length.rb +2 -1
  272. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +100 -66
  273. data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +49 -51
  274. data/lib/rubocop/cop/mixin/negative_conditional.rb +18 -13
  275. data/lib/rubocop/cop/mixin/on_normal_if_unless.rb +1 -25
  276. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +48 -0
  277. data/lib/rubocop/cop/mixin/parentheses.rb +2 -8
  278. data/lib/rubocop/cop/mixin/parser_diagnostic.rb +4 -2
  279. data/lib/rubocop/cop/mixin/percent_array.rb +52 -0
  280. data/lib/rubocop/cop/mixin/percent_literal.rb +69 -6
  281. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +16 -5
  282. data/lib/rubocop/cop/mixin/rescue_node.rb +23 -0
  283. data/lib/rubocop/cop/mixin/safe_assignment.rb +3 -1
  284. data/lib/rubocop/cop/mixin/safe_mode.rb +22 -0
  285. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +8 -10
  286. data/lib/rubocop/cop/mixin/space_before_punctuation.rb +10 -14
  287. data/lib/rubocop/cop/mixin/statement_modifier.rb +29 -32
  288. data/lib/rubocop/cop/mixin/string_help.rb +3 -2
  289. data/lib/rubocop/cop/mixin/string_literals_help.rb +3 -15
  290. data/lib/rubocop/cop/mixin/surrounding_space.rb +78 -9
  291. data/lib/rubocop/cop/mixin/target_rails_version.rb +16 -0
  292. data/lib/rubocop/cop/mixin/target_ruby_version.rb +16 -0
  293. data/lib/rubocop/cop/mixin/too_many_lines.rb +39 -0
  294. data/lib/rubocop/cop/mixin/trailing_comma.rb +37 -38
  295. data/lib/rubocop/cop/mixin/unused_argument.rb +6 -16
  296. data/lib/rubocop/cop/naming/accessor_method_name.rb +55 -0
  297. data/lib/rubocop/cop/{style → naming}/ascii_identifiers.rb +36 -5
  298. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +42 -0
  299. data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +33 -0
  300. data/lib/rubocop/cop/naming/constant_name.rb +58 -0
  301. data/lib/rubocop/cop/{style → naming}/file_name.rb +72 -29
  302. data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +62 -0
  303. data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +59 -0
  304. data/lib/rubocop/cop/naming/method_name.rb +40 -0
  305. data/lib/rubocop/cop/naming/predicate_name.rb +101 -0
  306. data/lib/rubocop/cop/naming/variable_name.rb +50 -0
  307. data/lib/rubocop/cop/naming/variable_number.rb +61 -0
  308. data/lib/rubocop/cop/offense.rb +9 -5
  309. data/lib/rubocop/cop/performance/caller.rb +69 -0
  310. data/lib/rubocop/cop/performance/case_when_splat.rb +65 -89
  311. data/lib/rubocop/cop/performance/casecmp.rb +37 -25
  312. data/lib/rubocop/cop/performance/compare_with_block.rb +117 -0
  313. data/lib/rubocop/cop/performance/count.rb +33 -43
  314. data/lib/rubocop/cop/performance/detect.rb +30 -31
  315. data/lib/rubocop/cop/performance/double_start_end_with.rb +55 -26
  316. data/lib/rubocop/cop/performance/end_with.rb +9 -9
  317. data/lib/rubocop/cop/performance/fixed_size.rb +21 -17
  318. data/lib/rubocop/cop/performance/flat_map.rb +30 -33
  319. data/lib/rubocop/cop/performance/hash_each_methods.rb +129 -0
  320. data/lib/rubocop/cop/performance/lstrip_rstrip.rb +14 -14
  321. data/lib/rubocop/cop/performance/range_include.rb +5 -4
  322. data/lib/rubocop/cop/performance/redundant_block_call.rb +28 -29
  323. data/lib/rubocop/cop/performance/redundant_match.rb +19 -15
  324. data/lib/rubocop/cop/performance/redundant_merge.rb +100 -52
  325. data/lib/rubocop/cop/performance/redundant_sort_by.rb +17 -14
  326. data/lib/rubocop/cop/performance/regexp_match.rb +224 -0
  327. data/lib/rubocop/cop/performance/reverse_each.rb +3 -6
  328. data/lib/rubocop/cop/performance/sample.rb +84 -83
  329. data/lib/rubocop/cop/performance/size.rb +22 -15
  330. data/lib/rubocop/cop/performance/start_with.rb +9 -9
  331. data/lib/rubocop/cop/performance/string_replacement.rb +35 -70
  332. data/lib/rubocop/cop/performance/times_map.rb +33 -24
  333. data/lib/rubocop/cop/performance/unfreeze_string.rb +50 -0
  334. data/lib/rubocop/cop/performance/uri_default_parser.rb +47 -0
  335. data/lib/rubocop/cop/rails/action_filter.rb +67 -47
  336. data/lib/rubocop/cop/rails/active_support_aliases.rb +68 -0
  337. data/lib/rubocop/cop/rails/application_job.rb +40 -0
  338. data/lib/rubocop/cop/rails/application_record.rb +40 -0
  339. data/lib/rubocop/cop/rails/blank.rb +142 -0
  340. data/lib/rubocop/cop/rails/create_table_with_timestamps.rb +82 -0
  341. data/lib/rubocop/cop/rails/date.rb +47 -42
  342. data/lib/rubocop/cop/rails/delegate.rb +55 -33
  343. data/lib/rubocop/cop/rails/delegate_allow_blank.rb +51 -0
  344. data/lib/rubocop/cop/rails/dynamic_find_by.rb +82 -0
  345. data/lib/rubocop/cop/rails/enum_uniqueness.rb +45 -0
  346. data/lib/rubocop/cop/rails/environment_comparison.rb +66 -0
  347. data/lib/rubocop/cop/rails/exit.rb +17 -11
  348. data/lib/rubocop/cop/rails/file_path.rb +72 -0
  349. data/lib/rubocop/cop/rails/find_by.rb +14 -20
  350. data/lib/rubocop/cop/rails/find_each.rb +8 -21
  351. data/lib/rubocop/cop/rails/has_and_belongs_to_many.rb +9 -2
  352. data/lib/rubocop/cop/rails/has_many_or_has_one_dependent.rb +84 -0
  353. data/lib/rubocop/cop/rails/http_positional_arguments.rb +102 -0
  354. data/lib/rubocop/cop/rails/inverse_of.rb +218 -0
  355. data/lib/rubocop/cop/rails/lexically_scoped_action_filter.rb +112 -0
  356. data/lib/rubocop/cop/rails/not_null_column.rb +67 -0
  357. data/lib/rubocop/cop/rails/output.rb +15 -13
  358. data/lib/rubocop/cop/rails/output_safety.rb +65 -17
  359. data/lib/rubocop/cop/rails/pluralization_grammar.rb +30 -29
  360. data/lib/rubocop/cop/rails/presence.rb +118 -0
  361. data/lib/rubocop/cop/rails/present.rb +143 -0
  362. data/lib/rubocop/cop/rails/read_write_attribute.rb +20 -26
  363. data/lib/rubocop/cop/rails/redundant_receiver_in_with_options.rb +133 -0
  364. data/lib/rubocop/cop/rails/relative_date_constant.rb +88 -0
  365. data/lib/rubocop/cop/rails/request_referer.rb +28 -13
  366. data/lib/rubocop/cop/rails/reversible_migration.rb +281 -0
  367. data/lib/rubocop/cop/rails/safe_navigation.rb +90 -0
  368. data/lib/rubocop/cop/rails/save_bang.rb +104 -19
  369. data/lib/rubocop/cop/rails/scope_args.rb +5 -10
  370. data/lib/rubocop/cop/rails/skips_model_validations.rb +70 -0
  371. data/lib/rubocop/cop/rails/time_zone.rb +34 -21
  372. data/lib/rubocop/cop/rails/uniq_before_pluck.rb +17 -14
  373. data/lib/rubocop/cop/rails/unknown_env.rb +63 -0
  374. data/lib/rubocop/cop/rails/validation.rb +16 -20
  375. data/lib/rubocop/cop/registry.rb +172 -0
  376. data/lib/rubocop/cop/security/eval.rb +30 -0
  377. data/lib/rubocop/cop/security/json_load.rb +46 -0
  378. data/lib/rubocop/cop/security/marshal_load.rb +39 -0
  379. data/lib/rubocop/cop/security/yaml_load.rb +37 -0
  380. data/lib/rubocop/cop/severity.rb +1 -2
  381. data/lib/rubocop/cop/style/alias.rb +54 -33
  382. data/lib/rubocop/cop/style/and_or.rb +77 -63
  383. data/lib/rubocop/cop/style/array_join.rb +13 -9
  384. data/lib/rubocop/cop/style/ascii_comments.rb +25 -7
  385. data/lib/rubocop/cop/style/attr.rb +24 -11
  386. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +21 -16
  387. data/lib/rubocop/cop/style/bare_percent_literals.rb +31 -11
  388. data/lib/rubocop/cop/style/begin_block.rb +1 -2
  389. data/lib/rubocop/cop/style/block_comments.rb +20 -11
  390. data/lib/rubocop/cop/style/block_delimiters.rb +122 -51
  391. data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +142 -54
  392. data/lib/rubocop/cop/style/case_equality.rb +15 -4
  393. data/lib/rubocop/cop/style/character_literal.rb +12 -5
  394. data/lib/rubocop/cop/style/class_and_module_children.rb +85 -6
  395. data/lib/rubocop/cop/style/class_check.rb +35 -19
  396. data/lib/rubocop/cop/style/class_methods.rb +13 -14
  397. data/lib/rubocop/cop/style/class_vars.rb +5 -5
  398. data/lib/rubocop/cop/style/collection_methods.rb +12 -13
  399. data/lib/rubocop/cop/style/colon_method_call.rb +24 -16
  400. data/lib/rubocop/cop/style/colon_method_definition.rb +36 -0
  401. data/lib/rubocop/cop/style/command_literal.rb +98 -32
  402. data/lib/rubocop/cop/style/comment_annotation.rb +41 -15
  403. data/lib/rubocop/cop/style/commented_keyword.rb +84 -0
  404. data/lib/rubocop/cop/style/conditional_assignment.rb +161 -112
  405. data/lib/rubocop/cop/style/copyright.rb +32 -34
  406. data/lib/rubocop/cop/style/date_time.rb +44 -0
  407. data/lib/rubocop/cop/style/def_with_parentheses.rb +32 -9
  408. data/lib/rubocop/cop/style/dir.rb +48 -0
  409. data/lib/rubocop/cop/style/documentation.rb +44 -58
  410. data/lib/rubocop/cop/style/documentation_method.rb +76 -0
  411. data/lib/rubocop/cop/style/double_negation.rb +3 -3
  412. data/lib/rubocop/cop/style/each_for_simple_loop.rb +14 -13
  413. data/lib/rubocop/cop/style/each_with_object.rb +28 -25
  414. data/lib/rubocop/cop/style/empty_block_parameter.rb +47 -0
  415. data/lib/rubocop/cop/style/empty_case_condition.rb +18 -30
  416. data/lib/rubocop/cop/style/empty_else.rb +82 -51
  417. data/lib/rubocop/cop/style/empty_lambda_parameter.rb +43 -0
  418. data/lib/rubocop/cop/style/empty_literal.rb +76 -48
  419. data/lib/rubocop/cop/style/empty_method.rb +112 -0
  420. data/lib/rubocop/cop/style/encoding.rb +10 -40
  421. data/lib/rubocop/cop/style/end_block.rb +1 -2
  422. data/lib/rubocop/cop/style/eval_with_location.rb +146 -0
  423. data/lib/rubocop/cop/style/even_odd.rb +25 -44
  424. data/lib/rubocop/cop/style/flip_flop.rb +13 -3
  425. data/lib/rubocop/cop/style/for.rb +19 -15
  426. data/lib/rubocop/cop/style/format_string.rb +88 -42
  427. data/lib/rubocop/cop/style/format_string_token.rb +163 -0
  428. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +90 -15
  429. data/lib/rubocop/cop/style/global_vars.rb +14 -5
  430. data/lib/rubocop/cop/style/guard_clause.rb +22 -62
  431. data/lib/rubocop/cop/style/hash_syntax.rb +109 -59
  432. data/lib/rubocop/cop/style/identical_conditional_branches.rb +73 -32
  433. data/lib/rubocop/cop/style/if_inside_else.rb +16 -20
  434. data/lib/rubocop/cop/style/if_unless_modifier.rb +48 -39
  435. data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +6 -12
  436. data/lib/rubocop/cop/style/if_with_semicolon.rb +10 -2
  437. data/lib/rubocop/cop/style/implicit_runtime_error.rb +7 -7
  438. data/lib/rubocop/cop/style/infinite_loop.rb +33 -32
  439. data/lib/rubocop/cop/style/inline_comment.rb +17 -5
  440. data/lib/rubocop/cop/style/inverse_methods.rb +149 -0
  441. data/lib/rubocop/cop/style/lambda.rb +66 -63
  442. data/lib/rubocop/cop/style/lambda_call.rb +50 -20
  443. data/lib/rubocop/cop/style/line_end_concatenation.rb +38 -17
  444. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +90 -0
  445. data/lib/rubocop/cop/style/{method_call_parentheses.rb → method_call_without_args_parentheses.rb} +32 -25
  446. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +9 -9
  447. data/lib/rubocop/cop/style/method_def_parentheses.rb +101 -29
  448. data/lib/rubocop/cop/style/method_missing.rb +14 -20
  449. data/lib/rubocop/cop/style/min_max.rb +68 -0
  450. data/lib/rubocop/cop/style/missing_else.rb +61 -21
  451. data/lib/rubocop/cop/style/mixin_grouping.rb +145 -0
  452. data/lib/rubocop/cop/style/mixin_usage.rb +82 -0
  453. data/lib/rubocop/cop/style/module_function.rb +44 -18
  454. data/lib/rubocop/cop/style/multiline_block_chain.rb +8 -15
  455. data/lib/rubocop/cop/style/multiline_if_modifier.rb +67 -0
  456. data/lib/rubocop/cop/style/multiline_if_then.rb +21 -14
  457. data/lib/rubocop/cop/style/multiline_memoization.rb +93 -0
  458. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +21 -9
  459. data/lib/rubocop/cop/style/multiple_comparison.rb +77 -0
  460. data/lib/rubocop/cop/style/mutable_constant.rb +17 -9
  461. data/lib/rubocop/cop/style/negated_if.rb +76 -25
  462. data/lib/rubocop/cop/style/negated_while.rb +4 -22
  463. data/lib/rubocop/cop/style/nested_modifier.rb +17 -47
  464. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +32 -28
  465. data/lib/rubocop/cop/style/nested_ternary_operator.rb +3 -6
  466. data/lib/rubocop/cop/style/next.rb +72 -53
  467. data/lib/rubocop/cop/style/nil_comparison.rb +10 -14
  468. data/lib/rubocop/cop/style/non_nil_check.rb +69 -62
  469. data/lib/rubocop/cop/style/not.rb +19 -13
  470. data/lib/rubocop/cop/style/numeric_literal_prefix.rb +16 -7
  471. data/lib/rubocop/cop/style/numeric_literals.rb +33 -12
  472. data/lib/rubocop/cop/style/numeric_predicate.rb +30 -32
  473. data/lib/rubocop/cop/style/one_line_conditional.rb +21 -17
  474. data/lib/rubocop/cop/style/option_hash.rb +11 -37
  475. data/lib/rubocop/cop/style/optional_arguments.rb +20 -9
  476. data/lib/rubocop/cop/style/or_assignment.rb +88 -0
  477. data/lib/rubocop/cop/style/parallel_assignment.rb +83 -64
  478. data/lib/rubocop/cop/style/parentheses_around_condition.rb +37 -19
  479. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +50 -15
  480. data/lib/rubocop/cop/style/percent_q_literals.rb +40 -17
  481. data/lib/rubocop/cop/style/perl_backrefs.rb +9 -3
  482. data/lib/rubocop/cop/style/preferred_hash_methods.rb +48 -14
  483. data/lib/rubocop/cop/style/proc.rb +13 -10
  484. data/lib/rubocop/cop/style/raise_args.rb +46 -50
  485. data/lib/rubocop/cop/style/random_with_offset.rb +160 -0
  486. data/lib/rubocop/cop/style/redundant_begin.rb +16 -6
  487. data/lib/rubocop/cop/style/redundant_conditional.rb +96 -0
  488. data/lib/rubocop/cop/style/redundant_exception.rb +4 -5
  489. data/lib/rubocop/cop/style/redundant_freeze.rb +7 -10
  490. data/lib/rubocop/cop/style/redundant_parentheses.rb +70 -31
  491. data/lib/rubocop/cop/style/redundant_return.rb +61 -23
  492. data/lib/rubocop/cop/style/redundant_self.rb +62 -60
  493. data/lib/rubocop/cop/style/regexp_literal.rb +100 -34
  494. data/lib/rubocop/cop/style/rescue_modifier.rb +15 -17
  495. data/lib/rubocop/cop/style/rescue_standard_error.rb +122 -0
  496. data/lib/rubocop/cop/style/return_nil.rb +89 -0
  497. data/lib/rubocop/cop/style/safe_navigation.rb +197 -0
  498. data/lib/rubocop/cop/style/self_assignment.rb +20 -17
  499. data/lib/rubocop/cop/style/semicolon.rb +25 -17
  500. data/lib/rubocop/cop/style/send.rb +14 -4
  501. data/lib/rubocop/cop/style/signal_exception.rb +105 -7
  502. data/lib/rubocop/cop/style/single_line_block_params.rb +27 -21
  503. data/lib/rubocop/cop/style/single_line_methods.rb +45 -31
  504. data/lib/rubocop/cop/style/special_global_vars.rb +32 -28
  505. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +24 -53
  506. data/lib/rubocop/cop/style/stderr_puts.rb +54 -0
  507. data/lib/rubocop/cop/style/string_hash_keys.rb +36 -0
  508. data/lib/rubocop/cop/style/string_literals.rb +31 -5
  509. data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +20 -2
  510. data/lib/rubocop/cop/style/string_methods.rb +22 -9
  511. data/lib/rubocop/cop/style/struct_inheritance.rb +5 -17
  512. data/lib/rubocop/cop/style/symbol_array.rb +39 -65
  513. data/lib/rubocop/cop/style/symbol_literal.rb +1 -2
  514. data/lib/rubocop/cop/style/symbol_proc.rb +35 -52
  515. data/lib/rubocop/cop/style/ternary_parentheses.rb +143 -42
  516. data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +101 -0
  517. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +31 -20
  518. data/lib/rubocop/cop/style/trailing_comma_in_literal.rb +26 -8
  519. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +95 -0
  520. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +97 -37
  521. data/lib/rubocop/cop/style/trivial_accessors.rb +72 -66
  522. data/lib/rubocop/cop/style/unless_else.rb +19 -13
  523. data/lib/rubocop/cop/style/unneeded_capital_w.rb +24 -10
  524. data/lib/rubocop/cop/style/unneeded_interpolation.rb +22 -24
  525. data/lib/rubocop/cop/style/unneeded_percent_q.rb +28 -22
  526. data/lib/rubocop/cop/style/variable_interpolation.rb +23 -10
  527. data/lib/rubocop/cop/style/when_then.rb +18 -4
  528. data/lib/rubocop/cop/style/while_until_do.rb +34 -16
  529. data/lib/rubocop/cop/style/while_until_modifier.rb +32 -12
  530. data/lib/rubocop/cop/style/word_array.rb +45 -102
  531. data/lib/rubocop/cop/style/yoda_condition.rb +107 -0
  532. data/lib/rubocop/cop/style/zero_length_predicate.rb +55 -32
  533. data/lib/rubocop/cop/team.rb +33 -35
  534. data/lib/rubocop/cop/util.rb +120 -54
  535. data/lib/rubocop/cop/variable_force/assignment.rb +5 -9
  536. data/lib/rubocop/cop/variable_force/branch.rb +318 -0
  537. data/lib/rubocop/cop/variable_force/branchable.rb +21 -0
  538. data/lib/rubocop/cop/variable_force/reference.rb +1 -2
  539. data/lib/rubocop/cop/variable_force/scope.rb +37 -26
  540. data/lib/rubocop/cop/variable_force/variable.rb +12 -12
  541. data/lib/rubocop/cop/variable_force/variable_table.rb +3 -4
  542. data/lib/rubocop/cop/variable_force.rb +72 -39
  543. data/lib/rubocop/error.rb +0 -1
  544. data/lib/rubocop/formatter/base_formatter.rb +4 -9
  545. data/lib/rubocop/formatter/clang_style_formatter.rb +2 -3
  546. data/lib/rubocop/formatter/colorizable.rb +9 -10
  547. data/lib/rubocop/formatter/disabled_config_formatter.rb +48 -35
  548. data/lib/rubocop/formatter/disabled_lines_formatter.rb +0 -1
  549. data/lib/rubocop/formatter/emacs_style_formatter.rb +0 -1
  550. data/lib/rubocop/formatter/file_list_formatter.rb +0 -1
  551. data/lib/rubocop/formatter/formatter_set.rb +16 -13
  552. data/lib/rubocop/formatter/fuubar_style_formatter.rb +6 -1
  553. data/lib/rubocop/formatter/html_formatter.rb +5 -5
  554. data/lib/rubocop/formatter/json_formatter.rb +9 -4
  555. data/lib/rubocop/formatter/offense_count_formatter.rb +2 -1
  556. data/lib/rubocop/formatter/progress_formatter.rb +0 -1
  557. data/lib/rubocop/formatter/quiet_formatter.rb +13 -0
  558. data/lib/rubocop/formatter/simple_text_formatter.rb +7 -17
  559. data/lib/rubocop/formatter/tap_formatter.rb +71 -0
  560. data/lib/rubocop/formatter/text_util.rb +0 -1
  561. data/lib/rubocop/formatter/worst_offenders_formatter.rb +6 -5
  562. data/lib/rubocop/magic_comment.rb +210 -0
  563. data/lib/rubocop/name_similarity.rb +0 -1
  564. data/lib/rubocop/node_pattern.rb +181 -118
  565. data/lib/rubocop/options.rb +154 -88
  566. data/lib/rubocop/path_util.rb +38 -4
  567. data/lib/rubocop/platform.rb +11 -0
  568. data/lib/rubocop/processed_source.rb +23 -20
  569. data/lib/rubocop/rake_task.rb +16 -24
  570. data/lib/rubocop/remote_config.rb +40 -13
  571. data/lib/rubocop/result_cache.rb +33 -24
  572. data/lib/rubocop/rspec/cop_helper.rb +21 -7
  573. data/lib/rubocop/rspec/expect_offense.rb +165 -0
  574. data/lib/rubocop/rspec/host_environment_simulation_helper.rb +1 -2
  575. data/lib/rubocop/rspec/shared_contexts.rb +24 -9
  576. data/lib/rubocop/rspec/shared_examples.rb +10 -19
  577. data/lib/rubocop/rspec/support.rb +5 -5
  578. data/lib/rubocop/runner.rb +74 -39
  579. data/lib/rubocop/string_interpreter.rb +0 -1
  580. data/lib/rubocop/string_util.rb +11 -6
  581. data/lib/rubocop/target_finder.rb +70 -8
  582. data/lib/rubocop/token.rb +79 -2
  583. data/lib/rubocop/version.rb +2 -5
  584. data/lib/rubocop/warning.rb +0 -1
  585. data/lib/rubocop.rb +569 -398
  586. metadata +301 -112
  587. data/lib/rubocop/ast_node/builder.rb +0 -31
  588. data/lib/rubocop/ast_node/sexp.rb +0 -14
  589. data/lib/rubocop/ast_node.rb +0 -623
  590. data/lib/rubocop/cop/lint/eval.rb +0 -23
  591. data/lib/rubocop/cop/lint/invalid_character_literal.rb +0 -39
  592. data/lib/rubocop/cop/lint/useless_array_splat.rb +0 -56
  593. data/lib/rubocop/cop/mixin/access_modifier_node.rb +0 -42
  594. data/lib/rubocop/cop/mixin/autocorrect_alignment.rb +0 -152
  595. data/lib/rubocop/cop/mixin/hash_node.rb +0 -15
  596. data/lib/rubocop/cop/mixin/if_node.rb +0 -37
  597. data/lib/rubocop/cop/mixin/on_method_def.rb +0 -31
  598. data/lib/rubocop/cop/mixin/space_inside.rb +0 -79
  599. data/lib/rubocop/cop/performance/hash_each.rb +0 -86
  600. data/lib/rubocop/cop/performance/push_splat.rb +0 -47
  601. data/lib/rubocop/cop/style/accessor_method_name.rb +0 -46
  602. data/lib/rubocop/cop/style/align_array.rb +0 -21
  603. data/lib/rubocop/cop/style/align_hash.rb +0 -256
  604. data/lib/rubocop/cop/style/case_indentation.rb +0 -92
  605. data/lib/rubocop/cop/style/class_and_module_camel_case.rb +0 -30
  606. data/lib/rubocop/cop/style/constant_name.rb +0 -30
  607. data/lib/rubocop/cop/style/empty_line_between_defs.rb +0 -76
  608. data/lib/rubocop/cop/style/empty_lines_around_class_body.rb +0 -40
  609. data/lib/rubocop/cop/style/end_of_line.rb +0 -31
  610. data/lib/rubocop/cop/style/initial_indentation.rb +0 -38
  611. data/lib/rubocop/cop/style/leading_comment_space.rb +0 -33
  612. data/lib/rubocop/cop/style/method_name.rb +0 -29
  613. data/lib/rubocop/cop/style/multiline_method_call_indentation.rb +0 -176
  614. data/lib/rubocop/cop/style/op_method.rb +0 -44
  615. data/lib/rubocop/cop/style/predicate_name.rb +0 -68
  616. data/lib/rubocop/cop/style/space_after_comma.rb +0 -22
  617. data/lib/rubocop/cop/style/space_after_not.rb +0 -42
  618. data/lib/rubocop/cop/style/space_around_operators.rb +0 -132
  619. data/lib/rubocop/cop/style/space_before_block_braces.rb +0 -65
  620. data/lib/rubocop/cop/style/space_before_comma.rb +0 -17
  621. data/lib/rubocop/cop/style/space_before_semicolon.rb +0 -17
  622. data/lib/rubocop/cop/style/space_inside_block_braces.rb +0 -166
  623. data/lib/rubocop/cop/style/space_inside_brackets.rb +0 -21
  624. data/lib/rubocop/cop/style/space_inside_parens.rb +0 -17
  625. data/lib/rubocop/cop/style/space_inside_string_interpolation.rb +0 -52
  626. data/lib/rubocop/cop/style/variable_name.rb +0 -40
  627. data/lib/rubocop/cop/variable_force/locatable.rb +0 -197
@@ -0,0 +1,96 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Style
6
+ # This cop checks for redundant returning of true/false in conditionals.
7
+ #
8
+ # @example
9
+ # # bad
10
+ # x == y ? true : false
11
+ #
12
+ # # bad
13
+ # if x == y
14
+ # true
15
+ # else
16
+ # false
17
+ # end
18
+ #
19
+ # # good
20
+ # x == y
21
+ #
22
+ # # bad
23
+ # x == y ? false : true
24
+ #
25
+ # # good
26
+ # x != y
27
+ class RedundantConditional < Cop
28
+ include Alignment
29
+
30
+ COMPARISON_OPERATORS = RuboCop::AST::Node::COMPARISON_OPERATORS
31
+
32
+ MSG = 'This conditional expression can just be replaced ' \
33
+ 'by `%<msg>s`.'.freeze
34
+
35
+ def on_if(node)
36
+ return unless offense?(node)
37
+
38
+ add_offense(node)
39
+ end
40
+
41
+ def autocorrect(node)
42
+ lambda do |corrector|
43
+ corrector.replace(node.loc.expression, replacement_condition(node))
44
+ end
45
+ end
46
+
47
+ private
48
+
49
+ def message(node)
50
+ replacement = replacement_condition(node)
51
+ msg = node.elsif? ? "\n#{replacement}" : replacement
52
+
53
+ format(MSG, msg: msg)
54
+ end
55
+
56
+ def_node_matcher :redundant_condition?, <<-RUBY
57
+ (if (send _ {:#{COMPARISON_OPERATORS.join(' :')}} _) true false)
58
+ RUBY
59
+
60
+ def_node_matcher :redundant_condition_inverted?, <<-RUBY
61
+ (if (send _ {:#{COMPARISON_OPERATORS.join(' :')}} _) false true)
62
+ RUBY
63
+
64
+ def offense?(node)
65
+ return if node.modifier_form?
66
+ redundant_condition?(node) || redundant_condition_inverted?(node)
67
+ end
68
+
69
+ def replacement_condition(node)
70
+ condition = node.condition.source
71
+ expression = invert_expression?(node) ? "!(#{condition})" : condition
72
+
73
+ node.elsif? ? indented_else_node(expression, node) : expression
74
+ end
75
+
76
+ def invert_expression?(node)
77
+ (
78
+ (node.if? || node.elsif? || node.ternary?) &&
79
+ redundant_condition_inverted?(node)
80
+ ) || (
81
+ node.unless? &&
82
+ redundant_condition?(node)
83
+ )
84
+ end
85
+
86
+ def indented_else_node(expression, node)
87
+ "else\n#{indentation(node)}#{expression}"
88
+ end
89
+
90
+ def configured_indentation_width
91
+ super || 2
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  module RuboCop
@@ -23,8 +22,8 @@ module RuboCop
23
22
  'just the message.'.freeze
24
23
 
25
24
  def on_send(node)
26
- exploded?(node) { return add_offense(node, :expression, MSG_1) }
27
- compact?(node) { add_offense(node, :expression, MSG_2) }
25
+ exploded?(node) { return add_offense(node, message: MSG_1) }
26
+ compact?(node) { add_offense(node, message: MSG_2) }
28
27
  end
29
28
 
30
29
  # Switch `raise RuntimeError, 'message'` to `raise 'message'`, and
@@ -44,11 +43,11 @@ module RuboCop
44
43
  end
45
44
 
46
45
  def_node_matcher :exploded?, <<-PATTERN
47
- (send nil ${:raise :fail} (const nil :RuntimeError) $_)
46
+ (send nil? ${:raise :fail} (const nil? :RuntimeError) $_)
48
47
  PATTERN
49
48
 
50
49
  def_node_matcher :compact?, <<-PATTERN
51
- (send nil {:raise :fail} $(send (const nil :RuntimeError) :new $_))
50
+ (send nil? {:raise :fail} $(send (const nil? :RuntimeError) :new $_))
52
51
  PATTERN
53
52
  end
54
53
  end
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  module RuboCop
@@ -15,16 +14,14 @@ module RuboCop
15
14
  class RedundantFreeze < Cop
16
15
  include FrozenStringLiteral
17
16
 
18
- MSG = 'Freezing immutable objects is pointless.'.freeze
17
+ MSG = 'Do not freeze immutable objects, as freezing them has no ' \
18
+ 'effect.'.freeze
19
19
 
20
20
  def on_send(node)
21
- receiver, method_name, *args = *node
21
+ return unless node.receiver && node.method?(:freeze) &&
22
+ immutable_literal?(node.receiver)
22
23
 
23
- return unless method_name == :freeze &&
24
- args.empty? &&
25
- immutable_literal?(receiver)
26
-
27
- add_offense(node, :expression)
24
+ add_offense(node)
28
25
  end
29
26
 
30
27
  def autocorrect(node)
@@ -37,10 +34,10 @@ module RuboCop
37
34
  private
38
35
 
39
36
  def immutable_literal?(node)
40
- return false unless node
41
37
  return true if node.immutable_literal?
38
+
42
39
  FROZEN_STRING_LITERAL_TYPES.include?(node.type) &&
43
- frozen_string_literals_enabled?(processed_source)
40
+ frozen_string_literals_enabled?
44
41
  end
45
42
  end
46
43
  end
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  module RuboCop
@@ -17,9 +16,10 @@ module RuboCop
17
16
  class RedundantParentheses < Cop
18
17
  include Parentheses
19
18
 
20
- ALLOWED_LITERALS = [:irange, :erange].freeze
19
+ ALLOWED_LITERALS = %i[irange erange].freeze
21
20
 
22
- def_node_matcher :square_brackets?, '(send (send _recv _msg) :[] ...)'
21
+ def_node_matcher :square_brackets?,
22
+ '(send {(send _recv _msg) str array hash} :[] ...)'
23
23
  def_node_matcher :range_end?, '^^{irange erange}'
24
24
  def_node_matcher :method_node_and_args, '$(send _recv _msg $...)'
25
25
  def_node_matcher :rescue?, '{^resbody ^^resbody}'
@@ -31,32 +31,52 @@ module RuboCop
31
31
  check(node)
32
32
  end
33
33
 
34
+ def autocorrect(node)
35
+ ParenthesesCorrector.correct(node)
36
+ end
37
+
38
+ private
39
+
34
40
  def parens_allowed?(node)
35
- # don't flag `()`
36
41
  empty_parentheses?(node) ||
37
- # don't flag `break(1)`, etc
38
- (keyword_ancestor?(node) && parens_required?(node)) ||
39
- # don't flag `method ({key: value})`
40
42
  hash_literal_as_first_arg?(node) ||
41
- # don't flag `rescue(ExceptionClass)`
42
43
  rescue?(node) ||
43
- # don't flag `method (arg) { }`
44
- (arg_in_call_with_block?(node) && !parentheses?(node.parent)) ||
45
- # don't flag
46
- # ```
47
- # { a: (1
48
- # ), }
49
- # ```
50
- allowed_array_or_hash_element?(node)
44
+ allowed_expression?(node)
45
+ end
46
+
47
+ def allowed_expression?(node)
48
+ allowed_ancestor?(node) ||
49
+ allowed_method_call?(node) ||
50
+ allowed_array_or_hash_element?(node) ||
51
+ allowed_multiple_expression?(node)
52
+ end
53
+
54
+ def allowed_ancestor?(node)
55
+ # Don't flag `break(1)`, etc
56
+ keyword_ancestor?(node) && parens_required?(node)
57
+ end
58
+
59
+ def allowed_method_call?(node)
60
+ # Don't flag `method (arg) { }`
61
+ arg_in_call_with_block?(node) && !parentheses?(node.parent)
62
+ end
63
+
64
+ def allowed_multiple_expression?(node)
65
+ return false if node.children.one?
66
+ ancestor = node.ancestors.first
67
+ return false unless ancestor
68
+ !ancestor.begin_type? && !ancestor.def_type? && !ancestor.block_type?
51
69
  end
52
70
 
53
71
  def empty_parentheses?(node)
72
+ # Don't flag `()`
54
73
  node.children.empty?
55
74
  end
56
75
 
57
76
  def hash_literal_as_first_arg?(node)
58
- child = node.children.first
59
- child.hash_type? && first_arg?(node) && !parentheses?(node.parent)
77
+ # Don't flag `method ({key: value})`
78
+ node.children.first.hash_type? && first_argument?(node) &&
79
+ !parentheses?(node.parent)
60
80
  end
61
81
 
62
82
  def check(begin_node)
@@ -64,7 +84,9 @@ module RuboCop
64
84
  if keyword_with_redundant_parentheses?(node)
65
85
  return offense(begin_node, 'a keyword')
66
86
  end
67
- return offense(begin_node, 'a literal') if disallowed_literal?(node)
87
+ if disallowed_literal?(begin_node, node)
88
+ return offense(begin_node, 'a literal')
89
+ end
68
90
  return offense(begin_node, 'a variable') if node.variable?
69
91
  return offense(begin_node, 'a constant') if node.const_type?
70
92
  check_send(begin_node, node) if node.send_type?
@@ -92,7 +114,7 @@ module RuboCop
92
114
  end
93
115
 
94
116
  def offense(node, msg)
95
- add_offense(node, :expression, "Don't use parentheses around #{msg}.")
117
+ add_offense(node, message: "Don't use parentheses around #{msg}.")
96
118
  end
97
119
 
98
120
  def keyword_ancestor?(node)
@@ -100,6 +122,11 @@ module RuboCop
100
122
  end
101
123
 
102
124
  def allowed_array_or_hash_element?(node)
125
+ # Don't flag
126
+ # ```
127
+ # { a: (1
128
+ # ), }
129
+ # ```
103
130
  (hash_element?(node) || array_element?(node)) &&
104
131
  only_closing_paren_before_comma?(node)
105
132
  end
@@ -119,8 +146,21 @@ module RuboCop
119
146
  line_range.source =~ /^\s*\)\s*,/
120
147
  end
121
148
 
122
- def disallowed_literal?(node)
123
- node.literal? && !ALLOWED_LITERALS.include?(node.type)
149
+ def disallowed_literal?(begin_node, node)
150
+ node.literal? &&
151
+ !ALLOWED_LITERALS.include?(node.type) &&
152
+ !raised_to_power_negative_numeric?(begin_node, node)
153
+ end
154
+
155
+ def raised_to_power_negative_numeric?(begin_node, node)
156
+ return false unless node.numeric_type?
157
+
158
+ siblings = begin_node.parent && begin_node.parent.children
159
+ return false if siblings.nil?
160
+ next_sibling = siblings[begin_node.sibling_index + 1]
161
+ base_value = node.children.first
162
+
163
+ base_value < 0 && next_sibling == :**
124
164
  end
125
165
 
126
166
  def keyword_with_redundant_parentheses?(node)
@@ -129,7 +169,7 @@ module RuboCop
129
169
 
130
170
  args = *node
131
171
 
132
- if args.size == 1 && args.first && args.first.begin_type?
172
+ if only_begin_arg?(args)
133
173
  parentheses?(args.first)
134
174
  else
135
175
  args.empty? || parentheses?(node)
@@ -146,19 +186,18 @@ module RuboCop
146
186
  args.empty? || parentheses?(send_node) || square_brackets?(send_node)
147
187
  end
148
188
 
149
- def first_arg?(node)
150
- send_node = node.parent
151
- return false unless send_node && send_node.send_type?
152
-
153
- _receiver, _method_name, *args = *send_node
154
- node.equal?(args.first)
189
+ def only_begin_arg?(args)
190
+ args.one? && args.first.begin_type?
155
191
  end
156
192
 
193
+ def_node_matcher :first_argument?, <<-PATTERN
194
+ ^(send _ _ equal?(%0) ...)
195
+ PATTERN
196
+
157
197
  def call_chain_starts_with_int?(begin_node, send_node)
158
198
  recv = first_part_of_call_chain(send_node)
159
199
  recv && recv.int_type? && (parent = begin_node.parent) &&
160
- parent.send_type? &&
161
- (parent.method_name == :-@ || parent.method_name == :+@)
200
+ parent.send_type? && (parent.method?(:-@) || parent.method?(:+@))
162
201
  end
163
202
  end
164
203
  end
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  module RuboCop
@@ -22,13 +21,17 @@ module RuboCop
22
21
  # It should be extended to handle methods whose body is if/else
23
22
  # or a case expression with a default branch.
24
23
  class RedundantReturn < Cop
25
- include OnMethodDef
26
-
27
24
  MSG = 'Redundant `return` detected.'.freeze
25
+ MULTI_RETURN_MSG = 'To return multiple values, use an array.'.freeze
28
26
 
29
- private
27
+ def on_def(node)
28
+ return unless node.body
29
+
30
+ check_branch(node.body)
31
+ end
32
+ alias on_defs on_def
30
33
 
31
- def autocorrect(node)
34
+ def autocorrect(node) # rubocop:disable Metrics/MethodLength
32
35
  lambda do |corrector|
33
36
  unless arguments?(node.children)
34
37
  corrector.replace(node.source_range, 'nil')
@@ -39,16 +42,15 @@ module RuboCop
39
42
  if node.children.size > 1
40
43
  add_brackets(corrector, node)
41
44
  elsif return_value.hash_type?
42
- add_braces(corrector, return_value) unless braces?(return_value)
45
+ add_braces(corrector, return_value) unless return_value.braces?
43
46
  end
44
- return_kw = range_with_surrounding_space(node.loc.keyword, :right)
47
+ return_kw = range_with_surrounding_space(range: node.loc.keyword,
48
+ side: :right)
45
49
  corrector.remove(return_kw)
46
50
  end
47
51
  end
48
52
 
49
- def braces?(arg)
50
- arg.loc.begin
51
- end
53
+ private
52
54
 
53
55
  def add_brackets(corrector, node)
54
56
  kids = node.children.map(&:source_range)
@@ -69,18 +71,12 @@ module RuboCop
69
71
  !args.first.begin_type? || !args.first.children.empty?
70
72
  end
71
73
 
72
- def on_method_def(_node, _method_name, _args, body)
73
- return unless body
74
-
75
- if body.type == :return
76
- check_return_node(body)
77
- elsif body.type == :begin
78
- expressions = *body
79
- last_expr = expressions.last
80
-
81
- if last_expr && last_expr.type == :return
82
- check_return_node(last_expr)
83
- end
74
+ def check_branch(node)
75
+ case node.type
76
+ when :return then check_return_node(node)
77
+ when :case then check_case_node(node)
78
+ when :if then check_if_node(node)
79
+ when :begin then check_begin_node(node)
84
80
  end
85
81
  end
86
82
 
@@ -88,7 +84,49 @@ module RuboCop
88
84
  return if cop_config['AllowMultipleReturnValues'] &&
89
85
  node.children.size > 1
90
86
 
91
- add_offense(node, :keyword)
87
+ add_offense(node, location: :keyword)
88
+ end
89
+
90
+ def check_case_node(node)
91
+ _cond, *when_nodes, else_node = *node
92
+ when_nodes.each { |when_node| check_when_node(when_node) }
93
+ check_branch(else_node) if else_node
94
+ end
95
+
96
+ def check_when_node(node)
97
+ return unless node
98
+ _cond, body = *node
99
+ check_branch(body) if body
100
+ end
101
+
102
+ def check_if_node(node)
103
+ return if node.modifier_form? || node.ternary?
104
+
105
+ _cond, if_node, else_node = *node.node_parts
106
+
107
+ check_branch(if_node) if if_node
108
+ check_branch(else_node) if else_node
109
+ end
110
+
111
+ def check_begin_node(node)
112
+ expressions = *node
113
+ last_expr = expressions.last
114
+
115
+ return unless last_expr && last_expr.return_type?
116
+
117
+ check_return_node(last_expr)
118
+ end
119
+
120
+ def allow_multiple_return_values?
121
+ cop_config['AllowMultipleReturnValues'] || false
122
+ end
123
+
124
+ def message(node)
125
+ if !allow_multiple_return_values? && node.children.size > 1
126
+ "#{MSG} #{MULTI_RETURN_MSG}"
127
+ else
128
+ MSG
129
+ end
92
130
  end
93
131
  end
94
132
  end
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  module RuboCop
@@ -6,50 +5,53 @@ module RuboCop
6
5
  module Style
7
6
  # This cop checks for redundant uses of `self`.
8
7
  #
9
- # `self` is only needed when:
8
+ # The usage of `self` is only needed when:
10
9
  #
11
10
  # * Sending a message to same object with zero arguments in
12
11
  # presence of a method name clash with an argument or a local
13
12
  # variable.
14
13
  #
15
- # Note, with using explicit self you can only send messages
16
- # with public or protected scope, you cannot send private
17
- # messages this way.
14
+ # * Calling an attribute writer to prevent an local variable assignment.
18
15
  #
19
- # Example:
16
+ # Note, with using explicit self you can only send messages with public or
17
+ # protected scope, you cannot send private messages this way.
20
18
  #
21
- # def bar
22
- # :baz
19
+ # Note we allow uses of `self` with operators because it would be awkward
20
+ # otherwise.
21
+ #
22
+ # @example
23
+ #
24
+ # # bad
25
+ # def foo(bar)
26
+ # self.baz
23
27
  # end
24
28
  #
29
+ # # good
25
30
  # def foo(bar)
26
- # self.bar # resolves name clash with argument
31
+ # self.bar # Resolves name clash with the argument.
27
32
  # end
28
33
  #
29
- # def foo2
34
+ # def foo
30
35
  # bar = 1
31
- # self.bar # resolves name clash with local variable
36
+ # self.bar # Resolves name clash with the local variable.
32
37
  # end
33
38
  #
34
- # * Calling an attribute writer to prevent an local variable assignment
35
- #
36
- # attr_writer :bar
37
- #
38
39
  # def foo
39
- # self.bar= 1 # Make sure above attr writer is called
40
+ # %w[x y z].select do |bar|
41
+ # self.bar == bar # Resolves name clash with argument of the block.
42
+ # end
40
43
  # end
41
- #
42
- # Special cases:
43
- #
44
- # We allow uses of `self` with operators because it would be awkward
45
- # otherwise.
46
44
  class RedundantSelf < Cop
47
45
  MSG = 'Redundant `self` detected.'.freeze
48
46
 
47
+ def self.autocorrect_incompatible_with
48
+ [ColonMethodCall]
49
+ end
50
+
49
51
  def initialize(config = nil, options = nil)
50
52
  super
51
53
  @allowed_send_nodes = []
52
- @local_variables = []
54
+ @local_variables_scopes = Hash.new { |hash, key| hash[key] = [] }
53
55
  end
54
56
 
55
57
  # Assignment of self.x
@@ -58,7 +60,6 @@ module RuboCop
58
60
  lhs, _rhs = *node
59
61
  allow_self(lhs)
60
62
  end
61
-
62
63
  alias on_and_asgn on_or_asgn
63
64
 
64
65
  def on_op_asgn(node)
@@ -68,13 +69,10 @@ module RuboCop
68
69
 
69
70
  # Using self.x to distinguish from local variable x
70
71
 
71
- def on_def(_node)
72
- @local_variables = []
73
- end
74
-
75
- def on_defs(_node)
76
- @local_variables = []
72
+ def on_def(node)
73
+ add_scope(node)
77
74
  end
75
+ alias on_defs on_def
78
76
 
79
77
  def on_args(node)
80
78
  node.children.each { |arg| on_argument(arg) }
@@ -85,64 +83,68 @@ module RuboCop
85
83
  end
86
84
 
87
85
  def on_lvasgn(node)
88
- lhs, _rhs = *node
89
- @local_variables << lhs
86
+ lhs, rhs = *node
87
+ @local_variables_scopes[rhs] << lhs
90
88
  end
91
89
 
92
- # Detect offenses
93
-
94
90
  def on_send(node)
95
- receiver, method_name, *_args = *node
96
- return unless receiver && receiver.self_type?
97
- return unless regular_method_call?(node)
91
+ return unless node.self_receiver? && regular_method_call?(node)
92
+ return if node.parent && node.parent.mlhs_type?
98
93
 
99
- return if @allowed_send_nodes.include?(node) ||
100
- @local_variables.include?(method_name)
94
+ return if allowed_send_node?(node)
101
95
 
102
- add_offense(node, :expression)
96
+ add_offense(node)
97
+ end
98
+
99
+ def on_block(node)
100
+ add_scope(node, @local_variables_scopes[node])
103
101
  end
104
102
 
105
103
  def autocorrect(node)
106
- receiver, _method_name, *_args = *node
107
104
  lambda do |corrector|
108
- corrector.remove(receiver.source_range)
105
+ corrector.remove(node.receiver.source_range)
109
106
  corrector.remove(node.loc.dot)
110
107
  end
111
108
  end
112
109
 
113
110
  private
114
111
 
115
- def regular_method_call?(node)
116
- _receiver, method_name, *_args = *node
112
+ def add_scope(node, local_variables = [])
113
+ node.descendants.each do |child_node|
114
+ @local_variables_scopes[child_node] = local_variables
115
+ end
116
+ end
117
+
118
+ def allowed_send_node?(node)
119
+ @allowed_send_nodes.include?(node) ||
120
+ @local_variables_scopes[node].include?(node.method_name)
121
+ end
117
122
 
118
- !(operator?(method_name) ||
119
- keyword?(method_name) ||
120
- constant_name?(method_name) ||
121
- node.asgn_method_call?)
123
+ def regular_method_call?(node)
124
+ !(operator?(node.method_name) ||
125
+ keyword?(node.method_name) ||
126
+ node.camel_case_method? ||
127
+ node.setter_method? ||
128
+ node.implicit_call?)
122
129
  end
123
130
 
124
131
  def on_argument(node)
125
132
  name, = *node
126
- @local_variables << name
133
+ @local_variables_scopes[node] << name
127
134
  end
128
135
 
129
136
  def keyword?(method_name)
130
- [:alias, :and, :begin, :break, :case, :class, :def, :defined?, :do,
131
- :else, :elsif, :end, :ensure, :false, :for, :if, :in, :module,
132
- :next, :nil, :not, :or, :redo, :rescue, :retry, :return, :self,
133
- :super, :then, :true, :undef, :unless, :until, :when, :while,
134
- :yield].include?(method_name)
135
- end
136
-
137
- def constant_name?(method_name)
138
- method_name.match(/^[A-Z]/)
137
+ %i[alias and begin break case class def defined? do
138
+ else elsif end ensure false for if in module
139
+ next nil not or redo rescue retry return self
140
+ super then true undef unless until when while
141
+ yield].include?(method_name)
139
142
  end
140
143
 
141
144
  def allow_self(node)
142
- return unless node.type == :send
145
+ return unless node.send_type? && node.self_receiver?
143
146
 
144
- receiver, _method_name, *_args = *node
145
- @allowed_send_nodes << node if receiver && receiver.type == :self
147
+ @allowed_send_nodes << node
146
148
  end
147
149
  end
148
150
  end