rubocop 0.78.0

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 (614) 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 +3963 -0
  9. data/exe/rubocop +17 -0
  10. data/lib/rubocop.rb +619 -0
  11. data/lib/rubocop/ast/builder.rb +82 -0
  12. data/lib/rubocop/ast/node.rb +644 -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 +117 -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/return_node.rb +24 -0
  49. data/lib/rubocop/ast/node/self_class_node.rb +24 -0
  50. data/lib/rubocop/ast/node/send_node.rb +13 -0
  51. data/lib/rubocop/ast/node/str_node.rb +16 -0
  52. data/lib/rubocop/ast/node/super_node.rb +21 -0
  53. data/lib/rubocop/ast/node/symbol_node.rb +12 -0
  54. data/lib/rubocop/ast/node/until_node.rb +35 -0
  55. data/lib/rubocop/ast/node/when_node.rb +53 -0
  56. data/lib/rubocop/ast/node/while_node.rb +35 -0
  57. data/lib/rubocop/ast/node/yield_node.rb +21 -0
  58. data/lib/rubocop/ast/sexp.rb +16 -0
  59. data/lib/rubocop/ast/traversal.rb +183 -0
  60. data/lib/rubocop/cached_data.rb +58 -0
  61. data/lib/rubocop/cli.rb +127 -0
  62. data/lib/rubocop/cli/command.rb +21 -0
  63. data/lib/rubocop/cli/command/auto_genenerate_config.rb +105 -0
  64. data/lib/rubocop/cli/command/base.rb +33 -0
  65. data/lib/rubocop/cli/command/execute_runner.rb +76 -0
  66. data/lib/rubocop/cli/command/init_dotfile.rb +45 -0
  67. data/lib/rubocop/cli/command/show_cops.rb +73 -0
  68. data/lib/rubocop/cli/command/version.rb +17 -0
  69. data/lib/rubocop/cli/environment.rb +21 -0
  70. data/lib/rubocop/comment_config.rb +201 -0
  71. data/lib/rubocop/config.rb +251 -0
  72. data/lib/rubocop/config_loader.rb +273 -0
  73. data/lib/rubocop/config_loader_resolver.rb +195 -0
  74. data/lib/rubocop/config_obsoletion.rb +275 -0
  75. data/lib/rubocop/config_store.rb +48 -0
  76. data/lib/rubocop/config_validator.rb +248 -0
  77. data/lib/rubocop/cop/autocorrect_logic.rb +103 -0
  78. data/lib/rubocop/cop/badge.rb +73 -0
  79. data/lib/rubocop/cop/bundler/duplicated_gem.rb +73 -0
  80. data/lib/rubocop/cop/bundler/gem_comment.rb +64 -0
  81. data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +69 -0
  82. data/lib/rubocop/cop/bundler/ordered_gems.rb +73 -0
  83. data/lib/rubocop/cop/commissioner.rb +145 -0
  84. data/lib/rubocop/cop/cop.rb +296 -0
  85. data/lib/rubocop/cop/corrector.rb +172 -0
  86. data/lib/rubocop/cop/correctors/alignment_corrector.rb +146 -0
  87. data/lib/rubocop/cop/correctors/condition_corrector.rb +28 -0
  88. data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +53 -0
  89. data/lib/rubocop/cop/correctors/empty_line_corrector.rb +26 -0
  90. data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +73 -0
  91. data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +136 -0
  92. data/lib/rubocop/cop/correctors/line_break_corrector.rb +61 -0
  93. data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +68 -0
  94. data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +44 -0
  95. data/lib/rubocop/cop/correctors/parentheses_corrector.rb +31 -0
  96. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +117 -0
  97. data/lib/rubocop/cop/correctors/punctuation_corrector.rb +29 -0
  98. data/lib/rubocop/cop/correctors/space_corrector.rb +48 -0
  99. data/lib/rubocop/cop/correctors/string_literal_corrector.rb +25 -0
  100. data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +43 -0
  101. data/lib/rubocop/cop/force.rb +42 -0
  102. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +104 -0
  103. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +106 -0
  104. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +85 -0
  105. data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +55 -0
  106. data/lib/rubocop/cop/generator.rb +223 -0
  107. data/lib/rubocop/cop/generator/configuration_injector.rb +66 -0
  108. data/lib/rubocop/cop/generator/require_file_injector.rb +78 -0
  109. data/lib/rubocop/cop/ignored_node.rb +38 -0
  110. data/lib/rubocop/cop/internal_affairs.rb +9 -0
  111. data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +59 -0
  112. data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +44 -0
  113. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +44 -0
  114. data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +54 -0
  115. data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +48 -0
  116. data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +73 -0
  117. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +52 -0
  118. data/lib/rubocop/cop/layout/access_modifier_indentation.rb +98 -0
  119. data/lib/rubocop/cop/layout/argument_alignment.rb +93 -0
  120. data/lib/rubocop/cop/layout/array_alignment.rb +39 -0
  121. data/lib/rubocop/cop/layout/assignment_indentation.rb +55 -0
  122. data/lib/rubocop/cop/layout/block_alignment.rb +244 -0
  123. data/lib/rubocop/cop/layout/block_end_newline.rb +62 -0
  124. data/lib/rubocop/cop/layout/case_indentation.rb +161 -0
  125. data/lib/rubocop/cop/layout/class_structure.rb +340 -0
  126. data/lib/rubocop/cop/layout/closing_heredoc_indentation.rb +126 -0
  127. data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +203 -0
  128. data/lib/rubocop/cop/layout/comment_indentation.rb +141 -0
  129. data/lib/rubocop/cop/layout/condition_position.rb +56 -0
  130. data/lib/rubocop/cop/layout/def_end_alignment.rb +74 -0
  131. data/lib/rubocop/cop/layout/dot_position.rb +105 -0
  132. data/lib/rubocop/cop/layout/else_alignment.rb +134 -0
  133. data/lib/rubocop/cop/layout/empty_comment.rb +151 -0
  134. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +157 -0
  135. data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +64 -0
  136. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +151 -0
  137. data/lib/rubocop/cop/layout/empty_lines.rb +76 -0
  138. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +215 -0
  139. data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +99 -0
  140. data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +45 -0
  141. data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +41 -0
  142. data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +88 -0
  143. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +136 -0
  144. data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +45 -0
  145. data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +62 -0
  146. data/lib/rubocop/cop/layout/end_alignment.rb +189 -0
  147. data/lib/rubocop/cop/layout/end_of_line.rb +92 -0
  148. data/lib/rubocop/cop/layout/extra_spacing.rb +201 -0
  149. data/lib/rubocop/cop/layout/first_argument_indentation.rb +249 -0
  150. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +167 -0
  151. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +45 -0
  152. data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +184 -0
  153. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +37 -0
  154. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +55 -0
  155. data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +46 -0
  156. data/lib/rubocop/cop/layout/first_parameter_indentation.rb +100 -0
  157. data/lib/rubocop/cop/layout/hash_alignment.rb +362 -0
  158. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +289 -0
  159. data/lib/rubocop/cop/layout/heredoc_indentation.rb +256 -0
  160. data/lib/rubocop/cop/layout/indentation_consistency.rb +202 -0
  161. data/lib/rubocop/cop/layout/indentation_width.rb +364 -0
  162. data/lib/rubocop/cop/layout/initial_indentation.rb +59 -0
  163. data/lib/rubocop/cop/layout/leading_comment_space.rb +88 -0
  164. data/lib/rubocop/cop/layout/leading_empty_lines.rb +53 -0
  165. data/lib/rubocop/cop/layout/line_length.rb +248 -0
  166. data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +118 -0
  167. data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +39 -0
  168. data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +95 -0
  169. data/lib/rubocop/cop/layout/multiline_block_layout.rb +146 -0
  170. data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +122 -0
  171. data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +50 -0
  172. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +54 -0
  173. data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +134 -0
  174. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +220 -0
  175. data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +131 -0
  176. data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +114 -0
  177. data/lib/rubocop/cop/layout/parameter_alignment.rb +118 -0
  178. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +191 -0
  179. data/lib/rubocop/cop/layout/space_after_colon.rb +47 -0
  180. data/lib/rubocop/cop/layout/space_after_comma.rb +35 -0
  181. data/lib/rubocop/cop/layout/space_after_method_name.rb +42 -0
  182. data/lib/rubocop/cop/layout/space_after_not.rb +40 -0
  183. data/lib/rubocop/cop/layout/space_after_semicolon.rb +32 -0
  184. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +169 -0
  185. data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +92 -0
  186. data/lib/rubocop/cop/layout/space_around_keyword.rb +244 -0
  187. data/lib/rubocop/cop/layout/space_around_operators.rb +207 -0
  188. data/lib/rubocop/cop/layout/space_before_block_braces.rb +136 -0
  189. data/lib/rubocop/cop/layout/space_before_comma.rb +31 -0
  190. data/lib/rubocop/cop/layout/space_before_comment.rb +35 -0
  191. data/lib/rubocop/cop/layout/space_before_first_arg.rb +67 -0
  192. data/lib/rubocop/cop/layout/space_before_semicolon.rb +27 -0
  193. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +82 -0
  194. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +231 -0
  195. data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +53 -0
  196. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +248 -0
  197. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +207 -0
  198. data/lib/rubocop/cop/layout/space_inside_parens.rb +113 -0
  199. data/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb +65 -0
  200. data/lib/rubocop/cop/layout/space_inside_range_literal.rb +63 -0
  201. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +150 -0
  202. data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +65 -0
  203. data/lib/rubocop/cop/layout/tab.rb +75 -0
  204. data/lib/rubocop/cop/layout/trailing_empty_lines.rb +113 -0
  205. data/lib/rubocop/cop/layout/trailing_whitespace.rb +77 -0
  206. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +62 -0
  207. data/lib/rubocop/cop/lint/ambiguous_operator.rb +55 -0
  208. data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +43 -0
  209. data/lib/rubocop/cop/lint/assignment_in_condition.rb +97 -0
  210. data/lib/rubocop/cop/lint/big_decimal_new.rb +44 -0
  211. data/lib/rubocop/cop/lint/boolean_symbol.rb +38 -0
  212. data/lib/rubocop/cop/lint/circular_argument_reference.rb +72 -0
  213. data/lib/rubocop/cop/lint/debugger.rb +77 -0
  214. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +111 -0
  215. data/lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb +81 -0
  216. data/lib/rubocop/cop/lint/duplicate_case_condition.rb +53 -0
  217. data/lib/rubocop/cop/lint/duplicate_hash_key.rb +38 -0
  218. data/lib/rubocop/cop/lint/duplicate_methods.rb +239 -0
  219. data/lib/rubocop/cop/lint/each_with_object_argument.rb +42 -0
  220. data/lib/rubocop/cop/lint/else_layout.rb +66 -0
  221. data/lib/rubocop/cop/lint/empty_ensure.rb +60 -0
  222. data/lib/rubocop/cop/lint/empty_expression.rb +42 -0
  223. data/lib/rubocop/cop/lint/empty_interpolation.rb +36 -0
  224. data/lib/rubocop/cop/lint/empty_when.rb +38 -0
  225. data/lib/rubocop/cop/lint/end_in_method.rb +40 -0
  226. data/lib/rubocop/cop/lint/ensure_return.rb +46 -0
  227. data/lib/rubocop/cop/lint/erb_new_arguments.rb +164 -0
  228. data/lib/rubocop/cop/lint/flip_flop.rb +32 -0
  229. data/lib/rubocop/cop/lint/float_out_of_range.rb +35 -0
  230. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +159 -0
  231. data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +156 -0
  232. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +101 -0
  233. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +127 -0
  234. data/lib/rubocop/cop/lint/inherit_exception.rb +100 -0
  235. data/lib/rubocop/cop/lint/interpolation_check.rb +40 -0
  236. data/lib/rubocop/cop/lint/literal_as_condition.rb +138 -0
  237. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +98 -0
  238. data/lib/rubocop/cop/lint/loop.rb +63 -0
  239. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +84 -0
  240. data/lib/rubocop/cop/lint/multiple_comparison.rb +48 -0
  241. data/lib/rubocop/cop/lint/nested_method_definition.rb +104 -0
  242. data/lib/rubocop/cop/lint/nested_percent_literal.rb +51 -0
  243. data/lib/rubocop/cop/lint/next_without_accumulator.rb +50 -0
  244. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +89 -0
  245. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +83 -0
  246. data/lib/rubocop/cop/lint/number_conversion.rb +81 -0
  247. data/lib/rubocop/cop/lint/ordered_magic_comments.rb +86 -0
  248. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +64 -0
  249. data/lib/rubocop/cop/lint/percent_string_array.rb +73 -0
  250. data/lib/rubocop/cop/lint/percent_symbol_array.rb +69 -0
  251. data/lib/rubocop/cop/lint/rand_one.rb +45 -0
  252. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +263 -0
  253. data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +114 -0
  254. data/lib/rubocop/cop/lint/redundant_require_statement.rb +50 -0
  255. data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +172 -0
  256. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +59 -0
  257. data/lib/rubocop/cop/lint/redundant_with_index.rb +82 -0
  258. data/lib/rubocop/cop/lint/redundant_with_object.rb +83 -0
  259. data/lib/rubocop/cop/lint/regexp_as_condition.rb +29 -0
  260. data/lib/rubocop/cop/lint/require_parentheses.rb +66 -0
  261. data/lib/rubocop/cop/lint/rescue_exception.rb +46 -0
  262. data/lib/rubocop/cop/lint/rescue_type.rb +94 -0
  263. data/lib/rubocop/cop/lint/return_in_void_context.rb +74 -0
  264. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +65 -0
  265. data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +94 -0
  266. data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +38 -0
  267. data/lib/rubocop/cop/lint/script_permission.rb +70 -0
  268. data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +91 -0
  269. data/lib/rubocop/cop/lint/shadowed_argument.rb +182 -0
  270. data/lib/rubocop/cop/lint/shadowed_exception.rb +178 -0
  271. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +53 -0
  272. data/lib/rubocop/cop/lint/suppressed_exception.rb +95 -0
  273. data/lib/rubocop/cop/lint/syntax.rb +59 -0
  274. data/lib/rubocop/cop/lint/to_json.rb +41 -0
  275. data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +82 -0
  276. data/lib/rubocop/cop/lint/unified_integer.rb +45 -0
  277. data/lib/rubocop/cop/lint/unreachable_code.rb +99 -0
  278. data/lib/rubocop/cop/lint/unused_block_argument.rb +165 -0
  279. data/lib/rubocop/cop/lint/unused_method_argument.rb +86 -0
  280. data/lib/rubocop/cop/lint/uri_escape_unescape.rb +76 -0
  281. data/lib/rubocop/cop/lint/uri_regexp.rb +73 -0
  282. data/lib/rubocop/cop/lint/useless_access_modifier.rb +274 -0
  283. data/lib/rubocop/cop/lint/useless_assignment.rb +129 -0
  284. data/lib/rubocop/cop/lint/useless_comparison.rb +28 -0
  285. data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +49 -0
  286. data/lib/rubocop/cop/lint/useless_setter_call.rb +164 -0
  287. data/lib/rubocop/cop/lint/void.rb +151 -0
  288. data/lib/rubocop/cop/message_annotator.rb +129 -0
  289. data/lib/rubocop/cop/metrics/abc_size.rb +24 -0
  290. data/lib/rubocop/cop/metrics/block_length.rb +50 -0
  291. data/lib/rubocop/cop/metrics/block_nesting.rb +65 -0
  292. data/lib/rubocop/cop/metrics/class_length.rb +36 -0
  293. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +32 -0
  294. data/lib/rubocop/cop/metrics/method_length.rb +36 -0
  295. data/lib/rubocop/cop/metrics/module_length.rb +36 -0
  296. data/lib/rubocop/cop/metrics/parameter_lists.rb +54 -0
  297. data/lib/rubocop/cop/metrics/perceived_complexity.rb +61 -0
  298. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +84 -0
  299. data/lib/rubocop/cop/migration/department_name.rb +44 -0
  300. data/lib/rubocop/cop/mixin/alignment.rb +74 -0
  301. data/lib/rubocop/cop/mixin/annotation_comment.rb +37 -0
  302. data/lib/rubocop/cop/mixin/array_min_size.rb +59 -0
  303. data/lib/rubocop/cop/mixin/array_syntax.rb +17 -0
  304. data/lib/rubocop/cop/mixin/check_assignment.rb +44 -0
  305. data/lib/rubocop/cop/mixin/check_line_breakable.rb +190 -0
  306. data/lib/rubocop/cop/mixin/classish_length.rb +37 -0
  307. data/lib/rubocop/cop/mixin/code_length.rb +38 -0
  308. data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +98 -0
  309. data/lib/rubocop/cop/mixin/configurable_formatting.rb +47 -0
  310. data/lib/rubocop/cop/mixin/configurable_max.rb +23 -0
  311. data/lib/rubocop/cop/mixin/configurable_naming.rb +16 -0
  312. data/lib/rubocop/cop/mixin/configurable_numbering.rb +17 -0
  313. data/lib/rubocop/cop/mixin/def_node.rb +33 -0
  314. data/lib/rubocop/cop/mixin/documentation_comment.rb +52 -0
  315. data/lib/rubocop/cop/mixin/duplication.rb +46 -0
  316. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +172 -0
  317. data/lib/rubocop/cop/mixin/empty_parameter.rb +24 -0
  318. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +67 -0
  319. data/lib/rubocop/cop/mixin/enforce_superclass.rb +30 -0
  320. data/lib/rubocop/cop/mixin/first_element_line_break.rb +46 -0
  321. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +53 -0
  322. data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +147 -0
  323. data/lib/rubocop/cop/mixin/heredoc.rb +32 -0
  324. data/lib/rubocop/cop/mixin/ignored_methods.rb +19 -0
  325. data/lib/rubocop/cop/mixin/ignored_pattern.rb +29 -0
  326. data/lib/rubocop/cop/mixin/integer_node.rb +14 -0
  327. data/lib/rubocop/cop/mixin/interpolation.rb +27 -0
  328. data/lib/rubocop/cop/mixin/line_length_help.rb +88 -0
  329. data/lib/rubocop/cop/mixin/match_range.rb +26 -0
  330. data/lib/rubocop/cop/mixin/method_complexity.rb +57 -0
  331. data/lib/rubocop/cop/mixin/method_preference.rb +31 -0
  332. data/lib/rubocop/cop/mixin/min_body_length.rb +21 -0
  333. data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +86 -0
  334. data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +33 -0
  335. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +255 -0
  336. data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +141 -0
  337. data/lib/rubocop/cop/mixin/negative_conditional.rb +32 -0
  338. data/lib/rubocop/cop/mixin/nil_methods.rb +25 -0
  339. data/lib/rubocop/cop/mixin/on_normal_if_unless.rb +14 -0
  340. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +56 -0
  341. data/lib/rubocop/cop/mixin/parentheses.rb +17 -0
  342. data/lib/rubocop/cop/mixin/parser_diagnostic.rb +37 -0
  343. data/lib/rubocop/cop/mixin/percent_array.rb +52 -0
  344. data/lib/rubocop/cop/mixin/percent_literal.rb +38 -0
  345. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +181 -0
  346. data/lib/rubocop/cop/mixin/preferred_delimiters.rb +53 -0
  347. data/lib/rubocop/cop/mixin/range_help.rb +117 -0
  348. data/lib/rubocop/cop/mixin/rational_literal.rb +18 -0
  349. data/lib/rubocop/cop/mixin/rescue_node.rb +22 -0
  350. data/lib/rubocop/cop/mixin/safe_assignment.rb +23 -0
  351. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +55 -0
  352. data/lib/rubocop/cop/mixin/space_before_punctuation.rb +49 -0
  353. data/lib/rubocop/cop/mixin/statement_modifier.rb +71 -0
  354. data/lib/rubocop/cop/mixin/string_help.rb +35 -0
  355. data/lib/rubocop/cop/mixin/string_literals_help.rb +23 -0
  356. data/lib/rubocop/cop/mixin/surrounding_space.rb +146 -0
  357. data/lib/rubocop/cop/mixin/target_ruby_version.rb +16 -0
  358. data/lib/rubocop/cop/mixin/too_many_lines.rb +35 -0
  359. data/lib/rubocop/cop/mixin/trailing_body.rb +26 -0
  360. data/lib/rubocop/cop/mixin/trailing_comma.rb +221 -0
  361. data/lib/rubocop/cop/mixin/uncommunicative_name.rb +111 -0
  362. data/lib/rubocop/cop/mixin/unused_argument.rb +33 -0
  363. data/lib/rubocop/cop/naming/accessor_method_name.rb +55 -0
  364. data/lib/rubocop/cop/naming/ascii_identifiers.rb +72 -0
  365. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +43 -0
  366. data/lib/rubocop/cop/naming/block_parameter_name.rb +49 -0
  367. data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +33 -0
  368. data/lib/rubocop/cop/naming/constant_name.rb +81 -0
  369. data/lib/rubocop/cop/naming/file_name.rb +212 -0
  370. data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +62 -0
  371. data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +55 -0
  372. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +171 -0
  373. data/lib/rubocop/cop/naming/method_name.rb +53 -0
  374. data/lib/rubocop/cop/naming/method_parameter_name.rb +58 -0
  375. data/lib/rubocop/cop/naming/predicate_name.rb +108 -0
  376. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +112 -0
  377. data/lib/rubocop/cop/naming/variable_name.rb +52 -0
  378. data/lib/rubocop/cop/naming/variable_number.rb +61 -0
  379. data/lib/rubocop/cop/offense.rb +216 -0
  380. data/lib/rubocop/cop/registry.rb +211 -0
  381. data/lib/rubocop/cop/security/eval.rb +31 -0
  382. data/lib/rubocop/cop/security/json_load.rb +46 -0
  383. data/lib/rubocop/cop/security/marshal_load.rb +39 -0
  384. data/lib/rubocop/cop/security/open.rb +71 -0
  385. data/lib/rubocop/cop/security/yaml_load.rb +37 -0
  386. data/lib/rubocop/cop/severity.rb +77 -0
  387. data/lib/rubocop/cop/style/access_modifier_declarations.rb +112 -0
  388. data/lib/rubocop/cop/style/alias.rb +147 -0
  389. data/lib/rubocop/cop/style/and_or.rb +146 -0
  390. data/lib/rubocop/cop/style/array_join.rb +39 -0
  391. data/lib/rubocop/cop/style/ascii_comments.rb +61 -0
  392. data/lib/rubocop/cop/style/attr.rb +70 -0
  393. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +51 -0
  394. data/lib/rubocop/cop/style/bare_percent_literals.rb +78 -0
  395. data/lib/rubocop/cop/style/begin_block.rb +22 -0
  396. data/lib/rubocop/cop/style/block_comments.rb +70 -0
  397. data/lib/rubocop/cop/style/block_delimiters.rb +331 -0
  398. data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +209 -0
  399. data/lib/rubocop/cop/style/case_equality.rb +30 -0
  400. data/lib/rubocop/cop/style/character_literal.rb +53 -0
  401. data/lib/rubocop/cop/style/class_and_module_children.rb +151 -0
  402. data/lib/rubocop/cop/style/class_check.rb +59 -0
  403. data/lib/rubocop/cop/style/class_methods.rb +60 -0
  404. data/lib/rubocop/cop/style/class_vars.rb +48 -0
  405. data/lib/rubocop/cop/style/collection_methods.rb +77 -0
  406. data/lib/rubocop/cop/style/colon_method_call.rb +48 -0
  407. data/lib/rubocop/cop/style/colon_method_definition.rb +37 -0
  408. data/lib/rubocop/cop/style/command_literal.rb +187 -0
  409. data/lib/rubocop/cop/style/comment_annotation.rb +97 -0
  410. data/lib/rubocop/cop/style/commented_keyword.rb +73 -0
  411. data/lib/rubocop/cop/style/conditional_assignment.rb +668 -0
  412. data/lib/rubocop/cop/style/constant_visibility.rb +77 -0
  413. data/lib/rubocop/cop/style/copyright.rb +99 -0
  414. data/lib/rubocop/cop/style/date_time.rb +77 -0
  415. data/lib/rubocop/cop/style/def_with_parentheses.rb +57 -0
  416. data/lib/rubocop/cop/style/dir.rb +48 -0
  417. data/lib/rubocop/cop/style/documentation.rb +97 -0
  418. data/lib/rubocop/cop/style/documentation_method.rb +125 -0
  419. data/lib/rubocop/cop/style/double_cop_disable_directive.rb +55 -0
  420. data/lib/rubocop/cop/style/double_negation.rb +35 -0
  421. data/lib/rubocop/cop/style/each_for_simple_loop.rb +58 -0
  422. data/lib/rubocop/cop/style/each_with_object.rb +110 -0
  423. data/lib/rubocop/cop/style/empty_block_parameter.rb +48 -0
  424. data/lib/rubocop/cop/style/empty_case_condition.rb +107 -0
  425. data/lib/rubocop/cop/style/empty_else.rb +175 -0
  426. data/lib/rubocop/cop/style/empty_lambda_parameter.rb +45 -0
  427. data/lib/rubocop/cop/style/empty_literal.rb +123 -0
  428. data/lib/rubocop/cop/style/empty_method.rb +115 -0
  429. data/lib/rubocop/cop/style/encoding.rb +56 -0
  430. data/lib/rubocop/cop/style/end_block.rb +25 -0
  431. data/lib/rubocop/cop/style/eval_with_location.rb +148 -0
  432. data/lib/rubocop/cop/style/even_odd.rb +58 -0
  433. data/lib/rubocop/cop/style/expand_path_arguments.rb +194 -0
  434. data/lib/rubocop/cop/style/float_division.rb +94 -0
  435. data/lib/rubocop/cop/style/for.rb +88 -0
  436. data/lib/rubocop/cop/style/format_string.rb +127 -0
  437. data/lib/rubocop/cop/style/format_string_token.rb +121 -0
  438. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +159 -0
  439. data/lib/rubocop/cop/style/global_vars.rb +80 -0
  440. data/lib/rubocop/cop/style/guard_clause.rb +122 -0
  441. data/lib/rubocop/cop/style/hash_syntax.rb +214 -0
  442. data/lib/rubocop/cop/style/identical_conditional_branches.rb +130 -0
  443. data/lib/rubocop/cop/style/if_inside_else.rb +87 -0
  444. data/lib/rubocop/cop/style/if_unless_modifier.rb +169 -0
  445. data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +39 -0
  446. data/lib/rubocop/cop/style/if_with_semicolon.rb +30 -0
  447. data/lib/rubocop/cop/style/implicit_runtime_error.rb +32 -0
  448. data/lib/rubocop/cop/style/infinite_loop.rb +128 -0
  449. data/lib/rubocop/cop/style/inline_comment.rb +34 -0
  450. data/lib/rubocop/cop/style/inverse_methods.rb +193 -0
  451. data/lib/rubocop/cop/style/ip_addresses.rb +76 -0
  452. data/lib/rubocop/cop/style/lambda.rb +131 -0
  453. data/lib/rubocop/cop/style/lambda_call.rb +93 -0
  454. data/lib/rubocop/cop/style/line_end_concatenation.rb +125 -0
  455. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +388 -0
  456. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +77 -0
  457. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +46 -0
  458. data/lib/rubocop/cop/style/method_def_parentheses.rb +166 -0
  459. data/lib/rubocop/cop/style/method_missing_super.rb +34 -0
  460. data/lib/rubocop/cop/style/min_max.rb +68 -0
  461. data/lib/rubocop/cop/style/missing_else.rb +180 -0
  462. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +46 -0
  463. data/lib/rubocop/cop/style/mixin_grouping.rb +148 -0
  464. data/lib/rubocop/cop/style/mixin_usage.rb +90 -0
  465. data/lib/rubocop/cop/style/module_function.rb +104 -0
  466. data/lib/rubocop/cop/style/multiline_block_chain.rb +40 -0
  467. data/lib/rubocop/cop/style/multiline_if_modifier.rb +67 -0
  468. data/lib/rubocop/cop/style/multiline_if_then.rb +50 -0
  469. data/lib/rubocop/cop/style/multiline_memoization.rb +94 -0
  470. data/lib/rubocop/cop/style/multiline_method_signature.rb +61 -0
  471. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +38 -0
  472. data/lib/rubocop/cop/style/multiline_when_then.rb +55 -0
  473. data/lib/rubocop/cop/style/multiple_comparison.rb +92 -0
  474. data/lib/rubocop/cop/style/mutable_constant.rb +174 -0
  475. data/lib/rubocop/cop/style/negated_if.rb +99 -0
  476. data/lib/rubocop/cop/style/negated_unless.rb +89 -0
  477. data/lib/rubocop/cop/style/negated_while.rb +48 -0
  478. data/lib/rubocop/cop/style/nested_modifier.rb +107 -0
  479. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +67 -0
  480. data/lib/rubocop/cop/style/nested_ternary_operator.rb +32 -0
  481. data/lib/rubocop/cop/style/next.rb +244 -0
  482. data/lib/rubocop/cop/style/nil_comparison.rb +75 -0
  483. data/lib/rubocop/cop/style/non_nil_check.rb +136 -0
  484. data/lib/rubocop/cop/style/not.rb +82 -0
  485. data/lib/rubocop/cop/style/numeric_literal_prefix.rb +124 -0
  486. data/lib/rubocop/cop/style/numeric_literals.rb +114 -0
  487. data/lib/rubocop/cop/style/numeric_predicate.rb +137 -0
  488. data/lib/rubocop/cop/style/one_line_conditional.rb +101 -0
  489. data/lib/rubocop/cop/style/option_hash.rb +55 -0
  490. data/lib/rubocop/cop/style/optional_arguments.rb +58 -0
  491. data/lib/rubocop/cop/style/or_assignment.rb +95 -0
  492. data/lib/rubocop/cop/style/parallel_assignment.rb +287 -0
  493. data/lib/rubocop/cop/style/parentheses_around_condition.rb +117 -0
  494. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +127 -0
  495. data/lib/rubocop/cop/style/percent_q_literals.rb +73 -0
  496. data/lib/rubocop/cop/style/perl_backrefs.rb +38 -0
  497. data/lib/rubocop/cop/style/preferred_hash_methods.rb +75 -0
  498. data/lib/rubocop/cop/style/proc.rb +34 -0
  499. data/lib/rubocop/cop/style/raise_args.rb +145 -0
  500. data/lib/rubocop/cop/style/random_with_offset.rb +158 -0
  501. data/lib/rubocop/cop/style/redundant_begin.rb +91 -0
  502. data/lib/rubocop/cop/style/redundant_capital_w.rb +51 -0
  503. data/lib/rubocop/cop/style/redundant_condition.rb +112 -0
  504. data/lib/rubocop/cop/style/redundant_conditional.rb +97 -0
  505. data/lib/rubocop/cop/style/redundant_exception.rb +60 -0
  506. data/lib/rubocop/cop/style/redundant_freeze.rb +67 -0
  507. data/lib/rubocop/cop/style/redundant_interpolation.rb +98 -0
  508. data/lib/rubocop/cop/style/redundant_parentheses.rb +231 -0
  509. data/lib/rubocop/cop/style/redundant_percent_q.rb +112 -0
  510. data/lib/rubocop/cop/style/redundant_return.rb +171 -0
  511. data/lib/rubocop/cop/style/redundant_self.rb +171 -0
  512. data/lib/rubocop/cop/style/redundant_sort.rb +165 -0
  513. data/lib/rubocop/cop/style/redundant_sort_by.rb +50 -0
  514. data/lib/rubocop/cop/style/regexp_literal.rb +228 -0
  515. data/lib/rubocop/cop/style/rescue_modifier.rb +73 -0
  516. data/lib/rubocop/cop/style/rescue_standard_error.rb +124 -0
  517. data/lib/rubocop/cop/style/return_nil.rb +89 -0
  518. data/lib/rubocop/cop/style/safe_navigation.rb +275 -0
  519. data/lib/rubocop/cop/style/sample.rb +144 -0
  520. data/lib/rubocop/cop/style/self_assignment.rb +97 -0
  521. data/lib/rubocop/cop/style/semicolon.rb +101 -0
  522. data/lib/rubocop/cop/style/send.rb +31 -0
  523. data/lib/rubocop/cop/style/signal_exception.rb +211 -0
  524. data/lib/rubocop/cop/style/single_line_block_params.rb +95 -0
  525. data/lib/rubocop/cop/style/single_line_methods.rb +83 -0
  526. data/lib/rubocop/cop/style/special_global_vars.rb +211 -0
  527. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +86 -0
  528. data/lib/rubocop/cop/style/stderr_puts.rb +61 -0
  529. data/lib/rubocop/cop/style/string_hash_keys.rb +50 -0
  530. data/lib/rubocop/cop/style/string_literals.rb +129 -0
  531. data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +49 -0
  532. data/lib/rubocop/cop/style/string_methods.rb +46 -0
  533. data/lib/rubocop/cop/style/strip.rb +46 -0
  534. data/lib/rubocop/cop/style/struct_inheritance.rb +39 -0
  535. data/lib/rubocop/cop/style/symbol_array.rb +119 -0
  536. data/lib/rubocop/cop/style/symbol_literal.rb +32 -0
  537. data/lib/rubocop/cop/style/symbol_proc.rb +110 -0
  538. data/lib/rubocop/cop/style/ternary_parentheses.rb +223 -0
  539. data/lib/rubocop/cop/style/trailing_body_on_class.rb +43 -0
  540. data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +54 -0
  541. data/lib/rubocop/cop/style/trailing_body_on_module.rb +43 -0
  542. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +96 -0
  543. data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +58 -0
  544. data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +56 -0
  545. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +91 -0
  546. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +167 -0
  547. data/lib/rubocop/cop/style/trivial_accessors.rb +191 -0
  548. data/lib/rubocop/cop/style/unless_else.rb +55 -0
  549. data/lib/rubocop/cop/style/unpack_first.rb +65 -0
  550. data/lib/rubocop/cop/style/variable_interpolation.rb +48 -0
  551. data/lib/rubocop/cop/style/when_then.rb +37 -0
  552. data/lib/rubocop/cop/style/while_until_do.rb +59 -0
  553. data/lib/rubocop/cop/style/while_until_modifier.rb +61 -0
  554. data/lib/rubocop/cop/style/word_array.rb +102 -0
  555. data/lib/rubocop/cop/style/yoda_condition.rb +141 -0
  556. data/lib/rubocop/cop/style/zero_length_predicate.rb +117 -0
  557. data/lib/rubocop/cop/team.rb +196 -0
  558. data/lib/rubocop/cop/util.rb +127 -0
  559. data/lib/rubocop/cop/utils/format_string.rb +120 -0
  560. data/lib/rubocop/cop/variable_force.rb +466 -0
  561. data/lib/rubocop/cop/variable_force/assignment.rb +96 -0
  562. data/lib/rubocop/cop/variable_force/branch.rb +322 -0
  563. data/lib/rubocop/cop/variable_force/branchable.rb +23 -0
  564. data/lib/rubocop/cop/variable_force/reference.rb +49 -0
  565. data/lib/rubocop/cop/variable_force/scope.rb +109 -0
  566. data/lib/rubocop/cop/variable_force/variable.rb +117 -0
  567. data/lib/rubocop/cop/variable_force/variable_table.rb +129 -0
  568. data/lib/rubocop/core_ext/string.rb +23 -0
  569. data/lib/rubocop/error.rb +34 -0
  570. data/lib/rubocop/file_finder.rb +42 -0
  571. data/lib/rubocop/formatter/auto_gen_config_formatter.rb +16 -0
  572. data/lib/rubocop/formatter/base_formatter.rb +123 -0
  573. data/lib/rubocop/formatter/clang_style_formatter.rb +57 -0
  574. data/lib/rubocop/formatter/colorizable.rb +41 -0
  575. data/lib/rubocop/formatter/disabled_config_formatter.rb +224 -0
  576. data/lib/rubocop/formatter/disabled_lines_formatter.rb +57 -0
  577. data/lib/rubocop/formatter/emacs_style_formatter.rb +37 -0
  578. data/lib/rubocop/formatter/file_list_formatter.rb +20 -0
  579. data/lib/rubocop/formatter/formatter_set.rb +106 -0
  580. data/lib/rubocop/formatter/fuubar_style_formatter.rb +80 -0
  581. data/lib/rubocop/formatter/html_formatter.rb +141 -0
  582. data/lib/rubocop/formatter/json_formatter.rb +81 -0
  583. data/lib/rubocop/formatter/offense_count_formatter.rb +74 -0
  584. data/lib/rubocop/formatter/pacman_formatter.rb +80 -0
  585. data/lib/rubocop/formatter/progress_formatter.rb +63 -0
  586. data/lib/rubocop/formatter/quiet_formatter.rb +13 -0
  587. data/lib/rubocop/formatter/simple_text_formatter.rb +138 -0
  588. data/lib/rubocop/formatter/tap_formatter.rb +82 -0
  589. data/lib/rubocop/formatter/text_util.rb +20 -0
  590. data/lib/rubocop/formatter/worst_offenders_formatter.rb +62 -0
  591. data/lib/rubocop/magic_comment.rb +214 -0
  592. data/lib/rubocop/name_similarity.rb +21 -0
  593. data/lib/rubocop/node_pattern.rb +801 -0
  594. data/lib/rubocop/options.rb +460 -0
  595. data/lib/rubocop/path_util.rb +85 -0
  596. data/lib/rubocop/platform.rb +11 -0
  597. data/lib/rubocop/processed_source.rb +216 -0
  598. data/lib/rubocop/rake_task.rb +80 -0
  599. data/lib/rubocop/remote_config.rb +106 -0
  600. data/lib/rubocop/result_cache.rb +207 -0
  601. data/lib/rubocop/rspec/cop_helper.rb +94 -0
  602. data/lib/rubocop/rspec/expect_offense.rb +240 -0
  603. data/lib/rubocop/rspec/host_environment_simulation_helper.rb +28 -0
  604. data/lib/rubocop/rspec/shared_contexts.rb +90 -0
  605. data/lib/rubocop/rspec/support.rb +13 -0
  606. data/lib/rubocop/runner.rb +379 -0
  607. data/lib/rubocop/string_interpreter.rb +57 -0
  608. data/lib/rubocop/string_util.rb +14 -0
  609. data/lib/rubocop/target_finder.rb +196 -0
  610. data/lib/rubocop/token.rb +114 -0
  611. data/lib/rubocop/version.rb +21 -0
  612. data/lib/rubocop/warning.rb +11 -0
  613. data/lib/rubocop/yaml_duplication_checker.rb +39 -0
  614. metadata +782 -0
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Style
6
+ #
7
+ # This cop checks for BEGIN blocks.
8
+ #
9
+ # @example
10
+ # # bad
11
+ # BEGIN { test }
12
+ #
13
+ class BeginBlock < Cop
14
+ MSG = 'Avoid the use of `BEGIN` blocks.'
15
+
16
+ def on_preexe(node)
17
+ add_offense(node, location: :keyword)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Style
6
+ # This cop looks for uses of block comments (=begin...=end).
7
+ #
8
+ # @example
9
+ # # bad
10
+ # =begin
11
+ # Multiple lines
12
+ # of comments...
13
+ # =end
14
+ #
15
+ # # good
16
+ # # Multiple lines
17
+ # # of comments...
18
+ #
19
+ class BlockComments < Cop
20
+ include RangeHelp
21
+
22
+ MSG = 'Do not use block comments.'
23
+ BEGIN_LENGTH = "=begin\n".length
24
+ END_LENGTH = "\n=end".length
25
+
26
+ def investigate(processed_source)
27
+ processed_source.each_comment do |comment|
28
+ next unless comment.document?
29
+
30
+ add_offense(comment)
31
+ end
32
+ end
33
+
34
+ def autocorrect(comment)
35
+ eq_begin, eq_end, contents = parts(comment)
36
+
37
+ lambda do |corrector|
38
+ corrector.remove(eq_begin)
39
+ unless contents.length.zero?
40
+ corrector.replace(contents,
41
+ contents.source
42
+ .gsub(/\A/, '# ')
43
+ .gsub(/\n\n/, "\n#\n")
44
+ .gsub(/\n(?=[^#])/, "\n# "))
45
+ end
46
+ corrector.remove(eq_end)
47
+ end
48
+ end
49
+
50
+ private
51
+
52
+ def parts(comment)
53
+ expr = comment.loc.expression
54
+ eq_begin = expr.resize(BEGIN_LENGTH)
55
+ eq_end = eq_end_part(comment, expr)
56
+ contents = range_between(eq_begin.end_pos, eq_end.begin_pos)
57
+ [eq_begin, eq_end, contents]
58
+ end
59
+
60
+ def eq_end_part(comment, expr)
61
+ if comment.text.chomp == comment.text
62
+ range_between(expr.end_pos - END_LENGTH - 1, expr.end_pos - 2)
63
+ else
64
+ range_between(expr.end_pos - END_LENGTH, expr.end_pos)
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,331 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Style
6
+ # Check for uses of braces or do/end around single line or
7
+ # multi-line blocks.
8
+ #
9
+ # @example EnforcedStyle: line_count_based (default)
10
+ # # bad - single line block
11
+ # items.each do |item| item / 5 end
12
+ #
13
+ # # good - single line block
14
+ # items.each { |item| item / 5 }
15
+ #
16
+ # # bad - multi-line block
17
+ # things.map { |thing|
18
+ # something = thing.some_method
19
+ # process(something)
20
+ # }
21
+ #
22
+ # # good - multi-line block
23
+ # things.map do |thing|
24
+ # something = thing.some_method
25
+ # process(something)
26
+ # end
27
+ #
28
+ # @example EnforcedStyle: semantic
29
+ # # Prefer `do...end` over `{...}` for procedural blocks.
30
+ #
31
+ # # return value is used/assigned
32
+ # # bad
33
+ # foo = map do |x|
34
+ # x
35
+ # end
36
+ # puts (map do |x|
37
+ # x
38
+ # end)
39
+ #
40
+ # # return value is not used out of scope
41
+ # # good
42
+ # map do |x|
43
+ # x
44
+ # end
45
+ #
46
+ # # Prefer `{...}` over `do...end` for functional blocks.
47
+ #
48
+ # # return value is not used out of scope
49
+ # # bad
50
+ # each { |x|
51
+ # x
52
+ # }
53
+ #
54
+ # # return value is used/assigned
55
+ # # good
56
+ # foo = map { |x|
57
+ # x
58
+ # }
59
+ # map { |x|
60
+ # x
61
+ # }.inspect
62
+ #
63
+ # # The AllowBracesOnProceduralOneLiners option is ignored unless the
64
+ # # EnforcedStyle is set to `semantic`. If so:
65
+ #
66
+ # # If the AllowBracesOnProceduralOneLiners option is unspecified, or
67
+ # # set to `false` or any other falsey value, then semantic purity is
68
+ # # maintained, so one-line procedural blocks must use do-end, not
69
+ # # braces.
70
+ #
71
+ # # bad
72
+ # collection.each { |element| puts element }
73
+ #
74
+ # # good
75
+ # collection.each do |element| puts element end
76
+ #
77
+ # # If the AllowBracesOnProceduralOneLiners option is set to `true`, or
78
+ # # any other truthy value, then one-line procedural blocks may use
79
+ # # either style. (There is no setting for requiring braces on them.)
80
+ #
81
+ # # good
82
+ # collection.each { |element| puts element }
83
+ #
84
+ # # also good
85
+ # collection.each do |element| puts element end
86
+ #
87
+ # @example EnforcedStyle: braces_for_chaining
88
+ # # bad
89
+ # words.each do |word|
90
+ # word.flip.flop
91
+ # end.join("-")
92
+ #
93
+ # # good
94
+ # words.each { |word|
95
+ # word.flip.flop
96
+ # }.join("-")
97
+ #
98
+ # @example EnforcedStyle: always_braces
99
+ # # bad
100
+ # words.each do |word|
101
+ # word.flip.flop
102
+ # end
103
+ #
104
+ # # good
105
+ # words.each { |word|
106
+ # word.flip.flop
107
+ # }
108
+ #
109
+ class BlockDelimiters < Cop
110
+ include ConfigurableEnforcedStyle
111
+ include IgnoredMethods
112
+
113
+ ALWAYS_BRACES_MESSAGE = 'Prefer `{...}` over `do...end` for blocks.'
114
+
115
+ def on_send(node)
116
+ return unless node.arguments?
117
+ return if node.parenthesized?
118
+ return if node.operator_method? || node.assignment_method?
119
+
120
+ node.arguments.each do |arg|
121
+ get_blocks(arg) do |block|
122
+ # If there are no parentheses around the arguments, then braces
123
+ # and do-end have different meaning due to how they bind, so we
124
+ # allow either.
125
+ ignore_node(block)
126
+ end
127
+ end
128
+ end
129
+
130
+ def on_block(node)
131
+ return if ignored_node?(node)
132
+
133
+ add_offense(node, location: :begin) unless proper_block_style?(node)
134
+ end
135
+
136
+ def autocorrect(node)
137
+ return if correction_would_break_code?(node)
138
+
139
+ if node.braces?
140
+ replace_braces_with_do_end(node.loc)
141
+ else
142
+ replace_do_end_with_braces(node.loc)
143
+ end
144
+ end
145
+
146
+ private
147
+
148
+ def line_count_based_message(node)
149
+ if node.multiline?
150
+ 'Avoid using `{...}` for multi-line blocks.'
151
+ else
152
+ 'Prefer `{...}` over `do...end` for single-line blocks.'
153
+ end
154
+ end
155
+
156
+ def semantic_message(node)
157
+ block_begin = node.loc.begin.source
158
+
159
+ if block_begin == '{'
160
+ 'Prefer `do...end` over `{...}` for procedural blocks.'
161
+ else
162
+ 'Prefer `{...}` over `do...end` for functional blocks.'
163
+ end
164
+ end
165
+
166
+ def braces_for_chaining_message(node)
167
+ if node.multiline?
168
+ if node.chained?
169
+ 'Prefer `{...}` over `do...end` for multi-line chained blocks.'
170
+ else
171
+ 'Prefer `do...end` for multi-line blocks without chaining.'
172
+ end
173
+ else
174
+ 'Prefer `{...}` over `do...end` for single-line blocks.'
175
+ end
176
+ end
177
+
178
+ def message(node)
179
+ case style
180
+ when :line_count_based then line_count_based_message(node)
181
+ when :semantic then semantic_message(node)
182
+ when :braces_for_chaining then braces_for_chaining_message(node)
183
+ when :always_braces then ALWAYS_BRACES_MESSAGE
184
+ end
185
+ end
186
+
187
+ def replace_braces_with_do_end(loc)
188
+ b = loc.begin
189
+ e = loc.end
190
+
191
+ lambda do |corrector|
192
+ corrector.insert_before(b, ' ') unless whitespace_before?(b)
193
+ corrector.insert_before(e, ' ') unless whitespace_before?(e)
194
+ corrector.insert_after(b, ' ') unless whitespace_after?(b)
195
+ corrector.replace(b, 'do')
196
+ corrector.replace(e, 'end')
197
+ end
198
+ end
199
+
200
+ def replace_do_end_with_braces(loc)
201
+ b = loc.begin
202
+ e = loc.end
203
+
204
+ lambda do |corrector|
205
+ corrector.insert_after(b, ' ') unless whitespace_after?(b, 2)
206
+
207
+ corrector.replace(b, '{')
208
+ corrector.replace(e, '}')
209
+ end
210
+ end
211
+
212
+ def whitespace_before?(range)
213
+ range.source_buffer.source[range.begin_pos - 1, 1] =~ /\s/
214
+ end
215
+
216
+ def whitespace_after?(range, length = 1)
217
+ range.source_buffer.source[range.begin_pos + length, 1] =~ /\s/
218
+ end
219
+
220
+ # rubocop:disable Metrics/CyclomaticComplexity
221
+ def get_blocks(node, &block)
222
+ case node.type
223
+ when :block
224
+ yield node
225
+ when :send
226
+ get_blocks(node.receiver, &block) if node.receiver
227
+ when :hash
228
+ # A hash which is passed as method argument may have no braces
229
+ # In that case, one of the K/V pairs could contain a block node
230
+ # which could change in meaning if do...end replaced {...}
231
+ return if node.braces?
232
+
233
+ node.each_child_node { |child| get_blocks(child, &block) }
234
+ when :pair
235
+ node.each_child_node { |child| get_blocks(child, &block) }
236
+ end
237
+ end
238
+ # rubocop:enable Metrics/CyclomaticComplexity
239
+
240
+ def proper_block_style?(node)
241
+ return true if ignored_method?(node.method_name)
242
+
243
+ case style
244
+ when :line_count_based then line_count_based_block_style?(node)
245
+ when :semantic then semantic_block_style?(node)
246
+ when :braces_for_chaining then braces_for_chaining_style?(node)
247
+ when :always_braces then braces_style?(node)
248
+ end
249
+ end
250
+
251
+ def line_count_based_block_style?(node)
252
+ node.multiline? ^ node.braces?
253
+ end
254
+
255
+ def semantic_block_style?(node)
256
+ method_name = node.method_name
257
+
258
+ if node.braces?
259
+ functional_method?(method_name) || functional_block?(node) ||
260
+ (procedural_oneliners_may_have_braces? && !node.multiline?)
261
+ else
262
+ procedural_method?(method_name) || !return_value_used?(node)
263
+ end
264
+ end
265
+
266
+ def braces_for_chaining_style?(node)
267
+ block_begin = node.loc.begin.source
268
+
269
+ block_begin == if node.multiline?
270
+ (node.chained? ? '{' : 'do')
271
+ else
272
+ '{'
273
+ end
274
+ end
275
+
276
+ def braces_style?(node)
277
+ node.loc.begin.source == '{'
278
+ end
279
+
280
+ def correction_would_break_code?(node)
281
+ return unless node.keywords?
282
+
283
+ node.send_node.arguments? && !node.send_node.parenthesized?
284
+ end
285
+
286
+ def functional_method?(method_name)
287
+ cop_config['FunctionalMethods'].map(&:to_sym).include?(method_name)
288
+ end
289
+
290
+ def functional_block?(node)
291
+ return_value_used?(node) || return_value_of_scope?(node)
292
+ end
293
+
294
+ def procedural_oneliners_may_have_braces?
295
+ cop_config['AllowBracesOnProceduralOneLiners']
296
+ end
297
+
298
+ def procedural_method?(method_name)
299
+ cop_config['ProceduralMethods'].map(&:to_sym).include?(method_name)
300
+ end
301
+
302
+ def return_value_used?(node)
303
+ return unless node.parent
304
+
305
+ # If there are parentheses around the block, check if that
306
+ # is being used.
307
+ if node.parent.begin_type?
308
+ return_value_used?(node.parent)
309
+ else
310
+ node.parent.assignment? || node.parent.send_type?
311
+ end
312
+ end
313
+
314
+ def return_value_of_scope?(node)
315
+ return unless node.parent
316
+
317
+ conditional?(node.parent) || array_or_range?(node.parent) ||
318
+ node.parent.children.last == node
319
+ end
320
+
321
+ def conditional?(node)
322
+ node.if_type? || node.or_type? || node.and_type?
323
+ end
324
+
325
+ def array_or_range?(node)
326
+ node.array_type? || node.range_type?
327
+ end
328
+ end
329
+ end
330
+ end
331
+ end
@@ -0,0 +1,209 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Style
6
+ # This cop checks for braces around the last parameter in a method call
7
+ # if the last parameter is a hash.
8
+ # It supports `braces`, `no_braces` and `context_dependent` styles.
9
+ #
10
+ # @example EnforcedStyle: braces
11
+ # # The `braces` style enforces braces around all method
12
+ # # parameters that are hashes.
13
+ #
14
+ # # bad
15
+ # some_method(x, y, a: 1, b: 2)
16
+ #
17
+ # # good
18
+ # some_method(x, y, {a: 1, b: 2})
19
+ #
20
+ # @example EnforcedStyle: no_braces (default)
21
+ # # The `no_braces` style checks that the last parameter doesn't
22
+ # # have braces around it.
23
+ #
24
+ # # bad
25
+ # some_method(x, y, {a: 1, b: 2})
26
+ #
27
+ # # good
28
+ # some_method(x, y, a: 1, b: 2)
29
+ #
30
+ # @example EnforcedStyle: context_dependent
31
+ # # The `context_dependent` style checks that the last parameter
32
+ # # doesn't have braces around it, but requires braces if the
33
+ # # second to last parameter is also a hash literal.
34
+ #
35
+ # # bad
36
+ # some_method(x, y, {a: 1, b: 2})
37
+ # some_method(x, y, {a: 1, b: 2}, a: 1, b: 2)
38
+ #
39
+ # # good
40
+ # some_method(x, y, a: 1, b: 2)
41
+ # some_method(x, y, {a: 1, b: 2}, {a: 1, b: 2})
42
+ class BracesAroundHashParameters < Cop
43
+ include ConfigurableEnforcedStyle
44
+ include RangeHelp
45
+
46
+ MSG = '%<type>s curly braces around a hash parameter.'
47
+
48
+ def on_send(node)
49
+ return if node.assignment_method? || node.operator_method?
50
+
51
+ return unless node.arguments? && node.last_argument.hash_type? &&
52
+ !node.last_argument.empty?
53
+
54
+ check(node.last_argument, node.arguments)
55
+ end
56
+ alias on_csend on_send
57
+
58
+ def autocorrect(send_node)
59
+ hash_node = send_node.last_argument
60
+
61
+ lambda do |corrector|
62
+ if hash_node.braces?
63
+ remove_braces_with_whitespace(corrector,
64
+ hash_node,
65
+ extra_space(hash_node))
66
+ else
67
+ add_braces(corrector, hash_node)
68
+ end
69
+ end
70
+ end
71
+
72
+ private
73
+
74
+ def check(arg, args)
75
+ case style
76
+ when :braces
77
+ check_braces(arg)
78
+ when :no_braces
79
+ check_no_braces(arg)
80
+ when :context_dependent
81
+ check_context_dependent(arg, args)
82
+ end
83
+ end
84
+
85
+ def check_braces(arg)
86
+ add_arg_offense(arg, :missing) unless arg.braces?
87
+ end
88
+
89
+ def check_no_braces(arg)
90
+ return unless arg.braces? && !braces_needed_for_semantics?(arg)
91
+
92
+ add_arg_offense(arg, :redundant)
93
+ end
94
+
95
+ def check_context_dependent(arg, args)
96
+ braces_around_second_from_end = args.size > 1 && args[-2].hash_type?
97
+
98
+ if arg.braces?
99
+ unless braces_around_second_from_end ||
100
+ braces_needed_for_semantics?(arg)
101
+ add_arg_offense(arg, :redundant)
102
+ end
103
+ elsif braces_around_second_from_end
104
+ add_arg_offense(arg, :missing)
105
+ end
106
+ end
107
+
108
+ # Returns true if there's block inside the braces of the given hash arg
109
+ # and that block uses do..end. The reason for wanting to check this is
110
+ # that the do..end could bind to a different method invocation if the
111
+ # hash braces were removed.
112
+ def braces_needed_for_semantics?(arg)
113
+ arg.each_pair do |_key, value|
114
+ return true if value.block_type? && !value.braces?
115
+ end
116
+ false
117
+ end
118
+
119
+ def add_arg_offense(arg, type)
120
+ add_offense(arg.parent, location: arg.source_range,
121
+ message: format(MSG,
122
+ type: type.to_s.capitalize))
123
+ end
124
+
125
+ def extra_space(hash_node)
126
+ {
127
+ newlines: extra_left_space?(hash_node) &&
128
+ extra_right_space?(hash_node),
129
+ left: extra_left_space?(hash_node),
130
+ right: extra_right_space?(hash_node)
131
+ }
132
+ end
133
+
134
+ def extra_left_space?(hash_node)
135
+ @extra_left_space ||= begin
136
+ top_line = hash_node.source_range.source_line
137
+ top_line.delete(' ') == '{'
138
+ end
139
+ end
140
+
141
+ def extra_right_space?(hash_node)
142
+ @extra_right_space ||= begin
143
+ bottom_line_number = hash_node.source_range.last_line
144
+ bottom_line = processed_source.lines[bottom_line_number - 1]
145
+ bottom_line.delete(' ') == '}'
146
+ end
147
+ end
148
+
149
+ def remove_braces_with_whitespace(corrector, node, space)
150
+ loc = node.loc
151
+
152
+ if node.multiline?
153
+ remove_braces_with_range(corrector,
154
+ left_whole_line_range(loc.begin),
155
+ right_whole_line_range(loc.end))
156
+ else
157
+ remove_braces_with_range(corrector,
158
+ left_brace_and_space(loc.begin, space),
159
+ right_brace_and_space(loc.end, space))
160
+ end
161
+ end
162
+
163
+ def remove_braces_with_range(corrector, left_range, right_range)
164
+ corrector.remove(left_range)
165
+ corrector.remove(right_range)
166
+ end
167
+
168
+ def left_whole_line_range(loc_begin)
169
+ if range_by_whole_lines(loc_begin).source.strip == '{'
170
+ range_by_whole_lines(loc_begin, include_final_newline: true)
171
+ else
172
+ loc_begin
173
+ end
174
+ end
175
+
176
+ def right_whole_line_range(loc_end)
177
+ if range_by_whole_lines(loc_end).source.strip =~ /\A}\s*,?\z/
178
+ range_by_whole_lines(loc_end, include_final_newline: true)
179
+ else
180
+ loc_end
181
+ end
182
+ end
183
+
184
+ def left_brace_and_space(loc_begin, space)
185
+ range_with_surrounding_space(range: loc_begin,
186
+ side: :right,
187
+ newlines: space[:newlines],
188
+ whitespace: space[:left])
189
+ end
190
+
191
+ def right_brace_and_space(loc_end, space)
192
+ brace_and_space =
193
+ range_with_surrounding_space(
194
+ range: loc_end,
195
+ side: :left,
196
+ newlines: space[:newlines],
197
+ whitespace: space[:right]
198
+ )
199
+ range_with_surrounding_comma(brace_and_space, :left)
200
+ end
201
+
202
+ def add_braces(corrector, node)
203
+ corrector.insert_before(node.source_range, '{')
204
+ corrector.insert_after(node.source_range, '}')
205
+ end
206
+ end
207
+ end
208
+ end
209
+ end