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,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  require 'net/http'
@@ -7,6 +6,8 @@ require 'time'
7
6
  module RuboCop
8
7
  # Common methods and behaviors for dealing with remote config files.
9
8
  class RemoteConfig
9
+ attr_reader :uri
10
+
10
11
  CACHE_LIFETIME = 24 * 60 * 60
11
12
 
12
13
  def initialize(url, base_dir)
@@ -17,25 +18,51 @@ module RuboCop
17
18
  def file
18
19
  return cache_path unless cache_path_expired?
19
20
 
20
- http = Net::HTTP.new(@uri.hostname, @uri.port)
21
- http.use_ssl = true if @uri.instance_of? URI::HTTPS
21
+ request do |response|
22
+ next if response.is_a?(Net::HTTPNotModified)
23
+ next if response.is_a?(SocketError)
24
+ open cache_path, 'w' do |io|
25
+ io.write response.body
26
+ end
27
+ end
28
+
29
+ cache_path
30
+ end
31
+
32
+ def inherit_from_remote(file, path)
33
+ new_uri = @uri.dup
34
+ new_uri.path.gsub!(%r{/[^/]*$}, "/#{file}")
35
+ RemoteConfig.new(new_uri.to_s, File.dirname(path))
36
+ end
37
+
38
+ private
39
+
40
+ def request(uri = @uri, limit = 10, &block)
41
+ raise ArgumentError, 'HTTP redirect too deep' if limit.zero?
22
42
 
23
- request = Net::HTTP::Get.new(@uri.request_uri)
43
+ http = Net::HTTP.new(uri.hostname, uri.port)
44
+ http.use_ssl = true if uri.instance_of? URI::HTTPS
45
+
46
+ request = Net::HTTP::Get.new(uri.request_uri)
24
47
  if cache_path_exists?
25
48
  request['If-Modified-Since'] = File.stat(cache_path).mtime.rfc2822
26
49
  end
27
- response = http.request(request)
28
50
 
29
- cache_path.tap do |f|
30
- if response.is_a?(Net::HTTPSuccess)
31
- open f, 'w' do |io|
32
- io.write response.body
33
- end
34
- end
35
- end
51
+ handle_response(http.request(request), limit, &block)
52
+ rescue SocketError => err
53
+ handle_response(err, limit, &block)
36
54
  end
37
55
 
38
- private
56
+ def handle_response(response, limit, &block)
57
+ case response
58
+ when Net::HTTPSuccess, Net::HTTPNotModified, SocketError
59
+ yield response
60
+ when Net::HTTPRedirection
61
+ request(URI.parse(response['location']), limit - 1, &block)
62
+ else
63
+ response.error!
64
+ end
65
+ end
39
66
 
40
67
  def cache_path
41
68
  File.expand_path(".rubocop-#{cache_name_from_uri}", @base_dir)
@@ -1,16 +1,14 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  require 'digest/md5'
5
4
  require 'find'
6
- require 'tmpdir'
7
5
  require 'etc'
8
6
 
9
7
  module RuboCop
10
8
  # Provides functionality for caching rubocop runs.
11
9
  class ResultCache
12
- NON_CHANGING = [:color, :format, :formatters, :out, :debug, :fail_level,
13
- :cache, :fail_fast, :stdin].freeze
10
+ NON_CHANGING = %i[color format formatters out debug fail_level
11
+ cache fail_fast stdin parallel].freeze
14
12
 
15
13
  # Remove old files so that the cache doesn't grow too big. When the
16
14
  # threshold MaxFilesInCache has been exceeded, the oldest 50% of all the
@@ -24,8 +22,20 @@ module RuboCop
24
22
  return unless File.exist?(cache_root)
25
23
 
26
24
  files, dirs = Find.find(cache_root).partition { |path| File.file?(path) }
