rubocop 0.75.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 (602) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +20 -0
  3. data/README.md +217 -0
  4. data/assets/logo.png +0 -0
  5. data/assets/output.html.erb +261 -0
  6. data/bin/console +10 -0
  7. data/bin/setup +7 -0
  8. data/config/default.yml +3939 -0
  9. data/exe/rubocop +17 -0
  10. data/lib/rubocop.rb +608 -0
  11. data/lib/rubocop/ast/builder.rb +81 -0
  12. data/lib/rubocop/ast/node.rb +640 -0
  13. data/lib/rubocop/ast/node/alias_node.rb +24 -0
  14. data/lib/rubocop/ast/node/and_node.rb +29 -0
  15. data/lib/rubocop/ast/node/args_node.rb +29 -0
  16. data/lib/rubocop/ast/node/array_node.rb +57 -0
  17. data/lib/rubocop/ast/node/block_node.rb +115 -0
  18. data/lib/rubocop/ast/node/break_node.rb +17 -0
  19. data/lib/rubocop/ast/node/case_node.rb +56 -0
  20. data/lib/rubocop/ast/node/class_node.rb +31 -0
  21. data/lib/rubocop/ast/node/def_node.rb +71 -0
  22. data/lib/rubocop/ast/node/defined_node.rb +17 -0
  23. data/lib/rubocop/ast/node/ensure_node.rb +17 -0
  24. data/lib/rubocop/ast/node/float_node.rb +12 -0
  25. data/lib/rubocop/ast/node/for_node.rb +53 -0
  26. data/lib/rubocop/ast/node/hash_node.rb +109 -0
  27. data/lib/rubocop/ast/node/if_node.rb +175 -0
  28. data/lib/rubocop/ast/node/int_node.rb +12 -0
  29. data/lib/rubocop/ast/node/keyword_splat_node.rb +45 -0
  30. data/lib/rubocop/ast/node/mixin/basic_literal_node.rb +16 -0
  31. data/lib/rubocop/ast/node/mixin/binary_operator_node.rb +43 -0
  32. data/lib/rubocop/ast/node/mixin/collection_node.rb +15 -0
  33. data/lib/rubocop/ast/node/mixin/conditional_node.rb +45 -0
  34. data/lib/rubocop/ast/node/mixin/hash_element_node.rb +125 -0
  35. data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +261 -0
  36. data/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +114 -0
  37. data/lib/rubocop/ast/node/mixin/modifier_node.rb +17 -0
  38. data/lib/rubocop/ast/node/mixin/numeric_node.rb +21 -0
  39. data/lib/rubocop/ast/node/mixin/parameterized_node.rb +61 -0
  40. data/lib/rubocop/ast/node/mixin/predicate_operator_node.rb +35 -0
  41. data/lib/rubocop/ast/node/module_node.rb +24 -0
  42. data/lib/rubocop/ast/node/or_node.rb +29 -0
  43. data/lib/rubocop/ast/node/pair_node.rb +63 -0
  44. data/lib/rubocop/ast/node/range_node.rb +18 -0
  45. data/lib/rubocop/ast/node/regexp_node.rb +35 -0
  46. data/lib/rubocop/ast/node/resbody_node.rb +24 -0
  47. data/lib/rubocop/ast/node/retry_node.rb +17 -0
  48. data/lib/rubocop/ast/node/self_class_node.rb +24 -0
  49. data/lib/rubocop/ast/node/send_node.rb +13 -0
  50. data/lib/rubocop/ast/node/str_node.rb +16 -0
  51. data/lib/rubocop/ast/node/super_node.rb +21 -0
  52. data/lib/rubocop/ast/node/symbol_node.rb +12 -0
  53. data/lib/rubocop/ast/node/until_node.rb +35 -0
  54. data/lib/rubocop/ast/node/when_node.rb +53 -0
  55. data/lib/rubocop/ast/node/while_node.rb +35 -0
  56. data/lib/rubocop/ast/node/yield_node.rb +21 -0
  57. data/lib/rubocop/ast/sexp.rb +16 -0
  58. data/lib/rubocop/ast/traversal.rb +183 -0
  59. data/lib/rubocop/cached_data.rb +58 -0
  60. data/lib/rubocop/cli.rb +343 -0
  61. data/lib/rubocop/comment_config.rb +201 -0
  62. data/lib/rubocop/config.rb +244 -0
  63. data/lib/rubocop/config_loader.rb +273 -0
  64. data/lib/rubocop/config_loader_resolver.rb +194 -0
  65. data/lib/rubocop/config_obsoletion.rb +213 -0
  66. data/lib/rubocop/config_store.rb +48 -0
  67. data/lib/rubocop/config_validator.rb +239 -0
  68. data/lib/rubocop/cop/autocorrect_logic.rb +103 -0
  69. data/lib/rubocop/cop/badge.rb +73 -0
  70. data/lib/rubocop/cop/bundler/duplicated_gem.rb +73 -0
  71. data/lib/rubocop/cop/bundler/gem_comment.rb +64 -0
  72. data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +69 -0
  73. data/lib/rubocop/cop/bundler/ordered_gems.rb +73 -0
  74. data/lib/rubocop/cop/commissioner.rb +137 -0
  75. data/lib/rubocop/cop/cop.rb +271 -0
  76. data/lib/rubocop/cop/corrector.rb +171 -0
  77. data/lib/rubocop/cop/correctors/alignment_corrector.rb +146 -0
  78. data/lib/rubocop/cop/correctors/condition_corrector.rb +28 -0
  79. data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +53 -0
  80. data/lib/rubocop/cop/correctors/empty_line_corrector.rb +26 -0
  81. data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +73 -0
  82. data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +136 -0
  83. data/lib/rubocop/cop/correctors/line_break_corrector.rb +61 -0
  84. data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +68 -0
  85. data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +44 -0
  86. data/lib/rubocop/cop/correctors/parentheses_corrector.rb +31 -0
  87. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +117 -0
  88. data/lib/rubocop/cop/correctors/punctuation_corrector.rb +29 -0
  89. data/lib/rubocop/cop/correctors/space_corrector.rb +49 -0
  90. data/lib/rubocop/cop/correctors/string_literal_corrector.rb +25 -0
  91. data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +43 -0
  92. data/lib/rubocop/cop/force.rb +42 -0
  93. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +104 -0
  94. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +106 -0
  95. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +85 -0
  96. data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +55 -0
  97. data/lib/rubocop/cop/generator.rb +223 -0
  98. data/lib/rubocop/cop/generator/configuration_injector.rb +66 -0
  99. data/lib/rubocop/cop/generator/require_file_injector.rb +78 -0
  100. data/lib/rubocop/cop/ignored_node.rb +38 -0
  101. data/lib/rubocop/cop/internal_affairs.rb +8 -0
  102. data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +44 -0
  103. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +44 -0
  104. data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +54 -0
  105. data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +48 -0
  106. data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +73 -0
  107. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +52 -0
  108. data/lib/rubocop/cop/layout/access_modifier_indentation.rb +98 -0
  109. data/lib/rubocop/cop/layout/align_arguments.rb +93 -0
  110. data/lib/rubocop/cop/layout/align_array.rb +39 -0
  111. data/lib/rubocop/cop/layout/align_hash.rb +358 -0
  112. data/lib/rubocop/cop/layout/align_parameters.rb +118 -0
  113. data/lib/rubocop/cop/layout/block_alignment.rb +244 -0
  114. data/lib/rubocop/cop/layout/block_end_newline.rb +62 -0
  115. data/lib/rubocop/cop/layout/case_indentation.rb +161 -0
  116. data/lib/rubocop/cop/layout/class_structure.rb +340 -0
  117. data/lib/rubocop/cop/layout/closing_heredoc_indentation.rb +126 -0
  118. data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +203 -0
  119. data/lib/rubocop/cop/layout/comment_indentation.rb +144 -0
  120. data/lib/rubocop/cop/layout/condition_position.rb +56 -0
  121. data/lib/rubocop/cop/layout/def_end_alignment.rb +74 -0
  122. data/lib/rubocop/cop/layout/dot_position.rb +105 -0
  123. data/lib/rubocop/cop/layout/else_alignment.rb +134 -0
  124. data/lib/rubocop/cop/layout/empty_comment.rb +160 -0
  125. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +157 -0
  126. data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +64 -0
  127. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +151 -0
  128. data/lib/rubocop/cop/layout/empty_lines.rb +76 -0
  129. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +215 -0
  130. data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +99 -0
  131. data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +45 -0
  132. data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +41 -0
  133. data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +88 -0
  134. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +136 -0
  135. data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +45 -0
  136. data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +62 -0
  137. data/lib/rubocop/cop/layout/end_alignment.rb +189 -0
  138. data/lib/rubocop/cop/layout/end_of_line.rb +87 -0
  139. data/lib/rubocop/cop/layout/extra_spacing.rb +201 -0
  140. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +45 -0
  141. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +37 -0
  142. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +55 -0
  143. data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +46 -0
  144. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +289 -0
  145. data/lib/rubocop/cop/layout/indent_assignment.rb +55 -0
  146. data/lib/rubocop/cop/layout/indent_first_argument.rb +247 -0
  147. data/lib/rubocop/cop/layout/indent_first_array_element.rb +167 -0
  148. data/lib/rubocop/cop/layout/indent_first_hash_element.rb +184 -0
  149. data/lib/rubocop/cop/layout/indent_first_parameter.rb +100 -0
  150. data/lib/rubocop/cop/layout/indent_heredoc.rb +256 -0
  151. data/lib/rubocop/cop/layout/indentation_consistency.rb +202 -0
  152. data/lib/rubocop/cop/layout/indentation_width.rb +364 -0
  153. data/lib/rubocop/cop/layout/initial_indentation.rb +59 -0
  154. data/lib/rubocop/cop/layout/leading_blank_lines.rb +53 -0
  155. data/lib/rubocop/cop/layout/leading_comment_space.rb +88 -0
  156. data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +118 -0
  157. data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +39 -0
  158. data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +95 -0
  159. data/lib/rubocop/cop/layout/multiline_block_layout.rb +146 -0
  160. data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +122 -0
  161. data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +50 -0
  162. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +54 -0
  163. data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +134 -0
  164. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +220 -0
  165. data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +131 -0
  166. data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +114 -0
  167. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +189 -0
  168. data/lib/rubocop/cop/layout/space_after_colon.rb +47 -0
  169. data/lib/rubocop/cop/layout/space_after_comma.rb +35 -0
  170. data/lib/rubocop/cop/layout/space_after_method_name.rb +42 -0
  171. data/lib/rubocop/cop/layout/space_after_not.rb +40 -0
  172. data/lib/rubocop/cop/layout/space_after_semicolon.rb +32 -0
  173. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +169 -0
  174. data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +92 -0
  175. data/lib/rubocop/cop/layout/space_around_keyword.rb +232 -0
  176. data/lib/rubocop/cop/layout/space_around_operators.rb +182 -0
  177. data/lib/rubocop/cop/layout/space_before_block_braces.rb +119 -0
  178. data/lib/rubocop/cop/layout/space_before_comma.rb +31 -0
  179. data/lib/rubocop/cop/layout/space_before_comment.rb +35 -0
  180. data/lib/rubocop/cop/layout/space_before_first_arg.rb +67 -0
  181. data/lib/rubocop/cop/layout/space_before_semicolon.rb +27 -0
  182. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +80 -0
  183. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +228 -0
  184. data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +53 -0
  185. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +248 -0
  186. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +207 -0
  187. data/lib/rubocop/cop/layout/space_inside_parens.rb +113 -0
  188. data/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb +65 -0
  189. data/lib/rubocop/cop/layout/space_inside_range_literal.rb +63 -0
  190. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +150 -0
  191. data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +65 -0
  192. data/lib/rubocop/cop/layout/tab.rb +75 -0
  193. data/lib/rubocop/cop/layout/trailing_blank_lines.rb +113 -0
  194. data/lib/rubocop/cop/layout/trailing_whitespace.rb +61 -0
  195. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +62 -0
  196. data/lib/rubocop/cop/lint/ambiguous_operator.rb +55 -0
  197. data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +43 -0
  198. data/lib/rubocop/cop/lint/assignment_in_condition.rb +97 -0
  199. data/lib/rubocop/cop/lint/big_decimal_new.rb +44 -0
  200. data/lib/rubocop/cop/lint/boolean_symbol.rb +38 -0
  201. data/lib/rubocop/cop/lint/circular_argument_reference.rb +72 -0
  202. data/lib/rubocop/cop/lint/debugger.rb +77 -0
  203. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +111 -0
  204. data/lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb +81 -0
  205. data/lib/rubocop/cop/lint/duplicate_case_condition.rb +53 -0
  206. data/lib/rubocop/cop/lint/duplicate_methods.rb +239 -0
  207. data/lib/rubocop/cop/lint/duplicated_key.rb +38 -0
  208. data/lib/rubocop/cop/lint/each_with_object_argument.rb +42 -0
  209. data/lib/rubocop/cop/lint/else_layout.rb +66 -0
  210. data/lib/rubocop/cop/lint/empty_ensure.rb +60 -0
  211. data/lib/rubocop/cop/lint/empty_expression.rb +42 -0
  212. data/lib/rubocop/cop/lint/empty_interpolation.rb +36 -0
  213. data/lib/rubocop/cop/lint/empty_when.rb +38 -0
  214. data/lib/rubocop/cop/lint/end_in_method.rb +40 -0
  215. data/lib/rubocop/cop/lint/ensure_return.rb +46 -0
  216. data/lib/rubocop/cop/lint/erb_new_arguments.rb +163 -0
  217. data/lib/rubocop/cop/lint/flip_flop.rb +32 -0
  218. data/lib/rubocop/cop/lint/float_out_of_range.rb +35 -0
  219. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +159 -0
  220. data/lib/rubocop/cop/lint/handle_exceptions.rb +95 -0
  221. data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +156 -0
  222. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +101 -0
  223. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +127 -0
  224. data/lib/rubocop/cop/lint/inherit_exception.rb +100 -0
  225. data/lib/rubocop/cop/lint/interpolation_check.rb +40 -0
  226. data/lib/rubocop/cop/lint/literal_as_condition.rb +138 -0
  227. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +98 -0
  228. data/lib/rubocop/cop/lint/loop.rb +63 -0
  229. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +84 -0
  230. data/lib/rubocop/cop/lint/multiple_compare.rb +48 -0
  231. data/lib/rubocop/cop/lint/nested_method_definition.rb +104 -0
  232. data/lib/rubocop/cop/lint/nested_percent_literal.rb +51 -0
  233. data/lib/rubocop/cop/lint/next_without_accumulator.rb +50 -0
  234. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +83 -0
  235. data/lib/rubocop/cop/lint/number_conversion.rb +81 -0
  236. data/lib/rubocop/cop/lint/ordered_magic_comments.rb +86 -0
  237. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +64 -0
  238. data/lib/rubocop/cop/lint/percent_string_array.rb +73 -0
  239. data/lib/rubocop/cop/lint/percent_symbol_array.rb +69 -0
  240. data/lib/rubocop/cop/lint/rand_one.rb +45 -0
  241. data/lib/rubocop/cop/lint/redundant_with_index.rb +82 -0
  242. data/lib/rubocop/cop/lint/redundant_with_object.rb +83 -0
  243. data/lib/rubocop/cop/lint/regexp_as_condition.rb +29 -0
  244. data/lib/rubocop/cop/lint/require_parentheses.rb +66 -0
  245. data/lib/rubocop/cop/lint/rescue_exception.rb +46 -0
  246. data/lib/rubocop/cop/lint/rescue_type.rb +94 -0
  247. data/lib/rubocop/cop/lint/return_in_void_context.rb +74 -0
  248. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +66 -0
  249. data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +94 -0
  250. data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +38 -0
  251. data/lib/rubocop/cop/lint/script_permission.rb +70 -0
  252. data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +91 -0
  253. data/lib/rubocop/cop/lint/shadowed_argument.rb +182 -0
  254. data/lib/rubocop/cop/lint/shadowed_exception.rb +178 -0
  255. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +53 -0
  256. data/lib/rubocop/cop/lint/string_conversion_in_interpolation.rb +59 -0
  257. data/lib/rubocop/cop/lint/syntax.rb +59 -0
  258. data/lib/rubocop/cop/lint/to_json.rb +41 -0
  259. data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +82 -0
  260. data/lib/rubocop/cop/lint/unified_integer.rb +45 -0
  261. data/lib/rubocop/cop/lint/unneeded_cop_disable_directive.rb +263 -0
  262. data/lib/rubocop/cop/lint/unneeded_cop_enable_directive.rb +116 -0
  263. data/lib/rubocop/cop/lint/unneeded_require_statement.rb +50 -0
  264. data/lib/rubocop/cop/lint/unneeded_splat_expansion.rb +172 -0
  265. data/lib/rubocop/cop/lint/unreachable_code.rb +99 -0
  266. data/lib/rubocop/cop/lint/unused_block_argument.rb +165 -0
  267. data/lib/rubocop/cop/lint/unused_method_argument.rb +86 -0
  268. data/lib/rubocop/cop/lint/uri_escape_unescape.rb +76 -0
  269. data/lib/rubocop/cop/lint/uri_regexp.rb +73 -0
  270. data/lib/rubocop/cop/lint/useless_access_modifier.rb +240 -0
  271. data/lib/rubocop/cop/lint/useless_assignment.rb +129 -0
  272. data/lib/rubocop/cop/lint/useless_comparison.rb +28 -0
  273. data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +49 -0
  274. data/lib/rubocop/cop/lint/useless_setter_call.rb +164 -0
  275. data/lib/rubocop/cop/lint/void.rb +151 -0
  276. data/lib/rubocop/cop/message_annotator.rb +129 -0
  277. data/lib/rubocop/cop/metrics/abc_size.rb +24 -0
  278. data/lib/rubocop/cop/metrics/block_length.rb +50 -0
  279. data/lib/rubocop/cop/metrics/block_nesting.rb +65 -0
  280. data/lib/rubocop/cop/metrics/class_length.rb +36 -0
  281. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +32 -0
  282. data/lib/rubocop/cop/metrics/line_length.rb +321 -0
  283. data/lib/rubocop/cop/metrics/method_length.rb +36 -0
  284. data/lib/rubocop/cop/metrics/module_length.rb +36 -0
  285. data/lib/rubocop/cop/metrics/parameter_lists.rb +54 -0
  286. data/lib/rubocop/cop/metrics/perceived_complexity.rb +61 -0
  287. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +67 -0
  288. data/lib/rubocop/cop/migration/department_name.rb +44 -0
  289. data/lib/rubocop/cop/mixin/alignment.rb +74 -0
  290. data/lib/rubocop/cop/mixin/annotation_comment.rb +37 -0
  291. data/lib/rubocop/cop/mixin/array_min_size.rb +59 -0
  292. data/lib/rubocop/cop/mixin/array_syntax.rb +17 -0
  293. data/lib/rubocop/cop/mixin/check_assignment.rb +44 -0
  294. data/lib/rubocop/cop/mixin/check_line_breakable.rb +190 -0
  295. data/lib/rubocop/cop/mixin/classish_length.rb +37 -0
  296. data/lib/rubocop/cop/mixin/code_length.rb +38 -0
  297. data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +98 -0
  298. data/lib/rubocop/cop/mixin/configurable_formatting.rb +47 -0
  299. data/lib/rubocop/cop/mixin/configurable_max.rb +23 -0
  300. data/lib/rubocop/cop/mixin/configurable_naming.rb +16 -0
  301. data/lib/rubocop/cop/mixin/configurable_numbering.rb +17 -0
  302. data/lib/rubocop/cop/mixin/def_node.rb +33 -0
  303. data/lib/rubocop/cop/mixin/documentation_comment.rb +52 -0
  304. data/lib/rubocop/cop/mixin/duplication.rb +46 -0
  305. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +172 -0
  306. data/lib/rubocop/cop/mixin/empty_parameter.rb +24 -0
  307. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +67 -0
  308. data/lib/rubocop/cop/mixin/enforce_superclass.rb +30 -0
  309. data/lib/rubocop/cop/mixin/first_element_line_break.rb +46 -0
  310. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +53 -0
  311. data/lib/rubocop/cop/mixin/hash_alignment.rb +147 -0
  312. data/lib/rubocop/cop/mixin/heredoc.rb +32 -0
  313. data/lib/rubocop/cop/mixin/ignored_methods.rb +19 -0
  314. data/lib/rubocop/cop/mixin/ignored_pattern.rb +29 -0
  315. data/lib/rubocop/cop/mixin/integer_node.rb +14 -0
  316. data/lib/rubocop/cop/mixin/interpolation.rb +27 -0
  317. data/lib/rubocop/cop/mixin/match_range.rb +26 -0
  318. data/lib/rubocop/cop/mixin/method_complexity.rb +56 -0
  319. data/lib/rubocop/cop/mixin/method_preference.rb +31 -0
  320. data/lib/rubocop/cop/mixin/min_body_length.rb +21 -0
  321. data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +86 -0
  322. data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +33 -0
  323. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +255 -0
  324. data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +141 -0
  325. data/lib/rubocop/cop/mixin/negative_conditional.rb +32 -0
  326. data/lib/rubocop/cop/mixin/nil_methods.rb +25 -0
  327. data/lib/rubocop/cop/mixin/on_normal_if_unless.rb +14 -0
  328. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +56 -0
  329. data/lib/rubocop/cop/mixin/parentheses.rb +17 -0
  330. data/lib/rubocop/cop/mixin/parser_diagnostic.rb +37 -0
  331. data/lib/rubocop/cop/mixin/percent_array.rb +52 -0
  332. data/lib/rubocop/cop/mixin/percent_literal.rb +38 -0
  333. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +181 -0
  334. data/lib/rubocop/cop/mixin/preferred_delimiters.rb +53 -0
  335. data/lib/rubocop/cop/mixin/range_help.rb +117 -0
  336. data/lib/rubocop/cop/mixin/rescue_node.rb +22 -0
  337. data/lib/rubocop/cop/mixin/safe_assignment.rb +23 -0
  338. data/lib/rubocop/cop/mixin/safe_mode.rb +24 -0
  339. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +55 -0
  340. data/lib/rubocop/cop/mixin/space_before_punctuation.rb +49 -0
  341. data/lib/rubocop/cop/mixin/statement_modifier.rb +68 -0
  342. data/lib/rubocop/cop/mixin/string_help.rb +35 -0
  343. data/lib/rubocop/cop/mixin/string_literals_help.rb +23 -0
  344. data/lib/rubocop/cop/mixin/surrounding_space.rb +146 -0
  345. data/lib/rubocop/cop/mixin/target_ruby_version.rb +16 -0
  346. data/lib/rubocop/cop/mixin/too_many_lines.rb +35 -0
  347. data/lib/rubocop/cop/mixin/trailing_body.rb +26 -0
  348. data/lib/rubocop/cop/mixin/trailing_comma.rb +216 -0
  349. data/lib/rubocop/cop/mixin/uncommunicative_name.rb +111 -0
  350. data/lib/rubocop/cop/mixin/unused_argument.rb +33 -0
  351. data/lib/rubocop/cop/naming/accessor_method_name.rb +55 -0
  352. data/lib/rubocop/cop/naming/ascii_identifiers.rb +72 -0
  353. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +43 -0
  354. data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +33 -0
  355. data/lib/rubocop/cop/naming/constant_name.rb +81 -0
  356. data/lib/rubocop/cop/naming/file_name.rb +205 -0
  357. data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +62 -0
  358. data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +55 -0
  359. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +171 -0
  360. data/lib/rubocop/cop/naming/method_name.rb +53 -0
  361. data/lib/rubocop/cop/naming/predicate_name.rb +108 -0
  362. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +112 -0
  363. data/lib/rubocop/cop/naming/uncommunicative_block_param_name.rb +49 -0
  364. data/lib/rubocop/cop/naming/uncommunicative_method_param_name.rb +58 -0
  365. data/lib/rubocop/cop/naming/variable_name.rb +52 -0
  366. data/lib/rubocop/cop/naming/variable_number.rb +61 -0
  367. data/lib/rubocop/cop/offense.rb +205 -0
  368. data/lib/rubocop/cop/registry.rb +211 -0
  369. data/lib/rubocop/cop/security/eval.rb +31 -0
  370. data/lib/rubocop/cop/security/json_load.rb +46 -0
  371. data/lib/rubocop/cop/security/marshal_load.rb +39 -0
  372. data/lib/rubocop/cop/security/open.rb +71 -0
  373. data/lib/rubocop/cop/security/yaml_load.rb +37 -0
  374. data/lib/rubocop/cop/severity.rb +77 -0
  375. data/lib/rubocop/cop/style/access_modifier_declarations.rb +112 -0
  376. data/lib/rubocop/cop/style/alias.rb +147 -0
  377. data/lib/rubocop/cop/style/and_or.rb +146 -0
  378. data/lib/rubocop/cop/style/array_join.rb +39 -0
  379. data/lib/rubocop/cop/style/ascii_comments.rb +61 -0
  380. data/lib/rubocop/cop/style/attr.rb +62 -0
  381. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +51 -0
  382. data/lib/rubocop/cop/style/bare_percent_literals.rb +78 -0
  383. data/lib/rubocop/cop/style/begin_block.rb +22 -0
  384. data/lib/rubocop/cop/style/block_comments.rb +70 -0
  385. data/lib/rubocop/cop/style/block_delimiters.rb +331 -0
  386. data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +209 -0
  387. data/lib/rubocop/cop/style/case_equality.rb +30 -0
  388. data/lib/rubocop/cop/style/character_literal.rb +53 -0
  389. data/lib/rubocop/cop/style/class_and_module_children.rb +151 -0
  390. data/lib/rubocop/cop/style/class_check.rb +59 -0
  391. data/lib/rubocop/cop/style/class_methods.rb +60 -0
  392. data/lib/rubocop/cop/style/class_vars.rb +48 -0
  393. data/lib/rubocop/cop/style/collection_methods.rb +77 -0
  394. data/lib/rubocop/cop/style/colon_method_call.rb +48 -0
  395. data/lib/rubocop/cop/style/colon_method_definition.rb +37 -0
  396. data/lib/rubocop/cop/style/command_literal.rb +187 -0
  397. data/lib/rubocop/cop/style/comment_annotation.rb +97 -0
  398. data/lib/rubocop/cop/style/commented_keyword.rb +73 -0
  399. data/lib/rubocop/cop/style/conditional_assignment.rb +668 -0
  400. data/lib/rubocop/cop/style/constant_visibility.rb +77 -0
  401. data/lib/rubocop/cop/style/copyright.rb +95 -0
  402. data/lib/rubocop/cop/style/date_time.rb +77 -0
  403. data/lib/rubocop/cop/style/def_with_parentheses.rb +57 -0
  404. data/lib/rubocop/cop/style/dir.rb +48 -0
  405. data/lib/rubocop/cop/style/documentation.rb +97 -0
  406. data/lib/rubocop/cop/style/documentation_method.rb +125 -0
  407. data/lib/rubocop/cop/style/double_cop_disable_directive.rb +55 -0
  408. data/lib/rubocop/cop/style/double_negation.rb +35 -0
  409. data/lib/rubocop/cop/style/each_for_simple_loop.rb +58 -0
  410. data/lib/rubocop/cop/style/each_with_object.rb +110 -0
  411. data/lib/rubocop/cop/style/empty_block_parameter.rb +48 -0
  412. data/lib/rubocop/cop/style/empty_case_condition.rb +107 -0
  413. data/lib/rubocop/cop/style/empty_else.rb +175 -0
  414. data/lib/rubocop/cop/style/empty_lambda_parameter.rb +45 -0
  415. data/lib/rubocop/cop/style/empty_literal.rb +123 -0
  416. data/lib/rubocop/cop/style/empty_method.rb +115 -0
  417. data/lib/rubocop/cop/style/encoding.rb +56 -0
  418. data/lib/rubocop/cop/style/end_block.rb +25 -0
  419. data/lib/rubocop/cop/style/eval_with_location.rb +148 -0
  420. data/lib/rubocop/cop/style/even_odd.rb +58 -0
  421. data/lib/rubocop/cop/style/expand_path_arguments.rb +194 -0
  422. data/lib/rubocop/cop/style/float_division.rb +94 -0
  423. data/lib/rubocop/cop/style/for.rb +88 -0
  424. data/lib/rubocop/cop/style/format_string.rb +124 -0
  425. data/lib/rubocop/cop/style/format_string_token.rb +119 -0
  426. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +149 -0
  427. data/lib/rubocop/cop/style/global_vars.rb +80 -0
  428. data/lib/rubocop/cop/style/guard_clause.rb +121 -0
  429. data/lib/rubocop/cop/style/hash_syntax.rb +214 -0
  430. data/lib/rubocop/cop/style/identical_conditional_branches.rb +130 -0
  431. data/lib/rubocop/cop/style/if_inside_else.rb +87 -0
  432. data/lib/rubocop/cop/style/if_unless_modifier.rb +127 -0
  433. data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +39 -0
  434. data/lib/rubocop/cop/style/if_with_semicolon.rb +30 -0
  435. data/lib/rubocop/cop/style/implicit_runtime_error.rb +32 -0
  436. data/lib/rubocop/cop/style/infinite_loop.rb +127 -0
  437. data/lib/rubocop/cop/style/inline_comment.rb +34 -0
  438. data/lib/rubocop/cop/style/inverse_methods.rb +187 -0
  439. data/lib/rubocop/cop/style/ip_addresses.rb +76 -0
  440. data/lib/rubocop/cop/style/lambda.rb +131 -0
  441. data/lib/rubocop/cop/style/lambda_call.rb +93 -0
  442. data/lib/rubocop/cop/style/line_end_concatenation.rb +121 -0
  443. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +388 -0
  444. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +77 -0
  445. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +46 -0
  446. data/lib/rubocop/cop/style/method_def_parentheses.rb +158 -0
  447. data/lib/rubocop/cop/style/method_missing_super.rb +34 -0
  448. data/lib/rubocop/cop/style/min_max.rb +68 -0
  449. data/lib/rubocop/cop/style/missing_else.rb +180 -0
  450. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +46 -0
  451. data/lib/rubocop/cop/style/mixin_grouping.rb +148 -0
  452. data/lib/rubocop/cop/style/mixin_usage.rb +90 -0
  453. data/lib/rubocop/cop/style/module_function.rb +104 -0
  454. data/lib/rubocop/cop/style/multiline_block_chain.rb +40 -0
  455. data/lib/rubocop/cop/style/multiline_if_modifier.rb +67 -0
  456. data/lib/rubocop/cop/style/multiline_if_then.rb +50 -0
  457. data/lib/rubocop/cop/style/multiline_memoization.rb +94 -0
  458. data/lib/rubocop/cop/style/multiline_method_signature.rb +61 -0
  459. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +38 -0
  460. data/lib/rubocop/cop/style/multiline_when_then.rb +55 -0
  461. data/lib/rubocop/cop/style/multiple_comparison.rb +92 -0
  462. data/lib/rubocop/cop/style/mutable_constant.rb +174 -0
  463. data/lib/rubocop/cop/style/negated_if.rb +99 -0
  464. data/lib/rubocop/cop/style/negated_unless.rb +89 -0
  465. data/lib/rubocop/cop/style/negated_while.rb +48 -0
  466. data/lib/rubocop/cop/style/nested_modifier.rb +105 -0
  467. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +67 -0
  468. data/lib/rubocop/cop/style/nested_ternary_operator.rb +32 -0
  469. data/lib/rubocop/cop/style/next.rb +244 -0
  470. data/lib/rubocop/cop/style/nil_comparison.rb +75 -0
  471. data/lib/rubocop/cop/style/non_nil_check.rb +124 -0
  472. data/lib/rubocop/cop/style/not.rb +82 -0
  473. data/lib/rubocop/cop/style/numeric_literal_prefix.rb +124 -0
  474. data/lib/rubocop/cop/style/numeric_literals.rb +110 -0
  475. data/lib/rubocop/cop/style/numeric_predicate.rb +137 -0
  476. data/lib/rubocop/cop/style/one_line_conditional.rb +101 -0
  477. data/lib/rubocop/cop/style/option_hash.rb +55 -0
  478. data/lib/rubocop/cop/style/optional_arguments.rb +58 -0
  479. data/lib/rubocop/cop/style/or_assignment.rb +95 -0
  480. data/lib/rubocop/cop/style/parallel_assignment.rb +287 -0
  481. data/lib/rubocop/cop/style/parentheses_around_condition.rb +117 -0
  482. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +127 -0
  483. data/lib/rubocop/cop/style/percent_q_literals.rb +73 -0
  484. data/lib/rubocop/cop/style/perl_backrefs.rb +38 -0
  485. data/lib/rubocop/cop/style/preferred_hash_methods.rb +75 -0
  486. data/lib/rubocop/cop/style/proc.rb +34 -0
  487. data/lib/rubocop/cop/style/raise_args.rb +145 -0
  488. data/lib/rubocop/cop/style/random_with_offset.rb +158 -0
  489. data/lib/rubocop/cop/style/redundant_begin.rb +91 -0
  490. data/lib/rubocop/cop/style/redundant_conditional.rb +97 -0
  491. data/lib/rubocop/cop/style/redundant_exception.rb +60 -0
  492. data/lib/rubocop/cop/style/redundant_freeze.rb +67 -0
  493. data/lib/rubocop/cop/style/redundant_parentheses.rb +231 -0
  494. data/lib/rubocop/cop/style/redundant_return.rb +173 -0
  495. data/lib/rubocop/cop/style/redundant_self.rb +171 -0
  496. data/lib/rubocop/cop/style/redundant_sort_by.rb +50 -0
  497. data/lib/rubocop/cop/style/regexp_literal.rb +228 -0
  498. data/lib/rubocop/cop/style/rescue_modifier.rb +73 -0
  499. data/lib/rubocop/cop/style/rescue_standard_error.rb +124 -0
  500. data/lib/rubocop/cop/style/return_nil.rb +89 -0
  501. data/lib/rubocop/cop/style/safe_navigation.rb +272 -0
  502. data/lib/rubocop/cop/style/sample.rb +144 -0
  503. data/lib/rubocop/cop/style/self_assignment.rb +97 -0
  504. data/lib/rubocop/cop/style/semicolon.rb +101 -0
  505. data/lib/rubocop/cop/style/send.rb +31 -0
  506. data/lib/rubocop/cop/style/signal_exception.rb +211 -0
  507. data/lib/rubocop/cop/style/single_line_block_params.rb +95 -0
  508. data/lib/rubocop/cop/style/single_line_methods.rb +83 -0
  509. data/lib/rubocop/cop/style/special_global_vars.rb +213 -0
  510. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +86 -0
  511. data/lib/rubocop/cop/style/stderr_puts.rb +61 -0
  512. data/lib/rubocop/cop/style/string_hash_keys.rb +50 -0
  513. data/lib/rubocop/cop/style/string_literals.rb +129 -0
  514. data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +49 -0
  515. data/lib/rubocop/cop/style/string_methods.rb +46 -0
  516. data/lib/rubocop/cop/style/strip.rb +46 -0
  517. data/lib/rubocop/cop/style/struct_inheritance.rb +39 -0
  518. data/lib/rubocop/cop/style/symbol_array.rb +119 -0
  519. data/lib/rubocop/cop/style/symbol_literal.rb +32 -0
  520. data/lib/rubocop/cop/style/symbol_proc.rb +110 -0
  521. data/lib/rubocop/cop/style/ternary_parentheses.rb +223 -0
  522. data/lib/rubocop/cop/style/trailing_body_on_class.rb +43 -0
  523. data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +54 -0
  524. data/lib/rubocop/cop/style/trailing_body_on_module.rb +43 -0
  525. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +96 -0
  526. data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +58 -0
  527. data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +56 -0
  528. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +91 -0
  529. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +161 -0
  530. data/lib/rubocop/cop/style/trivial_accessors.rb +191 -0
  531. data/lib/rubocop/cop/style/unless_else.rb +55 -0
  532. data/lib/rubocop/cop/style/unneeded_capital_w.rb +51 -0
  533. data/lib/rubocop/cop/style/unneeded_condition.rb +112 -0
  534. data/lib/rubocop/cop/style/unneeded_interpolation.rb +98 -0
  535. data/lib/rubocop/cop/style/unneeded_percent_q.rb +112 -0
  536. data/lib/rubocop/cop/style/unneeded_sort.rb +165 -0
  537. data/lib/rubocop/cop/style/unpack_first.rb +65 -0
  538. data/lib/rubocop/cop/style/variable_interpolation.rb +48 -0
  539. data/lib/rubocop/cop/style/when_then.rb +37 -0
  540. data/lib/rubocop/cop/style/while_until_do.rb +59 -0
  541. data/lib/rubocop/cop/style/while_until_modifier.rb +61 -0
  542. data/lib/rubocop/cop/style/word_array.rb +102 -0
  543. data/lib/rubocop/cop/style/yoda_condition.rb +141 -0
  544. data/lib/rubocop/cop/style/zero_length_predicate.rb +117 -0
  545. data/lib/rubocop/cop/team.rb +191 -0
  546. data/lib/rubocop/cop/util.rb +127 -0
  547. data/lib/rubocop/cop/utils/format_string.rb +128 -0
  548. data/lib/rubocop/cop/variable_force.rb +464 -0
  549. data/lib/rubocop/cop/variable_force/assignment.rb +96 -0
  550. data/lib/rubocop/cop/variable_force/branch.rb +322 -0
  551. data/lib/rubocop/cop/variable_force/branchable.rb +23 -0
  552. data/lib/rubocop/cop/variable_force/reference.rb +49 -0
  553. data/lib/rubocop/cop/variable_force/scope.rb +109 -0
  554. data/lib/rubocop/cop/variable_force/variable.rb +117 -0
  555. data/lib/rubocop/cop/variable_force/variable_table.rb +129 -0
  556. data/lib/rubocop/core_ext/string.rb +23 -0
  557. data/lib/rubocop/error.rb +34 -0
  558. data/lib/rubocop/file_finder.rb +42 -0
  559. data/lib/rubocop/formatter/auto_gen_config_formatter.rb +16 -0
  560. data/lib/rubocop/formatter/base_formatter.rb +123 -0
  561. data/lib/rubocop/formatter/clang_style_formatter.rb +59 -0
  562. data/lib/rubocop/formatter/colorizable.rb +41 -0
  563. data/lib/rubocop/formatter/disabled_config_formatter.rb +224 -0
  564. data/lib/rubocop/formatter/disabled_lines_formatter.rb +57 -0
  565. data/lib/rubocop/formatter/emacs_style_formatter.rb +37 -0
  566. data/lib/rubocop/formatter/file_list_formatter.rb +20 -0
  567. data/lib/rubocop/formatter/formatter_set.rb +106 -0
  568. data/lib/rubocop/formatter/fuubar_style_formatter.rb +80 -0
  569. data/lib/rubocop/formatter/html_formatter.rb +141 -0
  570. data/lib/rubocop/formatter/json_formatter.rb +80 -0
  571. data/lib/rubocop/formatter/offense_count_formatter.rb +74 -0
  572. data/lib/rubocop/formatter/pacman_formatter.rb +80 -0
  573. data/lib/rubocop/formatter/progress_formatter.rb +63 -0
  574. data/lib/rubocop/formatter/quiet_formatter.rb +13 -0
  575. data/lib/rubocop/formatter/simple_text_formatter.rb +138 -0
  576. data/lib/rubocop/formatter/tap_formatter.rb +84 -0
  577. data/lib/rubocop/formatter/text_util.rb +20 -0
  578. data/lib/rubocop/formatter/worst_offenders_formatter.rb +62 -0
  579. data/lib/rubocop/magic_comment.rb +214 -0
  580. data/lib/rubocop/name_similarity.rb +21 -0
  581. data/lib/rubocop/node_pattern.rb +799 -0
  582. data/lib/rubocop/options.rb +454 -0
  583. data/lib/rubocop/path_util.rb +85 -0
  584. data/lib/rubocop/platform.rb +11 -0
  585. data/lib/rubocop/processed_source.rb +216 -0
  586. data/lib/rubocop/rake_task.rb +79 -0
  587. data/lib/rubocop/remote_config.rb +106 -0
  588. data/lib/rubocop/result_cache.rb +191 -0
  589. data/lib/rubocop/rspec/cop_helper.rb +94 -0
  590. data/lib/rubocop/rspec/expect_offense.rb +240 -0
  591. data/lib/rubocop/rspec/host_environment_simulation_helper.rb +28 -0
  592. data/lib/rubocop/rspec/shared_contexts.rb +90 -0
  593. data/lib/rubocop/rspec/support.rb +13 -0
  594. data/lib/rubocop/runner.rb +358 -0
  595. data/lib/rubocop/string_interpreter.rb +57 -0
  596. data/lib/rubocop/string_util.rb +14 -0
  597. data/lib/rubocop/target_finder.rb +190 -0
  598. data/lib/rubocop/token.rb +114 -0
  599. data/lib/rubocop/version.rb +21 -0
  600. data/lib/rubocop/warning.rb +11 -0
  601. data/lib/rubocop/yaml_duplication_checker.rb +39 -0
  602. metadata +770 -0
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ # RuboCop can be run in contexts where unexpected other libraries are included,
4
+ # which may interfere with its normal behavior. In order to test those
5
+ # situations, it may be necessary to require another library for the duration
6
+ # of one spec
7
+ module HostEnvironmentSimulatorHelper
8
+ def in_its_own_process_with(*files)
9
+ if ::Process.respond_to?(:fork)
10
+ pid = ::Process.fork do
11
+ # Need to write coverage result under different name
12
+ if defined?(SimpleCov)
13
+ SimpleCov.command_name "rspec-fork-#{Process.pid}"
14
+ SimpleCov.pid = Process.pid
15
+ end
16
+
17
+ files.each { |file| require file }
18
+ yield
19
+ end
20
+ ::Process.wait(pid)
21
+
22
+ # assert that the block did not fail
23
+ expect($CHILD_STATUS).to be_success
24
+ else
25
+ warn 'Process.fork is not available.'
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,90 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'tmpdir'
4
+ require 'fileutils'
5
+
6
+ RSpec.shared_context 'isolated environment', :isolated_environment do
7
+ around do |example|
8
+ Dir.mktmpdir do |tmpdir|
9
+ original_home = ENV['HOME']
10
+ original_xdg_config_home = ENV['XDG_CONFIG_HOME']
11
+
12
+ # Make sure to expand all symlinks in the path first. Otherwise we may
13
+ # get mismatched pathnames when loading config files later on.
14
+ tmpdir = File.realpath(tmpdir)
15
+
16
+ # Make upwards search for .rubocop.yml files stop at this directory.
17
+ RuboCop::FileFinder.root_level = tmpdir
18
+
19
+ begin
20
+ virtual_home = File.expand_path(File.join(tmpdir, 'home'))
21
+ Dir.mkdir(virtual_home)
22
+ ENV['HOME'] = virtual_home
23
+ ENV.delete('XDG_CONFIG_HOME')
24
+
25
+ working_dir = File.join(tmpdir, 'work')
26
+ Dir.mkdir(working_dir)
27
+
28
+ RuboCop::PathUtil.chdir(working_dir) do
29
+ example.run
30
+ end
31
+ ensure
32
+ ENV['HOME'] = original_home
33
+ ENV['XDG_CONFIG_HOME'] = original_xdg_config_home
34
+
35
+ RuboCop::FileFinder.root_level = nil
36
+ end
37
+ end
38
+ end
39
+ end
40
+
41
+ # `cop_config` must be declared with #let.
42
+ RSpec.shared_context 'config', :config do
43
+ let(:config) do
44
+ # Module#<
45
+ unless described_class < RuboCop::Cop::Cop
46
+ raise '`config` must be used in `describe SomeCopClass do .. end`'
47
+ end
48
+
49
+ hash = { 'AllCops' => { 'TargetRubyVersion' => ruby_version } }
50
+ hash['AllCops']['TargetRailsVersion'] = rails_version if rails_version
51
+ if respond_to?(:cop_config)
52
+ cop_name = described_class.cop_name
53
+ hash[cop_name] = RuboCop::ConfigLoader
54
+ .default_configuration[cop_name]
55
+ .merge(cop_config)
56
+ end
57
+
58
+ hash = other_cops.merge hash if respond_to?(:other_cops)
59
+
60
+ RuboCop::Config.new(hash, "#{Dir.pwd}/.rubocop.yml")
61
+ end
62
+ end
63
+
64
+ RSpec.shared_context 'mock console output' do
65
+ before do
66
+ $stdout = StringIO.new
67
+ $stderr = StringIO.new
68
+ end
69
+
70
+ after do
71
+ $stdout = STDOUT
72
+ $stderr = STDERR
73
+ end
74
+ end
75
+
76
+ RSpec.shared_context 'ruby 2.3', :ruby23 do
77
+ let(:ruby_version) { 2.3 }
78
+ end
79
+
80
+ RSpec.shared_context 'ruby 2.4', :ruby24 do
81
+ let(:ruby_version) { 2.4 }
82
+ end
83
+
84
+ RSpec.shared_context 'ruby 2.5', :ruby25 do
85
+ let(:ruby_version) { 2.5 }
86
+ end
87
+
88
+ RSpec.shared_context 'ruby 2.6', :ruby26 do
89
+ let(:ruby_version) { 2.6 }
90
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Require this file to load code that supports testing using RSpec.
4
+
5
+ require_relative 'cop_helper'
6
+ require_relative 'host_environment_simulation_helper'
7
+ require_relative 'shared_contexts'
8
+ require_relative 'expect_offense'
9
+
10
+ RSpec.configure do |config|
11
+ config.include CopHelper
12
+ config.include HostEnvironmentSimulatorHelper
13
+ end
@@ -0,0 +1,358 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'parallel'
4
+
5
+ module RuboCop
6
+ # This class handles the processing of files, which includes dealing with
7
+ # formatters and letting cops inspect the files.
8
+ class Runner # rubocop:disable Metrics/ClassLength
9
+ # An exception indicating that the inspection loop got stuck correcting
10
+ # offenses back and forth.
11
+ class InfiniteCorrectionLoop < RuntimeError
12
+ attr_reader :offenses
13
+
14
+ def initialize(path, offenses)
15
+ super "Infinite loop detected in #{path}."
16
+ @offenses = offenses
17
+ end
18
+ end
19
+
20
+ MAX_ITERATIONS = 200
21
+
22
+ attr_reader :errors, :warnings
23
+ attr_writer :aborting
24
+
25
+ def initialize(options, config_store)
26
+ @options = options
27
+ @config_store = config_store
28
+ @errors = []
29
+ @warnings = []
30
+ @aborting = false
31
+ end
32
+
33
+ def run(paths)
34
+ target_files = find_target_files(paths)
35
+ if @options[:list_target_files]
36
+ list_files(target_files)
37
+ else
38
+ warm_cache(target_files) if @options[:parallel]
39
+ inspect_files(target_files)
40
+ end
41
+ rescue Interrupt
42
+ self.aborting = true
43
+ warn ''
44
+ warn 'Exiting...'
45
+
46
+ false
47
+ end
48
+
49
+ def aborting?
50
+ @aborting
51
+ end
52
+
53
+ private
54
+
55
+ # Warms up the RuboCop cache by forking a suitable number of rubocop
56
+ # instances that each inspects its allotted group of files.
57
+ def warm_cache(target_files)
58
+ puts 'Running parallel inspection' if @options[:debug]
59
+ Parallel.each(target_files, &method(:file_offenses))
60
+ end
61
+
62
+ def find_target_files(paths)
63
+ target_finder = TargetFinder.new(@config_store, @options)
64
+ target_files = target_finder.find(paths)
65
+ target_files.each(&:freeze).freeze
66
+ end
67
+
68
+ def inspect_files(files)
69
+ inspected_files = []
70
+
71
+ formatter_set.started(files)
72
+
73
+ each_inspected_file(files) { |file| inspected_files << file }
74
+ ensure
75
+ # OPTIMIZE: Calling `ResultCache.cleanup` takes time. This optimization
76
+ # mainly targets editors that integrates RuboCop. When RuboCop is run
77
+ # by an editor, it should be inspecting only one file.
78
+ if files.size > 1 && cached_run?
79
+ ResultCache.cleanup(@config_store, @options[:debug])
80
+ end
81
+ formatter_set.finished(inspected_files.freeze)
82
+ formatter_set.close_output_files
83
+ end
84
+
85
+ def each_inspected_file(files)
86
+ files.reduce(true) do |all_passed, file|
87
+ offenses = process_file(file)
88
+ yield file
89
+
90
+ if offenses.any? { |o| considered_failure?(o) }
91
+ break false if @options[:fail_fast]
92
+
93
+ next false
94
+ end
95
+
96
+ all_passed
97
+ end
98
+ end
99
+
100
+ def list_files(paths)
101
+ paths.each do |path|
102
+ puts PathUtil.relative_path(path)
103
+ end
104
+ end
105
+
106
+ def process_file(file)
107
+ puts "Scanning #{file}" if @options[:debug]
108
+ file_started(file)
109
+
110
+ offenses = file_offenses(file)
111
+ if @options[:display_only_fail_level_offenses]
112
+ offenses = offenses.select { |o| considered_failure?(o) }
113
+ end
114
+ formatter_set.file_finished(file, offenses)
115
+ offenses
116
+ rescue InfiniteCorrectionLoop => e
117
+ formatter_set.file_finished(file, e.offenses.compact.sort.freeze)
118
+ raise
119
+ end
120
+
121
+ def file_offenses(file)
122
+ file_offense_cache(file) do
123
+ source = get_processed_source(file)
124
+ source, offenses = do_inspection_loop(file, source)
125
+ add_unneeded_disables(file, offenses.compact.sort, source)
126
+ end
127
+ end
128
+
129
+ def file_offense_cache(file)
130
+ cache = ResultCache.new(file, @options, @config_store) if cached_run?
131
+ if cache&.valid?
132
+ offenses = cache.load
133
+ # If we're running --auto-correct and the cache says there are
134
+ # offenses, we need to actually inspect the file. If the cache shows no
135
+ # offenses, we're good.
136
+ real_run_needed = @options[:auto_correct] && offenses.any?
137
+ else
138
+ real_run_needed = true
139
+ end
140
+
141
+ if real_run_needed
142
+ offenses = yield
143
+ save_in_cache(cache, offenses)
144
+ end
145
+
146
+ offenses
147
+ end
148
+
149
+ def add_unneeded_disables(file, offenses, source)
150
+ if check_for_unneeded_disables?(source)
151
+ config = @config_store.for(file)
152
+ if config.for_cop(Cop::Lint::UnneededCopDisableDirective)
153
+ .fetch('Enabled')
154
+ cop = Cop::Lint::UnneededCopDisableDirective.new(config, @options)
155
+ if cop.relevant_file?(file)
156
+ cop.check(offenses, source.disabled_line_ranges, source.comments)
157
+ offenses += cop.offenses
158
+ offenses += autocorrect_unneeded_disables(file, source, cop,
159
+ offenses)
160
+ end
161
+ end
162
+ end
163
+
164
+ offenses.sort.reject(&:disabled?).freeze
165
+ end
166
+
167
+ def check_for_unneeded_disables?(source)
168
+ !source.disabled_line_ranges.empty? && !filtered_run?
169
+ end
170
+
171
+ def filtered_run?
172
+ @options[:except] || @options[:only]
173
+ end
174
+
175
+ def autocorrect_unneeded_disables(file, source, cop, offenses)
176
+ cop.processed_source = source
177
+
178
+ team = Cop::Team.new(RuboCop::Cop::Registry.new, nil, @options)
179
+ team.autocorrect(source.buffer, [cop])
180
+
181
+ return [] unless team.updated_source_file?
182
+
183
+ # Do one extra inspection loop if any unneeded disables were
184
+ # removed. This is done in order to find rubocop:enable directives that
185
+ # have now become useless.
186
+ _source, new_offenses = do_inspection_loop(file,
187
+ get_processed_source(file))
188
+ new_offenses - offenses
189
+ end
190
+
191
+ def file_started(file)
192
+ formatter_set.file_started(file,
193
+ cli_options: @options,
194
+ config_store: @config_store)
195
+ end
196
+
197
+ def cached_run?
198
+ @cached_run ||=
199
+ (@options[:cache] == 'true' ||
200
+ @options[:cache] != 'false' &&
201
+ @config_store.for(Dir.pwd).for_all_cops['UseCache']) &&
202
+ # When running --auto-gen-config, there's some processing done in the
203
+ # cops related to calculating the Max parameters for Metrics cops. We
204
+ # need to do that processing and can not use caching.
205
+ !@options[:auto_gen_config] &&
206
+ # We can't cache results from code which is piped in to stdin
207
+ !@options[:stdin]
208
+ end
209
+
210
+ def save_in_cache(cache, offenses)
211
+ return unless cache
212
+ # Caching results when a cop has crashed would prevent the crash in the
213
+ # next run, since the cop would not be called then. We want crashes to
214
+ # show up the same in each run.
215
+ return if errors.any? || warnings.any?
216
+
217
+ cache.save(offenses)
218
+ end
219
+
220
+ def do_inspection_loop(file, processed_source)
221
+ offenses = []
222
+
223
+ # When running with --auto-correct, we need to inspect the file (which
224
+ # includes writing a corrected version of it) until no more corrections
225
+ # are made. This is because automatic corrections can introduce new
226
+ # offenses. In the normal case the loop is only executed once.
227
+ iterate_until_no_changes(processed_source, offenses) do
228
+ # The offenses that couldn't be corrected will be found again so we
229
+ # only keep the corrected ones in order to avoid duplicate reporting.
230
+ offenses.select!(&:corrected?)
231
+ new_offenses, updated_source_file = inspect_file(processed_source)
232
+ offenses.concat(new_offenses).uniq!
233
+
234
+ # We have to reprocess the source to pickup the changes. Since the
235
+ # change could (theoretically) introduce parsing errors, we break the
236
+ # loop if we find any.
237
+ break unless updated_source_file
238
+
239
+ processed_source = get_processed_source(file)
240
+ end
241
+
242
+ [processed_source, offenses]
243
+ end
244
+
245
+ def iterate_until_no_changes(source, offenses)
246
+ # Keep track of the state of the source. If a cop modifies the source
247
+ # and another cop undoes it producing identical source we have an
248
+ # infinite loop.
249
+ @processed_sources = []
250
+
251
+ # It is also possible for a cop to keep adding indefinitely to a file,
252
+ # making it bigger and bigger. If the inspection loop runs for an
253
+ # excessively high number of iterations, this is likely happening.
254
+ iterations = 0
255
+
256
+ loop do
257
+ check_for_infinite_loop(source, offenses)
258
+
259
+ if (iterations += 1) > MAX_ITERATIONS
260
+ raise InfiniteCorrectionLoop.new(source.path, offenses)
261
+ end
262
+
263
+ source = yield
264
+ break unless source
265
+ end
266
+ end
267
+
268
+ # Check whether a run created source identical to a previous run, which
269
+ # means that we definitely have an infinite loop.
270
+ def check_for_infinite_loop(processed_source, offenses)
271
+ checksum = processed_source.checksum
272
+
273
+ if @processed_sources.include?(checksum)
274
+ raise InfiniteCorrectionLoop.new(processed_source.path, offenses)
275
+ end
276
+
277
+ @processed_sources << checksum
278
+ end
279
+
280
+ def inspect_file(processed_source)
281
+ config = @config_store.for(processed_source.path)
282
+ team = Cop::Team.new(mobilized_cop_classes(config), config, @options)
283
+ offenses = team.inspect_file(processed_source)
284
+ @errors.concat(team.errors)
285
+ @warnings.concat(team.warnings)
286
+ [offenses, team.updated_source_file?]
287
+ end
288
+
289
+ def mobilized_cop_classes(config)
290
+ @mobilized_cop_classes ||= {}
291
+ @mobilized_cop_classes[config.object_id] ||= begin
292
+ cop_classes = Cop::Cop.all
293
+
294
+ %i[only except].each do |opt|
295
+ OptionsValidator.validate_cop_list(@options[opt])
296
+ end
297
+
298
+ if @options[:only]
299
+ cop_classes.select! { |c| c.match?(@options[:only]) }
300
+ else
301
+ filter_cop_classes(cop_classes, config)
302
+ end
303
+
304
+ cop_classes.reject! { |c| c.match?(@options[:except]) }
305
+
306
+ Cop::Registry.new(cop_classes)
307
+ end
308
+ end
309
+
310
+ def filter_cop_classes(cop_classes, config)
311
+ # use only cops that link to a style guide if requested
312
+ return unless style_guide_cops_only?(config)
313
+
314
+ cop_classes.select! { |cop| config.for_cop(cop)['StyleGuide'] }
315
+ end
316
+
317
+ def style_guide_cops_only?(config)
318
+ @options[:only_guide_cops] || config.for_all_cops['StyleGuideCopsOnly']
319
+ end
320
+
321
+ def formatter_set
322
+ @formatter_set ||= begin
323
+ set = Formatter::FormatterSet.new(@options)
324
+ pairs = @options[:formatters] || [['progress']]
325
+ pairs.each do |formatter_key, output_path|
326
+ set.add_formatter(formatter_key, output_path)
327
+ end
328
+ set
329
+ end
330
+ end
331
+
332
+ def considered_failure?(offense)
333
+ # For :autocorrect level, any offense - corrected or not - is a failure.
334
+ return false if offense.disabled?
335
+
336
+ return true if @options[:fail_level] == :autocorrect
337
+
338
+ !offense.corrected? && offense.severity >= minimum_severity_to_fail
339
+ end
340
+
341
+ def minimum_severity_to_fail
342
+ @minimum_severity_to_fail ||= begin
343
+ name = @options[:fail_level] || :refactor
344
+ RuboCop::Cop::Severity.new(name)
345
+ end
346
+ end
347
+
348
+ def get_processed_source(file)
349
+ ruby_version = @config_store.for(file).target_ruby_version
350
+
351
+ if @options[:stdin]
352
+ ProcessedSource.new(@options[:stdin], ruby_version, file)
353
+ else
354
+ ProcessedSource.from_file(file, ruby_version)
355
+ end
356
+ end
357
+ end
358
+ end