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
@@ -1,31 +0,0 @@
1
- # encoding: utf-8
2
- # frozen_string_literal: true
3
-
4
- module RuboCop
5
- class Node
6
- # `RuboCop::Builder` is an AST builder that is utilized to let `Parser`
7
- # generate ASTs with {RuboCop::Node}.
8
- #
9
- # @example
10
- # buffer = Parser::Source::Buffer.new('(string)')
11
- # buffer.source = 'puts :foo'
12
- #
13
- # builder = RuboCop::Builder.new
14
- # parser = Parser::CurrentRuby.new(builder)
15
- # root_node = parser.parse(buffer)
16
- class Builder < Parser::Builders::Default
17
- # Generates {Node} from the given information.
18
- #
19
- # @return [Node] the generated node
20
- def n(type, children, source_map)
21
- Node.new(type, children, location: source_map)
22
- end
23
-
24
- # TODO: Figure out what to do about literal encoding handling...
25
- # More details here https://github.com/whitequark/parser/issues/283
26
- def string_value(token)
27
- value(token)
28
- end
29
- end
30
- end
31
- end
@@ -1,14 +0,0 @@
1
- # encoding: utf-8
2
- # frozen_string_literal: true
3
-
4
- module RuboCop
5
- # This module provides a shorthand method to create a {Node} like `AST::Sexp`.
6
- #
7
- # @see http://rubydoc.info/gems/ast/AST/Sexp
8
- module Sexp
9
- # Creates a {Node} with type `type` and children `children`.
10
- def s(type, *children)
11
- Node.new(type, children)
12
- end
13
- end
14
- end
@@ -1,623 +0,0 @@
1
- # encoding: utf-8
2
- # frozen_string_literal: true
3
-
4
- module RuboCop
5
- # `RuboCop::Node` is a subclass of `Parser::AST::Node`. It provides access to
6
- # parent nodes and an object-oriented way to traverse an AST with the power
7
- # of `Enumerable`.
8
- #
9
- # It has predicate methods for every node type, like this:
10
- #
11
- # @example
12
- # node.send_type? # Equivalent to: `node.type == :send`
13
- # node.op_asgn_type? # Equivalent to: `node.type == :op_asgn`
14
- #
15
- # # Non-word characters (other than a-zA-Z0-9_) in type names are omitted.
16
- # node.defined_type? # Equivalent to: `node.type == :defined?`
17
- #
18
- # # Find the first lvar node under the receiver node.
19
- # lvar_node = node.each_descendant.find(&:lvar_type?)
20
- #
21
- class Node < Parser::AST::Node # rubocop:disable Metrics/ClassLength
22
- include RuboCop::Sexp
23
-
24
- COMPARISON_OPERATORS = [:!, :==, :===, :!=, :<=, :>=, :>, :<, :<=>].freeze
25
-
26
- TRUTHY_LITERALS = [:str, :dstr, :xstr, :int, :float, :sym, :dsym, :array,
27
- :hash, :regexp, :true, :irange, :erange, :complex,
28
- :rational, :regopt].freeze
29
- FALSEY_LITERALS = [:false, :nil].freeze
30
- LITERALS = (TRUTHY_LITERALS + FALSEY_LITERALS).freeze
31
- COMPOSITE_LITERALS = [:dstr, :xstr, :dsym, :array, :hash, :irange,
32
- :erange, :regexp].freeze
33
- BASIC_LITERALS = (LITERALS - COMPOSITE_LITERALS).freeze
34
- MUTABLE_LITERALS = [:str, :dstr, :xstr, :array, :hash].freeze
35
- IMMUTABLE_LITERALS = (LITERALS - MUTABLE_LITERALS).freeze
36
-
37
- VARIABLES = [:ivar, :gvar, :cvar, :lvar].freeze
38
- REFERENCES = [:nth_ref, :back_ref].freeze
39
- KEYWORDS = [:alias, :and, :break, :case, :class, :def, :defs, :defined?,
40
- :kwbegin, :do, :else, :ensure, :for, :if, :module, :next, :not,
41
- :or, :postexe, :redo, :rescue, :retry, :return, :self, :super,
42
- :zsuper, :then, :undef, :until, :when, :while, :yield].freeze
43
- OPERATOR_KEYWORDS = [:and, :or].freeze
44
- SPECIAL_KEYWORDS = %w(__FILE__ __LINE__ __ENCODING__).freeze
45
-
46
- # def_matcher can be used to define a pattern-matching method on Node
47
- class << self
48
- def def_matcher(method_name, pattern_str)
49
- compiler = RuboCop::NodePattern::Compiler.new(pattern_str, 'self')
50
- src = "def #{method_name}(" \
51
- "#{compiler.emit_param_list});" \
52
- "#{compiler.emit_method_code};end"
53
-
54
- file, lineno = *caller.first.split(':')
55
- class_eval(src, file, lineno.to_i)
56
- end
57
- end
58
-
59
- # @see http://rubydoc.info/gems/ast/AST/Node:initialize
60
- def initialize(type, children = [], properties = {})
61
- @mutable_attributes = {}
62
-
63
- # ::AST::Node#initialize freezes itself.
64
- super
65
-
66
- # #parent= may be invoked multiple times for a node because there are
67
- # pending nodes while constructing AST and they are replaced later.
68
- # For example, `lvar` and `send` type nodes are initially created as an
69
- # `ident` type node and fixed to the appropriate type later.
70
- # So, the #parent attribute needs to be mutable.
71
- each_child_node do |child_node|
72
- child_node.parent = self unless child_node.complete?
73
- end
74
- end
75
-
76
- Parser::Meta::NODE_TYPES.each do |node_type|
77
- method_name = "#{node_type.to_s.gsub(/\W/, '')}_type?"
78
- define_method(method_name) do
79
- type == node_type
80
- end
81
- end
82
-
83
- # Returns the parent node, or `nil` if the receiver is a root node.
84
- #
85
- # @return [Node, nil] the parent node or `nil`
86
- def parent
87
- @mutable_attributes[:parent]
88
- end
89
-
90
- def parent=(node)
91
- @mutable_attributes[:parent] = node
92
- end
93
-
94
- def complete!
95
- @mutable_attributes.freeze
96
- each_child_node(&:complete!)
97
- end
98
-
99
- def complete?
100
- @mutable_attributes.frozen?
101
- end
102
-
103
- protected :parent=
104
-
105
- # Override `AST::Node#updated` so that `AST::Processor` does not try to
106
- # mutate our ASTs. Since we keep references from children to parents and
107
- # not just the other way around, we cannot update an AST and share identical
108
- # subtrees. Rather, the entire AST must be copied any time any part of it
109
- # is changed.
110
- #
111
- def updated(type = nil, children = nil, properties = {})
112
- properties[:location] ||= @location
113
- Node.new(type || @type, children || @children, properties)
114
- end
115
-
116
- # Returns the index of the receiver node in its siblings. (Sibling index
117
- # uses zero based numbering.)
118
- #
119
- # @return [Integer] the index of the receiver node in its siblings
120
- def sibling_index
121
- parent.children.index { |sibling| sibling.equal?(self) }
122
- end
123
-
124
- # Calls the given block for each ancestor node from parent to root.
125
- # If no block is given, an `Enumerator` is returned.
126
- #
127
- # @overload each_ancestor
128
- # Yield all nodes.
129
- # @overload each_ancestor(type)
130
- # Yield only nodes matching the type.
131
- # @param [Symbol] type a node type
132
- # @overload each_ancestor(type_a, type_b, ...)
133
- # Yield only nodes matching any of the types.
134
- # @param [Symbol] type_a a node type
135
- # @param [Symbol] type_b a node type
136
- # @overload each_ancestor(types)
137
- # Yield only nodes matching any of types in the array.
138
- # @param [Array<Symbol>] types an array containing node types
139
- # @yieldparam [Node] node each ancestor node
140
- # @return [self] if a block is given
141
- # @return [Enumerator] if no block is given
142
- def each_ancestor(*types, &block)
143
- return to_enum(__method__, *types) unless block_given?
144
-
145
- if types.empty?
146
- visit_ancestors(&block)
147
- else
148
- visit_ancestors_with_types(types, &block)
149
- end
150
-
151
- self
152
- end
153
-
154
- # Returns an array of ancestor nodes.
155
- # This is a shorthand for `node.each_ancestor.to_a`.
156
- #
157
- # @return [Array<Node>] an array of ancestor nodes
158
- def ancestors
159
- each_ancestor.to_a
160
- end
161
-
162
- # Calls the given block for each child node.
163
- # If no block is given, an `Enumerator` is returned.
164
- #
165
- # Note that this is different from `node.children.each { |child| ... }`
166
- # which yields all children including non-node elements.
167
- #
168
- # @overload each_child_node
169
- # Yield all nodes.
170
- # @overload each_child_node(type)
171
- # Yield only nodes matching the type.
172
- # @param [Symbol] type a node type
173
- # @overload each_child_node(type_a, type_b, ...)
174
- # Yield only nodes matching any of the types.
175
- # @param [Symbol] type_a a node type
176
- # @param [Symbol] type_b a node type
177
- # @overload each_child_node(types)
178
- # Yield only nodes matching any of types in the array.
179
- # @param [Array<Symbol>] types an array containing node types
180
- # @yieldparam [Node] node each child node
181
- # @return [self] if a block is given
182
- # @return [Enumerator] if no block is given
183
- def each_child_node(*types)
184
- return to_enum(__method__, *types) unless block_given?
185
-
186
- children.each do |child|
187
- next unless child.is_a?(Node)
188
- yield child if types.empty? || types.include?(child.type)
189
- end
190
-
191
- self
192
- end
193
-
194
- # Returns an array of child nodes.
195
- # This is a shorthand for `node.each_child_node.to_a`.
196
- #
197
- # @return [Array<Node>] an array of child nodes
198
- def child_nodes
199
- each_child_node.to_a
200
- end
201
-
202
- # Calls the given block for each descendant node with depth first order.
203
- # If no block is given, an `Enumerator` is returned.
204
- #
205
- # @overload each_descendant
206
- # Yield all nodes.
207
- # @overload each_descendant(type)
208
- # Yield only nodes matching the type.
209
- # @param [Symbol] type a node type
210
- # @overload each_descendant(type_a, type_b, ...)
211
- # Yield only nodes matching any of the types.
212
- # @param [Symbol] type_a a node type
213
- # @param [Symbol] type_b a node type
214
- # @overload each_descendant(types)
215
- # Yield only nodes matching any of types in the array.
216
- # @param [Array<Symbol>] types an array containing node types
217
- # @yieldparam [Node] node each descendant node
218
- # @return [self] if a block is given
219
- # @return [Enumerator] if no block is given
220
- def each_descendant(*types, &block)
221
- return to_enum(__method__, *types) unless block_given?
222
-
223
- if types.empty?
224
- visit_descendants(&block)
225
- else
226
- visit_descendants_with_types(types, &block)
227
- end
228
-
229
- self
230
- end
231
-
232
- # Returns an array of descendant nodes.
233
- # This is a shorthand for `node.each_descendant.to_a`.
234
- #
235
- # @return [Array<Node>] an array of descendant nodes
236
- def descendants
237
- each_descendant.to_a
238
- end
239
-
240
- # Calls the given block for the receiver and each descendant node in
241
- # depth-first order.
242
- # If no block is given, an `Enumerator` is returned.
243
- #
244
- # This method would be useful when you treat the receiver node as the root
245
- # of a tree and want to iterate over all nodes in the tree.
246
- #
247
- # @overload each_node
248
- # Yield all nodes.
249
- # @overload each_node(type)
250
- # Yield only nodes matching the type.
251
- # @param [Symbol] type a node type
252
- # @overload each_node(type_a, type_b, ...)
253
- # Yield only nodes matching any of the types.
254
- # @param [Symbol] type_a a node type
255
- # @param [Symbol] type_b a node type
256
- # @overload each_node(types)
257
- # Yield only nodes matching any of types in the array.
258
- # @param [Array<Symbol>] types an array containing node types
259
- # @yieldparam [Node] node each node
260
- # @return [self] if a block is given
261
- # @return [Enumerator] if no block is given
262
- def each_node(*types, &block)
263
- return to_enum(__method__, *types) unless block_given?
264
-
265
- yield self if types.empty? || types.include?(type)
266
-
267
- if types.empty?
268
- visit_descendants(&block)
269
- else
270
- visit_descendants_with_types(types, &block)
271
- end
272
-
273
- self
274
- end
275
-
276
- def source
277
- loc.expression.source
278
- end
279
-
280
- def source_range
281
- loc.expression
282
- end
283
-
284
- ## Destructuring
285
-
286
- def_matcher :receiver, '{(send $_ ...) (block (send $_ ...) ...)}'
287
- def_matcher :method_name, '{(send _ $_ ...) (block (send _ $_ ...) ...)}'
288
- def_matcher :method_args, '{(send _ _ $...) (block (send _ _ $...) ...)}'
289
- # Note: for masgn, #asgn_rhs will be an array node
290
- def_matcher :asgn_rhs, '[assignment? (... $_)]'
291
- def_matcher :str_content, '(str $_)'
292
-
293
- def const_name
294
- return unless const_type?
295
- namespace, name = *self
296
- if namespace && !namespace.cbase_type?
297
- "#{namespace.const_name}::#{name}"
298
- else
299
- name.to_s
300
- end
301
- end
302
-
303
- def_matcher :defined_module0, <<-PATTERN
304
- {(class (const $_ $_) ...)
305
- (module (const $_ $_) ...)
306
- (casgn $_ $_ (send (const nil {:Class :Module}) :new ...))
307
- (casgn $_ $_ (block (send (const nil {:Class :Module}) :new ...) ...))}
308
- PATTERN
309
- private :defined_module0
310
-
311
- def defined_module
312
- namespace, name = *defined_module0
313
- s(:const, namespace, name) if name
314
- end
315
-
316
- def defined_module_name
317
- (const = defined_module) && const.const_name
318
- end
319
-
320
- ## Searching the AST
321
-
322
- def parent_module_name
323
- # what class or module is this method/constant/etc definition in?
324
- # returns nil if answer cannot be determined
325
- ancestors = each_ancestor(:class, :module, :sclass, :casgn, :block)
326
- result = ancestors.map do |ancestor|
327
- parent_module_name_part(ancestor) { |full_name| return full_name }
328
- end.compact.reverse.join('::')
329
- result.empty? ? 'Object' : result
330
- end
331
-
332
- ## Predicates
333
-
334
- def modifier_form?
335
- loc.respond_to?(:end) && loc.end.nil?
336
- end
337
-
338
- def multiline?
339
- expr = loc.expression
340
- expr && (expr.first_line != expr.last_line)
341
- end
342
-
343
- def single_line?
344
- !multiline?
345
- end
346
-
347
- def asgn_method_call?
348
- !COMPARISON_OPERATORS.include?(method_name) &&
349
- method_name.to_s.end_with?('='.freeze)
350
- end
351
-
352
- def_matcher :equals_asgn?, '{lvasgn ivasgn cvasgn gvasgn casgn masgn}'
353
- def_matcher :shorthand_asgn?, '{op_asgn or_asgn and_asgn}'
354
- def_matcher :assignment?, '{equals_asgn? shorthand_asgn? asgn_method_call?}'
355
-
356
- def literal?
357
- LITERALS.include?(type)
358
- end
359
-
360
- def basic_literal?
361
- BASIC_LITERALS.include?(type)
362
- end
363
-
364
- def truthy_literal?
365
- TRUTHY_LITERALS.include?(type)
366
- end
367
-
368
- def falsey_literal?
369
- FALSEY_LITERALS.include?(type)
370
- end
371
-
372
- def mutable_literal?
373
- MUTABLE_LITERALS.include?(type)
374
- end
375
-
376
- def immutable_literal?
377
- IMMUTABLE_LITERALS.include?(type)
378
- end
379
-
380
- [:literal, :basic_literal].each do |kind|
381
- recursive_kind = :"recursive_#{kind}?"
382
- kind_filter = :"#{kind}?"
383
- define_method(recursive_kind) do
384
- case type
385
- when :send
386
- receiver, method_name, *args = *self
387
- COMPARISON_OPERATORS.include?(method_name) &&
388
- receiver.send(recursive_kind) &&
389
- args.all?(&recursive_kind)
390
- when :begin, :pair, *OPERATOR_KEYWORDS, *COMPOSITE_LITERALS
391
- children.all?(&recursive_kind)
392
- else
393
- send(kind_filter)
394
- end
395
- end
396
- end
397
-
398
- def variable?
399
- VARIABLES.include?(type)
400
- end
401
-
402
- def reference?
403
- REFERENCES.include?(type)
404
- end
405
-
406
- def keyword?
407
- return true if special_keyword? || keyword_not?
408
- return false unless KEYWORDS.include?(type)
409
-
410
- !OPERATOR_KEYWORDS.include?(type) || loc.operator.is?(type.to_s)
411
- end
412
-
413
- def special_keyword?
414
- SPECIAL_KEYWORDS.include?(source)
415
- end
416
-
417
- def keyword_not?
418
- _receiver, method_name, *args = *self
419
- args.empty? && method_name == :! && loc.selector.is?('not'.freeze)
420
- end
421
-
422
- def keyword_bang?
423
- _receiver, method_name, *args = *self
424
- args.empty? && method_name == :! && loc.selector.is?('!'.freeze)
425
- end
426
-
427
- def unary_operation?
428
- return false unless loc.respond_to?(:selector) && loc.selector
429
- Cop::Util.operator?(loc.selector.source.to_sym) &&
430
- source_range.begin_pos == loc.selector.begin_pos
431
- end
432
-
433
- def binary_operation?
434
- return false unless loc.respond_to?(:selector) && loc.selector
435
- Cop::Util.operator?(method_name) &&
436
- source_range.begin_pos != loc.selector.begin_pos
437
- end
438
-
439
- def chained?
440
- return false if parent.nil? || !parent.send_type?
441
- receiver, _method_name, *_args = *parent
442
- equal?(receiver)
443
- end
444
-
445
- def_matcher :command?, '(send nil %1 ...)'
446
- def_matcher :lambda?, '(block (send nil :lambda) ...)'
447
- def_matcher :proc?, <<-PATTERN
448
- {(block (send nil :proc) ...)
449
- (block (send (const nil :Proc) :new) ...)
450
- (send (const nil :Proc) :new)}
451
- PATTERN
452
- def_matcher :lambda_or_proc?, '{lambda? proc?}'
453
-
454
- def_matcher :class_constructor?, <<-PATTERN
455
- { (send (const nil {:Class :Module}) :new ...)
456
- (block (send (const nil {:Class :Module}) :new ...) ...)}
457
- PATTERN
458
-
459
- def_matcher :module_definition?, <<-PATTERN
460
- {class module (casgn _ _ class_constructor?)}
461
- PATTERN
462
-
463
- # Some expressions are evaluated for their value, some for their side
464
- # effects, and some for both
465
- # If we know that an expression is useful only for its side effects, that
466
- # means we can transform it in ways which preserve the side effects, but
467
- # change the return value
468
- # So, does the return value of this node matter? If we changed it to
469
- # `(...; nil)`, might that affect anything?
470
- #
471
- def value_used?
472
- # Be conservative and return true if we're not sure
473
- return false if parent.nil?
474
-
475
- case parent.type
476
- when :array, :defined?, :dstr, :dsym, :eflipflop, :erange, :float,
477
- :hash, :iflipflop, :irange, :not, :pair, :regexp, :str, :sym, :when,
478
- :xstr
479
- parent.value_used?
480
- when :begin, :kwbegin
481
- begin_value_used?
482
- when :for
483
- for_value_used?
484
- when :case, :if
485
- case_if_value_used?
486
- when :while, :until, :while_post, :until_post
487
- while_until_value_used?
488
- else
489
- true
490
- end
491
- end
492
-
493
- # Some expressions are evaluated for their value, some for their side
494
- # effects, and some for both
495
- # If we know that expressions are useful only for their return values, and
496
- # have no side effects, that means we can reorder them, change the number
497
- # of times they are evaluated, or replace them with other expressions which
498
- # are equivalent in value
499
- # So, is evaluation of this node free of side effects?
500
- #
501
- def pure?
502
- # Be conservative and return false if we're not sure
503
- case type
504
- when :__FILE__, :__LINE__, :const, :cvar, :defined?, :false, :float,
505
- :gvar, :int, :ivar, :lvar, :nil, :str, :sym, :true, :regopt
506
- true
507
- when :and, :array, :begin, :case, :dstr, :dsym, :eflipflop, :ensure,
508
- :erange, :for, :hash, :if, :iflipflop, :irange, :kwbegin, :not, :or,
509
- :pair, :regexp, :until, :until_post, :when, :while, :while_post
510
- child_nodes.all?(&:pure?)
511
- else
512
- false
513
- end
514
- end
515
-
516
- protected
517
-
518
- def visit_descendants(&block)
519
- children.each do |child|
520
- next unless child.is_a?(Node)
521
- yield child
522
- child.visit_descendants(&block)
523
- end
524
- end
525
-
526
- def visit_descendants_with_types(types, &block)
527
- children.each do |child|
528
- next unless child.is_a?(Node)
529
- yield child if types.include?(child.type)
530
- child.visit_descendants_with_types(types, &block)
531
- end
532
- end
533
-
534
- private
535
-
536
- def visit_ancestors
537
- last_node = self
538
-
539
- while (current_node = last_node.parent)
540
- yield current_node
541
- last_node = current_node
542
- end
543
- end
544
-
545
- def visit_ancestors_with_types(types)
546
- last_node = self
547
-
548
- while (current_node = last_node.parent)
549
- yield current_node if types.include?(current_node.type)
550
- last_node = current_node
551
- end
552
- end
553
-
554
- def begin_value_used?
555
- # the last child node determines the value of the parent
556
- sibling_index == parent.children.size - 1 ? parent.value_used? : false
557
- end
558
-
559
- def for_value_used?
560
- # `for var in enum; body; end`
561
- # (for <var> <enum> <body>)
562
- sibling_index == 2 ? parent.value_used? : true
563
- end
564
-
565
- def case_if_value_used?
566
- # (case <condition> <when...>)
567
- # (if <condition> <truebranch> <falsebranch>)
568
- sibling_index.zero? ? true : parent.value_used?
569
- end
570
-
571
- def while_until_value_used?
572
- # (while <condition> <body>) -> always evaluates to `nil`
573
- sibling_index.zero?
574
- end
575
-
576
- def parent_module_name_part(node)
577
- case node.type
578
- when :class, :module, :casgn
579
- # TODO: if constant name has cbase (leading ::), then we don't need
580
- # to keep traversing up through nested classes/modules
581
- node.defined_module_name
582
- when :sclass
583
- yield parent_module_name_for_sclass(node)
584
- else # block
585
- parent_module_name_for_block(node) { yield nil }
586
- end
587
- end
588
-
589
- def parent_module_name_for_sclass(sclass_node)
590
- # TODO: look for constant definition and see if it is nested
591
- # inside a class or module
592
- subject = sclass_node.children[0]
593
-
594
- if subject.const_type?
595
- "#<Class:#{subject.const_name}>"
596
- elsif subject.self_type?
597
- "#<Class:#{sclass_node.parent_module_name}>"
598
- end
599
- end
600
-
601
- def parent_module_name_for_block(ancestor)
602
- if ancestor.method_name == :class_eval
603
- # `class_eval` with no receiver applies to whatever module or class
604
- # we are currently in
605
- return unless (receiver = ancestor.receiver)
606
- yield unless receiver.const_type?
607
- receiver.const_name
608
- elsif !new_class_or_module_block?(ancestor)
609
- yield
610
- end
611
- end
612
-
613
- def new_class_or_module_block?(block_node)
614
- receiver = block_node.receiver
615
-
616
- block_node.method_name == :new &&
617
- receiver && receiver.const_type? &&
618
- (receiver.const_name == 'Class' || receiver.const_name == 'Module') &&
619
- block_node.parent &&
620
- block_node.parent.casgn_type?
621
- end
622
- end
623
- end
@@ -1,23 +0,0 @@
1
- # encoding: utf-8
2
- # frozen_string_literal: true
3
-
4
- module RuboCop
5
- module Cop
6
- module Lint
7
- # This cop checks for the use of *Kernel#eval*.
8
- class Eval < Cop
9
- MSG = 'The use of `eval` is a serious security risk.'.freeze
10
-
11
- def on_send(node)
12
- receiver, method_name, *args = *node
13
-
14
- return unless receiver.nil? &&
15
- method_name == :eval &&
16
- !args.empty? &&
17
- args.first.type != :str
18
- add_offense(node, :selector)
19
- end
20
- end
21
- end
22
- end
23
- end