27
- if files.length > config_store.for('.').for_all_cops['MaxFilesInCache'] &&
28
- files.length > 1
25
+ return unless requires_file_removal?(files.length, config_store)
26
+
27
+ remove_oldest_files(files, dirs, cache_root, verbose)
28
+ end
29
+
30
+ class << self
31
+ private
32
+
33
+ def requires_file_removal?(file_count, config_store)
34
+ file_count > 1 &&
35
+ file_count > config_store.for('.').for_all_cops['MaxFilesInCache']
36
+ end
37
+
38
+ def remove_oldest_files(files, dirs, cache_root, verbose)
29
39
  # Add 1 to half the number of files, so that we remove the file if
30
40
  # there's only 1 left.
31
41
  remove_count = 1 + files.length / 2
@@ -33,34 +43,32 @@ module RuboCop
33
43
  puts "Removing the #{remove_count} oldest files from #{cache_root}"
34
44
  end
35
45
  sorted = files.sort_by { |path| File.mtime(path) }
36
- remove_files(sorted, dirs, remove_count, verbose)
46
+ remove_files(sorted, dirs, remove_count)
47
+ rescue Errno::ENOENT
48
+ # This can happen if parallel RuboCop invocations try to remove the
49
+ # same files. No problem.
50
+ puts $ERROR_INFO if verbose
37
51
  end
38
- end
39
-
40
- class << self
41
- private
42
52
 
43
- def remove_files(files, dirs, remove_count, verbose)
53
+ def remove_files(files, dirs, remove_count)
44
54
  # Batch file deletions, deleting over 130,000+ files will crash
45
55
  # File.delete.
46
56
  files[0, remove_count].each_slice(10_000).each do |files_slice|
47
57
  File.delete(*files_slice)
48
58
  end
49
59
  dirs.each { |dir| Dir.rmdir(dir) if Dir["#{dir}/*"].empty? }
50
- rescue Errno::ENOENT
51
- # This can happen if parallel RuboCop invocations try to remove the
52
- # same files. No problem.
53
- puts $ERROR_INFO if verbose
54
60
  end
55
61
  end
56
62
 
57
63
  def self.cache_root(config_store)
58
64
  root = config_store.for('.').for_all_cops['CacheRootDirectory']
59
- if root == '/tmp'
60
- tmpdir = File.realpath(Dir.tmpdir)
61
- # Include user ID in the path to make sure the user has write access.
62
- root = File.join(tmpdir, Process.uid.to_s)
63
- end
65
+ root ||= if ENV.key?('XDG_CACHE_HOME')
66
+ # Include user ID in the path to make sure the user has write
67
+ # access.
68
+ File.join(ENV['XDG_CACHE_HOME'], Process.uid.to_s)
69
+ else
70
+ File.join(ENV['HOME'], '.cache')
71
+ end
64
72
  File.join(root, 'rubocop_cache')
65
73
  end
66
74
 
@@ -83,7 +91,7 @@ module RuboCop
83
91
  end
84
92
 
85
93
  def load
86
- @cached_data.from_json(IO.binread(@path))
94
+ @cached_data.from_json(IO.read(@path, encoding: Encoding::UTF_8))
87
95
  end
88
96
 
89
97
  def save(offenses)
@@ -95,7 +103,7 @@ module RuboCop
95
103
  # indication that a symlink attack is being waged.
96
104
  return if symlink_protection_triggered?(dir)
97
105
 
98
- File.open(preliminary_path, 'wb') do |f|
106
+ File.open(preliminary_path, 'w', encoding: Encoding::UTF_8) do |f|
99
107
  f.write(@cached_data.to_json(offenses))
100
108
  end
101
109
  # The preliminary path is used so that if there are multiple RuboCop
@@ -125,6 +133,7 @@ module RuboCop
125
133
 
126
134
  def file_checksum(file, config_store)
127
135
  Digest::MD5.hexdigest(Dir.pwd + file + IO.read(file) +
136
+ File.stat(file).mode.to_s +
128
137
  config_store.for(file).to_s)
129
138
  rescue Errno::ENOENT
130
139
  # Spurious files that come and go should not cause a crash, at least not
@@ -150,7 +159,7 @@ module RuboCop
150
159
  sources = source_files
151
160
  .select { |path| File.file?(path) }
152
161
  .sort
