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,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Lint
6
+ # This cop checks for ambiguous block association with method
7
+ # when param passed without parentheses.
8
+ #
9
+ # @example
10
+ #
11
+ # # bad
12
+ # some_method a { |val| puts val }
13
+ #
14
+ # @example
15
+ #
16
+ # # good
17
+ # # With parentheses, there's no ambiguity.
18
+ # some_method(a) { |val| puts val }
19
+ #
20
+ # # good
21
+ # # Operator methods require no disambiguation
22
+ # foo == bar { |b| b.baz }
23
+ #
24
+ # # good
25
+ # # Lambda arguments require no disambiguation
26
+ # foo = ->(bar) { bar.baz }
27
+ class AmbiguousBlockAssociation < Cop
28
+ MSG = 'Parenthesize the param `%<param>s` to make sure that the ' \
29
+ 'block will be associated with the `%<method>s` method ' \
30
+ 'call.'
31
+
32
+ def on_send(node)
33
+ return if !node.arguments? || node.parenthesized? ||
34
+ node.last_argument.lambda? || allowed_method?(node)
35
+
36
+ return unless ambiguous_block_association?(node)
37
+
38
+ add_offense(node)
39
+ end
40
+ alias on_csend on_send
41
+
42
+ private
43
+
44
+ def ambiguous_block_association?(send_node)
45
+ send_node.last_argument.block_type? &&
46
+ !send_node.last_argument.send_node.arguments?
47
+ end
48
+
49
+ def allowed_method?(node)
50
+ node.assignment? || node.operator_method? || node.method?(:[])
51
+ end
52
+
53
+ def message(send_node)
54
+ block_param = send_node.last_argument
55
+
56
+ format(MSG, param: block_param.source,
57
+ method: block_param.send_node.source)
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Lint
6
+ # This cop checks for ambiguous operators in the first argument of a
7
+ # method invocation without parentheses.
8
+ #
9
+ # @example
10
+ #
11
+ # # bad
12
+ #
13
+ # # The `*` is interpreted as a splat operator but it could possibly be
14
+ # # a `*` method invocation (i.e. `do_something.*(some_array)`).
15
+ # do_something *some_array
16
+ #
17
+ # @example
18
+ #
19
+ # # good
20
+ #
21
+ # # With parentheses, there's no ambiguity.
22
+ # do_something(*some_array)
23
+ class AmbiguousOperator < Cop
24
+ include ParserDiagnostic
25
+
26
+ AMBIGUITIES = {
27
+ '+' => { actual: 'positive number', possible: 'addition' },
28
+ '-' => { actual: 'negative number', possible: 'subtraction' },
29
+ '*' => { actual: 'splat', possible: 'multiplication' },
30
+ '&' => { actual: 'block', possible: 'binary AND' },
31
+ '**' => { actual: 'keyword splat', possible: 'exponent' }
32
+ }.each do |key, hash|
33
+ hash[:operator] = key
34
+ end
35
+
36
+ MSG_FORMAT = 'Ambiguous %<actual>s operator. Parenthesize the method ' \
37
+ "arguments if it's surely a %<actual>s operator, or add " \
38
+ 'a whitespace to the right of the `%<operator>s` if it ' \
39
+ 'should be a %<possible>s.'
40
+
41
+ private
42
+
43
+ def relevant_diagnostic?(diagnostic)
44
+ diagnostic.reason == :ambiguous_prefix
45
+ end
46
+
47
+ def alternative_message(diagnostic)
48
+ operator = diagnostic.location.source
49
+ hash = AMBIGUITIES[operator]
50
+ format(MSG_FORMAT, hash)
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Lint
6
+ # This cop checks for ambiguous regexp literals in the first argument of
7
+ # a method invocation without parentheses.
8
+ #
9
+ # @example
10
+ #
11
+ # # bad
12
+ #
13
+ # # This is interpreted as a method invocation with a regexp literal,
14
+ # # but it could possibly be `/` method invocations.
15
+ # # (i.e. `do_something./(pattern)./(i)`)
16
+ # do_something /pattern/i
17
+ #
18
+ # @example
19
+ #
20
+ # # good
21
+ #
22
+ # # With parentheses, there's no ambiguity.
23
+ # do_something(/pattern/i)
24
+ class AmbiguousRegexpLiteral < Cop
25
+ include ParserDiagnostic
26
+
27
+ MSG = 'Ambiguous regexp literal. Parenthesize the method arguments ' \
28
+ "if it's surely a regexp literal, or add a whitespace to the " \
29
+ 'right of the `/` if it should be a division.'
30
+
31
+ private
32
+
33
+ def relevant_diagnostic?(diagnostic)
34
+ diagnostic.reason == :ambiguous_literal
35
+ end
36
+
37
+ def alternative_message(_diagnostic)
38
+ MSG
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,97 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Lint
6
+ # This cop checks for assignments in the conditions of
7
+ # if/while/until.
8
+ #
9
+ # `AllowSafeAssignment` option for safe assignment.
10
+ # By safe assignment we mean putting parentheses around
11
+ # an assignment to indicate "I know I'm using an assignment
12
+ # as a condition. It's not a mistake."
13
+ #
14
+ # @example
15
+ # # bad
16
+ # if some_var = true
17
+ # do_something
18
+ # end
19
+ #
20
+ # # good
21
+ # if some_var == true
22
+ # do_something
23
+ # end
24
+ #
25
+ # @example AllowSafeAssignment: true (default)
26
+ # # good
27
+ # if (some_var = true)
28
+ # do_something
29
+ # end
30
+ #
31
+ # @example AllowSafeAssignment: false
32
+ # # bad
33
+ # if (some_var = true)
34
+ # do_something
35
+ # end
36
+ #
37
+ class AssignmentInCondition < Cop
38
+ include SafeAssignment
39
+
40
+ MSG_WITH_SAFE_ASSIGNMENT_ALLOWED =
41
+ 'Use `==` if you meant to do a comparison or wrap the expression ' \
42
+ 'in parentheses to indicate you meant to assign in a ' \
43
+ 'condition.'
44
+ MSG_WITHOUT_SAFE_ASSIGNMENT_ALLOWED =
45
+ 'Use `==` if you meant to do a comparison or move the assignment ' \
46
+ 'up out of the condition.'
47
+ ASGN_TYPES = [:begin, *AST::Node::EQUALS_ASSIGNMENTS, :send].freeze
48
+
49
+ def on_if(node)
50
+ return if node.condition.block_type?
51
+
52
+ traverse_node(node.condition, ASGN_TYPES) do |asgn_node|
53
+ next :skip_children if skip_children?(asgn_node)
54
+ next if allowed_construct?(asgn_node)
55
+
56
+ add_offense(asgn_node, location: :operator)
57
+ end
58
+ end
59
+ alias on_while on_if
60
+ alias on_until on_if
61
+
62
+ private
63
+
64
+ def message(_node)
65
+ if safe_assignment_allowed?
66
+ MSG_WITH_SAFE_ASSIGNMENT_ALLOWED
67
+ else
68
+ MSG_WITHOUT_SAFE_ASSIGNMENT_ALLOWED
69
+ end
70
+ end
71
+
72
+ def allowed_construct?(asgn_node)
73
+ asgn_node.begin_type? || conditional_assignment?(asgn_node)
74
+ end
75
+
76
+ def conditional_assignment?(asgn_node)
77
+ !asgn_node.loc.operator
78
+ end
79
+
80
+ def skip_children?(asgn_node)
81
+ (asgn_node.send_type? && !asgn_node.assignment_method?) ||
82
+ empty_condition?(asgn_node) ||
83
+ (safe_assignment_allowed? && safe_assignment?(asgn_node))
84
+ end
85
+
86
+ # each_node/visit_descendants_with_types with :skip_children
87
+ def traverse_node(node, types, &block)
88
+ result = yield node if types.include?(node.type)
89
+
90
+ return if result == :skip_children
91
+
92
+ node.each_child_node { |child| traverse_node(child, types, &block) }
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Lint
6
+ # `BigDecimal.new()` is deprecated since BigDecimal 1.3.3.
7
+ # This cop identifies places where `BigDecimal.new()`
8
+ # can be replaced by `BigDecimal()`.
9
+ #
10
+ # @example
11
+ # # bad
12
+ # BigDecimal.new(123.456, 3)
13
+ #
14
+ # # good
15
+ # BigDecimal(123.456, 3)
16
+ #
17
+ class BigDecimalNew < Cop
18
+ MSG = '`%<double_colon>sBigDecimal.new()` is deprecated. ' \
19
+ 'Use `%<double_colon>sBigDecimal()` instead.'
20
+
21
+ def_node_matcher :big_decimal_new, <<~PATTERN
22
+ (send
23
+ (const ${nil? cbase} :BigDecimal) :new ...)
24
+ PATTERN
25
+
26
+ def on_send(node)
27
+ return unless big_decimal_new(node) do |captured_value|
28
+ double_colon = captured_value ? '::' : ''
29
+ message = format(MSG, double_colon: double_colon)
30
+
31
+ add_offense(node, location: :selector, message: message)
32
+ end
33
+ end
34
+
35
+ def autocorrect(node)
36
+ lambda do |corrector|
37
+ corrector.remove(node.loc.selector)
38
+ corrector.remove(node.loc.dot)
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Lint
6
+ # This cop checks for `:true` and `:false` symbols.
7
+ # In most cases it would be a typo.
8
+ #
9
+ # @example
10
+ #
11
+ # # bad
12
+ # :true
13
+ #
14
+ # # good
15
+ # true
16
+ #
17
+ # @example
18
+ #
19
+ # # bad
20
+ # :false
21
+ #
22
+ # # good
23
+ # false
24
+ class BooleanSymbol < Cop
25
+ MSG = 'Symbol with a boolean name - ' \
26
+ 'you probably meant to use `%<boolean>s`.'
27
+
28
+ def_node_matcher :boolean_symbol?, '(sym {:true :false})'
29
+
30
+ def on_sym(node)
31
+ return unless boolean_symbol?(node)
32
+
33
+ add_offense(node, message: format(MSG, boolean: node.value))
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Lint
6
+ # This cop checks for circular argument references in optional keyword
7
+ # arguments and optional ordinal arguments.
8
+ #
9
+ # This cop mirrors a warning produced by MRI since 2.2.
10
+ #
11
+ # @example
12
+ #
13
+ # # bad
14
+ #
15
+ # def bake(pie: pie)
16
+ # pie.heat_up
17
+ # end
18
+ #
19
+ # @example
20
+ #
21
+ # # good
22
+ #
23
+ # def bake(pie:)
24
+ # pie.refrigerate
25
+ # end
26
+ #
27
+ # @example
28
+ #
29
+ # # good
30
+ #
31
+ # def bake(pie: self.pie)
32
+ # pie.feed_to(user)
33
+ # end
34
+ #
35
+ # @example
36
+ #
37
+ # # bad
38
+ #
39
+ # def cook(dry_ingredients = dry_ingredients)
40
+ # dry_ingredients.reduce(&:+)
41
+ # end
42
+ #
43
+ # @example
44
+ #
45
+ # # good
46
+ #
47
+ # def cook(dry_ingredients = self.dry_ingredients)
48
+ # dry_ingredients.combine
49
+ # end
50
+ class CircularArgumentReference < Cop
51
+ MSG = 'Circular argument reference - `%<arg_name>s`.'
52
+
53
+ def on_kwoptarg(node)
54
+ check_for_circular_argument_references(*node)
55
+ end
56
+
57
+ def on_optarg(node)
58
+ check_for_circular_argument_references(*node)
59
+ end
60
+
61
+ private
62
+
63
+ def check_for_circular_argument_references(arg_name, arg_value)
64
+ return unless arg_value.lvar_type?
65
+ return unless arg_value.to_a == [arg_name]
66
+
67
+ add_offense(arg_value, message: format(MSG, arg_name: arg_name))
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,77 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Lint
6
+ # This cop checks for calls to debugger or pry.
7
+ #
8
+ # @example
9
+ #
10
+ # # bad (ok during development)
11
+ #
12
+ # # using pry
13
+ # def some_method
14
+ # binding.pry
15
+ # do_something
16
+ # end
17
+ #
18
+ # @example
19
+ #
20
+ # # bad (ok during development)
21
+ #
22
+ # # using byebug
23
+ # def some_method
24
+ # byebug
25
+ # do_something
26
+ # end
27
+ #
28
+ # @example
29
+ #
30
+ # # good
31
+ #
32
+ # def some_method
33
+ # do_something
34
+ # end
35
+ class Debugger < Cop
36
+ MSG = 'Remove debugger entry point `%<source>s`.'
37
+
38
+ def_node_matcher :kernel?, <<~PATTERN
39
+ {
40
+ (const nil? :Kernel)
41
+ (const (cbase) :Kernel)
42
+ }
43
+ PATTERN
44
+
45
+ def_node_matcher :debugger_call?, <<~PATTERN
46
+ {(send {nil? #kernel?} {:debugger :byebug :remote_byebug} ...)
47
+ (send (send {#kernel? nil?} :binding)
48
+ {:pry :remote_pry :pry_remote} ...)
49
+ (send (const {nil? (cbase)} :Pry) :rescue ...)
50
+ (send nil? {:save_and_open_page
51
+ :save_and_open_screenshot
52
+ :save_screenshot} ...)}
53
+ PATTERN
54
+
55
+ def_node_matcher :binding_irb_call?, <<~PATTERN
56
+ (send (send {#kernel? nil?} :binding) :irb ...)
57
+ PATTERN
58
+
59
+ def on_send(node)
60
+ return unless debugger_call?(node) || binding_irb?(node)
61
+
62
+ add_offense(node)
63
+ end
64
+
65
+ private
66
+
67
+ def message(node)
68
+ format(MSG, source: node.source)
69
+ end
70
+
71
+ def binding_irb?(node)
72
+ target_ruby_version >= 2.4 && binding_irb_call?(node)
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end