153
- .map { |path| IO.read(path) }
162
+ .map { |path| IO.read(path, encoding: Encoding::UTF_8) }
154
163
  Digest::MD5.hexdigest(sources.join)
155
164
  end
156
165
  end
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  require 'tempfile'
@@ -8,12 +7,18 @@ module CopHelper
8
7
  extend RSpec::SharedContext
9
8
 
10
9
  let(:ruby_version) { 2.2 }
10
+ let(:enabled_rails) { false }
11
+ let(:rails_version) { false }
11
12
 
12
- def inspect_source_file(cop, source)
13
- Tempfile.open('tmp') { |f| inspect_source(cop, source, f) }
13
+ def inspect_source_file(source)
14
+ Tempfile.open('tmp') { |f| inspect_source(source, f) }
14
15
  end
15
16
 
16
- def inspect_source(cop, source, file = nil)
17
+ def inspect_gemfile(source)
18
+ inspect_source(source, 'Gemfile')
19
+ end
20
+
21
+ def inspect_source(source, file = nil)
17
22
  if source.is_a?(Array) && source.size == 1
18
23
  raise "Don't use an array for a single line of code: #{source}"
19
24
  end
@@ -36,11 +41,11 @@ module CopHelper
36
41
  RuboCop::ProcessedSource.new(source, ruby_version, file)
37
42
  end
38
43
 
39
- def autocorrect_source_file(cop, source)
40
- Tempfile.open('tmp') { |f| autocorrect_source(cop, source, f) }
44
+ def autocorrect_source_file(source)
45
+ Tempfile.open('tmp') { |f| autocorrect_source(source, f) }
41
46
  end
42
47
 
43
- def autocorrect_source(cop, source, file = nil)
48
+ def autocorrect_source(source, file = nil)
44
49
  cop.instance_variable_get(:@options)[:auto_correct] = true
45
50
  processed_source = parse_source(source, file)
46
51
  _investigate(cop, processed_source)
@@ -50,6 +55,15 @@ module CopHelper
50
55
  corrector.rewrite
51
56
  end
52
57
 
58
+ def autocorrect_source_with_loop(source, file = nil)
59
+ loop do
60
+ cop.instance_variable_set(:@corrections, [])
61
+ new_source = autocorrect_source(source, file)
62
+ return new_source if new_source == source
63
+ source = new_source
64
+ end
65
+ end
66
+
53
67
  def _investigate(cop, processed_source)
54
68
  forces = RuboCop::Cop::Force.all.each_with_object([]) do |klass, instances|
55
69
  next unless cop.join_force?(klass)
@@ -0,0 +1,165 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module RSpec
5
+ # Mixin for `expect_offense` and `expect_no_offenses`
6
+ #
7
+ # This mixin makes it easier to specify strict offense expectations
8
+ # and a declarative and visual fashion. Just type out the code that
9
+ # should generate a offense, annotate code by writing '^'s
10
+ # underneath each character that should be highlighted, and follow
11
+ # the carets with a string (separated by a space) that is the
12
+ # message of the offense. You can include multiple offenses in
13
+ # one code snippet.
14
+ #
15
+ # @example Usage
16
+ #
17
+ # expect_offense(<<-RUBY.strip_indent)
18
+ # a do
19
+ # b
20
+ # end.c
21
+ # ^^^^^ Avoid chaining a method call on a do...end block.
22
+ # RUBY
23
+ #
24
+ # @example Equivalent assertion without `expect_offense`
25
+ #
26
+ # inspect_source(<<-RUBY.strip_indent)
27
+ # a do
28
+ # b
29
+ # end.c
30
+ # RUBY
31
+ #
32
+ # expect(cop.offenses.size).to be(1)
33
+ #
34
+ # offense = cop.offenses.first
35
+ # expect(offense.line).to be(3)
36
+ # expect(offense.column_range).to be(0...5)
37
+ # expect(offense.message).to eql(
38
+ # 'Avoid chaining a method call on a do...end block.'
39
+ # )
40
+ #
41
+ # If you do not want to specify an offense then use the
42
+ # companion method `expect_no_offenses`. This method is a much
43
+ # simpler assertion since it just inspects the source and checks
44
+ # that there were no offenses. The `expect_offenses` method has
45
+ # to do more work by parsing out lines that contain carets.
46
+ module ExpectOffense
47
+ def expect_offense(source, file = nil)
48
+ expected_annotations = AnnotatedSource.parse(source)
49
+
50
+ if expected_annotations.plain_source == source
51
+ raise 'Use expect_no_offenses to assert that no offenses are found'
52
+ end
53
+
54
+ inspect_source(expected_annotations.plain_source, file)
55
+ actual_annotations =
56
+ expected_annotations.with_offense_annotations(cop.offenses)
57
+ expect(actual_annotations.to_s).to eq(expected_annotations.to_s)
58
+ end
59
+
60
+ def expect_no_offenses(source, file = nil)
61
+ inspect_source(source, file)
62
+
63
+ expect(cop.offenses).to be_empty
64
+ end
65
+
66
+ # Parsed representation of code annotated with the `^^^ Message` style
67
+ class AnnotatedSource
68
+ ANNOTATION_PATTERN = /\A\s*\^+ /
69
+
70
+ # @param annotated_source [String] string passed to the matchers
71
+ #
72
+ # Separates annotation lines from source lines. Tracks the real
73
+ # source line number that each annotation corresponds to.
74
+ #
75
+ # @return [AnnotatedSource]
76
+ def self.parse(annotated_source)
77
+ source = []
78
+ annotations = []
79
+
80
+ annotated_source.each_line do |source_line|
81
+ if source_line =~ ANNOTATION_PATTERN
82
+ annotations << [source.size, source_line]
83
+ else
84
+ source << source_line
85
+ end
86
+ end
87
+
88
+ new(source, annotations)
89
+ end
90
+
91
+ # @param lines [Array<String>]
92
+ # @param annotations [Array<(Integer, String)>]
93
+ # each entry is the annotated line number and the annotation text
94
+ #
95
+ # @note annotations are sorted so that reconstructing the annotation
96
+ # text via {#to_s} is deterministic
97
+ def initialize(lines, annotations)
98
+ @lines = lines.freeze
99
+ @annotations = annotations.sort.freeze
100
+ end
101
+
102
+ # Construct annotated source string (like what we parse)
103
+ #
104
+ # Reconstruct a deterministic annotated source string. This is
105
+ # useful for eliminating semantically irrelevant annotation
106
+ # ordering differences.
107
+ #
108
+ # @example standardization
109
+ #
110
+ # source1 = AnnotatedSource.parse(<<-RUBY)
111
+ # line1
112
+ # ^ Annotation 1
113
+ # ^^ Annotation 2
114
+ # RUBY
115
+ #
116
+ # source2 = AnnotatedSource.parse(<<-RUBY)
117
+ # line1
118
+ # ^^ Annotation 2
119
+ # ^ Annotation 1
120
+ # RUBY
121
+ #
122
+ # source1.to_s == source2.to_s # => true
123
+ #
124
+ # @return [String]
125
+ def to_s
126
+ reconstructed = lines.dup
127
+
128
+ annotations.reverse_each do |line_number, annotation|
129
+ reconstructed.insert(line_number, annotation)
130
+ end
131
+
132
+ reconstructed.join
133
+ end
134
+
135
+ # Return the plain source code without annotations
136
+ #
137
+ # @return [String]
138
+ def plain_source
139
+ lines.join
140
+ end
141
+
142
+ # Annotate the source code with the RuboCop offenses provided
143
+ #
144
+ # @param offenses [Array<RuboCop::Cop::Offense>]
145
+ #
146
+ # @return [self]
147
+ def with_offense_annotations(offenses)
148
+ offense_annotations =
149
+ offenses.map do |offense|
150
+ indent = ' ' * offense.column
151
+ carets = '^' * offense.column_length
152
+
153
+ [offense.line, "#{indent}#{carets} #{offense.message}\n"]
154
+ end
155
+
156
+ self.class.new(lines, offense_annotations)
157
+ end
158
+
159
+ private
160
+
161
+ attr_reader :lines, :annotations
162
+ end
163
+ end
164
+ end
165
+ end
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  # RuboCop can be run in contexts where unexpected other libraries are included,
@@ -11,7 +10,7 @@ module HostEnvironmentSimulatorHelper
11
10
  pid = ::Process.fork do
12
11
  # Need to write coverage result under different name
13
12
  if defined?(SimpleCov)
14
- SimpleCov.command_name "rspec_#{Process.pid}"
13
+ SimpleCov.coverage_dir "coverage/ignored_results_#{Process.pid}"
15
14
  SimpleCov.pid = Process.pid
16
15
  end
17
16
 
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  require 'tmpdir'
@@ -43,6 +42,8 @@ shared_context 'config', :config do
43
42
  end
44
43
 
45
44
  hash = { 'AllCops' => { 'TargetRubyVersion' => ruby_version } }
45
+ hash['Rails'] = { 'Enabled' => true } if enabled_rails
46
+ hash['AllCops']['TargetRailsVersion'] = rails_version if rails_version
46
47
  if respond_to?(:cop_config)
47
48
  cop_name = described_class.cop_name
48
49
  hash[cop_name] = RuboCop::ConfigLoader
@@ -50,18 +51,12 @@ shared_context 'config', :config do
50
51
  .merge(cop_config)
51
52
  end
52
53
 
54
+ hash = other_cops.merge hash if respond_to?(:other_cops)
55
+
53
56
  RuboCop::Config.new(hash, "#{Dir.pwd}/.rubocop.yml")
54
57
  end
55
58
  end
56
59
 
57
- shared_context 'ruby 1.9', :ruby19 do
58
- let(:ruby_version) { 1.9 }
59
- end
60
-
61
- shared_context 'ruby 2.0', :ruby20 do
62
- let(:ruby_version) { 2.0 }
63
- end
64
-
65
60
  shared_context 'ruby 2.1', :ruby21 do
66
61
  let(:ruby_version) { 2.1 }
67
62
  end
@@ -77,3 +72,23 @@ end
77
72
  shared_context 'ruby 2.4', :ruby24 do
78
73
  let(:ruby_version) { 2.4 }
79
74
  end
75
+
76
+ shared_context 'ruby 2.5', :ruby25 do
77
+ let(:ruby_version) { 2.5 }
78
+ end
79
+
80
+ shared_context 'with Rails', :enabled_rails do
81
+ let(:enabled_rails) { true }
82
+ end
83
+
84
+ shared_context 'with Rails 3', :rails3 do
85
+ let(:rails_version) { 3.0 }
86
+ end
87
+
88
+ shared_context 'with Rails 4', :rails4 do
89
+ let(:rails_version) { 4.0 }
90
+ end
91
+
92
+ shared_context 'with Rails 5', :rails5 do
93
+ let(:rails_version) { 5.0 }
94
+ end
@@ -1,11 +1,10 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  # `cop` and `source` must be declared with #let.
5
4
 
6
5
  shared_examples_for 'accepts' do
7
6
  it 'accepts' do
8
- inspect_source(cop, source)
7
+ inspect_source(source)
9
8
  expect(cop.offenses).to be_empty
10
9
  end
11
10
  end
@@ -13,7 +12,7 @@ end
13
12
  shared_examples_for 'mimics MRI 2.1' do |grep_mri_warning|
14
13
  if RUBY_ENGINE == 'ruby' && RUBY_VERSION.start_with?('2.1')
15
14
  it "mimics MRI #{RUBY_VERSION} built-in syntax checking" do
16
- inspect_source(cop, source)
15
+ inspect_source(source)
17
16
  offenses_by_mri = MRISyntaxChecker.offenses_for_source(
18
17
  source, cop.name, grep_mri_warning
19
18
  )
@@ -23,7 +22,7 @@ shared_examples_for 'mimics MRI 2.1' do |grep_mri_warning|
23
22
  offense_by_mri = offenses_by_mri[index]
24
23
  # Exclude column attribute since MRI does not
25
24
  # output column number.
26
- [:severity, :line, :cop_name].each do |a|
25
+ %i[severity line cop_name].each do |a|
27
26
  expect(offense_by_cop.send(a)).to eq(offense_by_mri.send(a))
28
27
  end
29
28
  end
@@ -39,7 +38,7 @@ shared_examples_for 'misaligned' do |prefix, alignment_base, arg, end_kw, name|
39
38
  end_kw]
40
39
 
41
40
  it "registers an offense for mismatched #{name} ... end" do
42
- inspect_source(cop, source)
41
+ inspect_source(source)
43
42
  expect(cop.offenses.size).to eq(1)
44
43
  base_regexp = Regexp.escape(alignment_base)
45
44
  regexp = /`end` at 2, \d+ is not aligned with `#{base_regexp}` at 1,/
@@ -51,7 +50,7 @@ shared_examples_for 'misaligned' do |prefix, alignment_base, arg, end_kw, name|
51
50
  # style. In other cases, it won't match any style at all
52
51
  expect(cop.config_to_allow_offenses).to(
53
52
  eq('Enabled' => false).or(
54
- satisfy { |h| other_styles.include?(h['AlignWith']) }
53
+ satisfy { |h| other_styles.include?(h['EnforcedStyleAlignWith']) }
55
54
  )
56
55
  )
57
56
  end
@@ -59,7 +58,7 @@ shared_examples_for 'misaligned' do |prefix, alignment_base, arg, end_kw, name|
59
58
  it "auto-corrects mismatched #{name} ... end" do
60
59
  aligned_source = ["#{prefix}#{alignment_base} #{arg}",
61
60
  "#{' ' * prefix.length}#{end_kw.strip}"].join("\n")
62
- corrected = autocorrect_source(cop, source)
61
+ corrected = autocorrect_source(source)
63
62
  expect(corrected).to eq(aligned_source)
64
63
  end
65
64
  end
@@ -68,34 +67,26 @@ shared_examples_for 'aligned' do |alignment_base, arg, end_kw, name|
68
67
  name ||= alignment_base
69
68
  name = name.gsub(/\n/, ' <newline>')
70
69
  it "accepts matching #{name} ... end" do
71
- inspect_source(cop, ["#{alignment_base} #{arg}",
72
- end_kw])
70
+ inspect_source(["#{alignment_base} #{arg}",
71
+ end_kw])
73
72
  expect(cop.offenses).to be_empty
74
73
  end
75
74
  end
76
75
 
77
76
  shared_examples_for 'debugger' do |name, src|
78
77
  it "reports an offense for a #{name} call" do
79
- inspect_source(cop, src)
78
+ inspect_source(src)
80
79
  src = [src] if src.is_a? String
81
80
  expect(cop.offenses.size).to eq(src.size)
82
81
  expect(cop.messages)
83
82
  .to eq(src.map { |s| "Remove debugger entry point `#{s}`." })
84
83
  expect(cop.highlights).to eq(src)
85
84
  end
86
-
87
- it "can autocorrect a #{name} call" do
88
- lines = src.is_a?(String) ? src : src.join("\n")
89
- new_source = autocorrect_source(cop, ['def a',
90
- " #{lines}",
91
- 'end'].join("\n"))
92
- expect(new_source).to eq("def a\nend")
93
- end
94
85
  end
95
86
 
96
87
  shared_examples_for 'non-debugger' do |name, src|
97
88
  it "does not report an offense for #{name}" do
98
- inspect_source(cop, src)
89
+ inspect_source(src)
99
90
  expect(cop.offenses).to be_empty
100
91
  end
101
92
  end
@@ -1,9 +1,9 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  # Require this file to load code that supports testing using RSpec.
5
4
 
6
- require 'rubocop/rspec/cop_helper'
7
- require 'rubocop/rspec/host_environment_simulation_helper'
8
- require 'rubocop/rspec/shared_contexts'
9
- require 'rubocop/rspec/shared_examples'
5
+ require_relative 'cop_helper'
6
+ require_relative 'host_environment_simulation_helper'
7
+ require_relative 'shared_contexts'
8
+ require_relative 'shared_examples'
9
+ require_relative 'expect_offense'