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,141 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ # Common functionality for checking the closing brace of a literal is
6
+ # either on the same line as the last contained elements or a new line.
7
+ module MultilineLiteralBraceLayout
8
+ include ConfigurableEnforcedStyle
9
+
10
+ private
11
+
12
+ def check_brace_layout(node)
13
+ return if ignored_literal?(node)
14
+
15
+ # If the last node is or contains a conflicting HEREDOC, we don't want
16
+ # to adjust the brace layout because this will result in invalid code.
17
+ return if last_line_heredoc?(node.children.last)
18
+
19
+ check(node)
20
+ end
21
+
22
+ # Returns true for the case
23
+ # [a,
24
+ # b # comment
25
+ # ].some_method
26
+ def new_line_needed_before_closing_brace?(node)
27
+ last_element_line =
28
+ last_element_range_with_trailing_comma(node).last_line
29
+
30
+ last_element_commented =
31
+ processed_source.comments.any? { |c| c.loc.line == last_element_line }
32
+
33
+ last_element_commented && (node.chained? || node.argument?)
34
+ end
35
+
36
+ def check(node)
37
+ case style
38
+ when :symmetrical then check_symmetrical(node)
39
+ when :new_line then check_new_line(node)
40
+ when :same_line then check_same_line(node)
41
+ end
42
+ end
43
+
44
+ def check_new_line(node)
45
+ return unless closing_brace_on_same_line?(node)
46
+
47
+ add_offense(node,
48
+ location: :end,
49
+ message: self.class::ALWAYS_NEW_LINE_MESSAGE)
50
+ end
51
+
52
+ def check_same_line(node)
53
+ return if closing_brace_on_same_line?(node)
54
+
55
+ add_offense(node,
56
+ location: :end,
57
+ message: self.class::ALWAYS_SAME_LINE_MESSAGE)
58
+ end
59
+
60
+ def check_symmetrical(node)
61
+ if opening_brace_on_same_line?(node)
62
+ return if closing_brace_on_same_line?(node)
63
+
64
+ add_offense(node, location: :end,
65
+ message: self.class::SAME_LINE_MESSAGE)
66
+ else
67
+ return unless closing_brace_on_same_line?(node)
68
+
69
+ add_offense(node, location: :end,
70
+ message: self.class::NEW_LINE_MESSAGE)
71
+ end
72
+ end
73
+
74
+ def empty_literal?(node)
75
+ children(node).empty?
76
+ end
77
+
78
+ def implicit_literal?(node)
79
+ !node.loc.begin
80
+ end
81
+
82
+ def ignored_literal?(node)
83
+ implicit_literal?(node) || empty_literal?(node) || node.single_line?
84
+ end
85
+
86
+ def children(node)
87
+ node.children
88
+ end
89
+
90
+ # This method depends on the fact that we have guarded
91
+ # against implicit and empty literals.
92
+ def opening_brace_on_same_line?(node)
93
+ node.loc.begin.line == children(node).first.first_line
94
+ end
95
+
96
+ # This method depends on the fact that we have guarded
97
+ # against implicit and empty literals.
98
+ def closing_brace_on_same_line?(node)
99
+ node.loc.end.line == children(node).last.last_line
100
+ end
101
+
102
+ # Starting with the parent node and recursively for the parent node's
103
+ # children, check if the node is a HEREDOC and if the HEREDOC ends below
104
+ # or on the last line of the parent node.
105
+ #
106
+ # Example:
107
+ #
108
+ # # node is `b: ...` parameter
109
+ # # last_line_heredoc?(node) => false
110
+ # foo(a,
111
+ # b: {
112
+ # a: 1,
113
+ # c: <<-EOM
114
+ # baz
115
+ # EOM
116
+ # }
117
+ # )
118
+ #
119
+ # # node is `b: ...` parameter
120
+ # # last_line_heredoc?(node) => true
121
+ # foo(a,
122
+ # b: <<-EOM
123
+ # baz
124
+ # EOM
125
+ # )
126
+ def last_line_heredoc?(node, parent = nil)
127
+ parent ||= node
128
+
129
+ if node.respond_to?(:loc) &&
130
+ node.loc.respond_to?(:heredoc_end) &&
131
+ node.loc.heredoc_end.last_line >= parent.last_line
132
+ return true
133
+ end
134
+
135
+ return false unless node.respond_to?(:children)
136
+
137
+ node.children.any? { |child| last_line_heredoc?(child, parent) }
138
+ end
139
+ end
140
+ end
141
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ # Some common code shared between `NegatedIf` and
6
+ # `NegatedWhile` cops.
7
+ module NegativeConditional
8
+ extend NodePattern::Macros
9
+
10
+ MSG = 'Favor `%<inverse>s` over `%<current>s` for ' \
11
+ 'negative conditions.'
12
+
13
+ private
14
+
15
+ def_node_matcher :single_negative?, '(send !(send _ :!) :!)'
16
+ def_node_matcher :empty_condition?, '(begin)'
17
+
18
+ def check_negative_conditional(node)
19
+ condition = node.condition
20
+
21
+ return if empty_condition?(condition)
22
+
23
+ condition = condition.children.last while condition.begin_type?
24
+
25
+ return unless single_negative?(condition)
26
+ return if node.if_type? && node.else?
27
+
28
+ add_offense(node)
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ # This module provides a list of methods that are:
6
+ # 1. In the NilClass by default
7
+ # 2. Added to NilClass by explicitly requiring any standard libraries
8
+ # 3. Cop's configuration parameter AllowedMethods.
9
+ module NilMethods
10
+ private
11
+
12
+ def nil_methods
13
+ nil.methods + other_stdlib_methods + allowed_methods
14
+ end
15
+
16
+ def other_stdlib_methods
17
+ [:to_d]
18
+ end
19
+
20
+ def allowed_methods
21
+ cop_config['AllowedMethods'].map(&:to_sym)
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ # Common functionality for cops checking if and unless expressions.
6
+ module OnNormalIfUnless
7
+ def on_if(node)
8
+ return if node.modifier_form? || node.ternary?
9
+
10
+ on_normal_if_unless(node)
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ # Common functionality for Bundler/OrderedGems and
6
+ # Gemspec/OrderedDependencies.
7
+ module OrderedGemNode
8
+ private
9
+
10
+ def get_source_range(node, comments_as_separators)
11
+ unless comments_as_separators
12
+ first_comment = processed_source.ast_with_comments[node].first
13
+ return first_comment.loc.expression unless first_comment.nil?
14
+ end
15
+ node.source_range
16
+ end
17
+
18
+ def case_insensitive_out_of_order?(string_a, string_b)
19
+ string_a.downcase < string_b.downcase
20
+ end
21
+
22
+ def consecutive_lines(previous, current)
23
+ first_line = get_source_range(
24
+ current,
25
+ treat_comments_as_separators
26
+ ).first_line
27
+ previous.source_range.last_line == first_line - 1
28
+ end
29
+
30
+ def register_offense(previous, current)
31
+ message = format(
32
+ self.class::MSG,
33
+ previous: gem_name(current),
34
+ current: gem_name(previous)
35
+ )
36
+ add_offense(current, message: message)
37
+ end
38
+
39
+ def gem_name(declaration_node)
40
+ gem_node = declaration_node.first_argument
41
+
42
+ find_gem_name(gem_node)
43
+ end
44
+
45
+ def find_gem_name(gem_node)
46
+ return gem_node.str_content if gem_node.str_type?
47
+
48
+ find_gem_name(gem_node.receiver)
49
+ end
50
+
51
+ def treat_comments_as_separators
52
+ cop_config['TreatCommentsAsGroupSeparators']
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ # Common functionality for handling parentheses.
6
+ module Parentheses
7
+ private
8
+
9
+ def parens_required?(node)
10
+ range = node.source_range
11
+ source = range.source_buffer.source
12
+ source[range.begin_pos - 1] =~ /[a-z]/ ||
13
+ source[range.end_pos] =~ /[a-z]/
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ # Common functionality for cops which processes Parser's diagnostics.
6
+ # This mixin requires its user class to define `#relevant_diagnostic?`.
7
+ #
8
+ # def relevant_diagnostic?(diagnostic)
9
+ # diagnostic.reason == :my_interested_diagnostic_type
10
+ # end
11
+ #
12
+ # If you want to use an alternative offense message rather than the one in
13
+ # Parser's diagnostic, define `#alternative_message`.
14
+ #
15
+ # def alternative_message(diagnostic)
16
+ # 'My custom message'
17
+ # end
18
+ module ParserDiagnostic
19
+ def investigate(processed_source)
20
+ processed_source.diagnostics.each do |d|
21
+ next unless relevant_diagnostic?(d)
22
+
23
+ message = if respond_to?(:alternative_message, true)
24
+ alternative_message(d)
25
+ else
26
+ d.message.capitalize
27
+ end
28
+
29
+ add_offense(nil,
30
+ location: d.location,
31
+ message: message,
32
+ severity: d.level)
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ # Common functionality for handling percent arrays.
6
+ module PercentArray
7
+ private
8
+
9
+ # Ruby does not allow percent arrays in an ambiguous block context.
10
+ #
11
+ # @example
12
+ #
13
+ # foo %i[bar baz] { qux }
14
+ def invalid_percent_array_context?(node)
15
+ parent = node.parent
16
+
17
+ parent&.send_type? && parent.arguments.include?(node) &&
18
+ !parent.parenthesized? && parent&.block_literal?
19
+ end
20
+
21
+ def allowed_bracket_array?(node)
22
+ comments_in_array?(node) || below_array_length?(node) ||
23
+ invalid_percent_array_context?(node)
24
+ end
25
+
26
+ def message(_node)
27
+ style == :percent ? self.class::PERCENT_MSG : self.class::ARRAY_MSG
28
+ end
29
+
30
+ def comments_in_array?(node)
31
+ comments = processed_source.comments
32
+ array_range = node.source_range.to_a
33
+
34
+ comments.any? do |comment|
35
+ !(comment.loc.expression.to_a & array_range).empty?
36
+ end
37
+ end
38
+
39
+ def check_percent_array(node)
40
+ array_style_detected(:percent, node.values.size)
41
+ add_offense(node) if style == :brackets
42
+ end
43
+
44
+ def check_bracketed_array(node)
45
+ return if allowed_bracket_array?(node)
46
+
47
+ array_style_detected(:brackets, node.values.size)
48
+ add_offense(node) if style == :percent
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ # Common functionality for handling percent literals.
6
+ module PercentLiteral
7
+ include RangeHelp
8
+
9
+ private
10
+
11
+ def percent_literal?(node)
12
+ return unless (begin_source = begin_source(node))
13
+
14
+ begin_source.start_with?('%')
15
+ end
16
+
17
+ def process(node, *types)
18
+ return unless percent_literal?(node) && types.include?(type(node))
19
+
20
+ on_percent_literal(node)
21
+ end
22
+
23
+ def begin_source(node)
24
+ node.loc.begin.source if node.loc.respond_to?(:begin) && node.loc.begin
25
+ end
26
+
27
+ def type(node)
28
+ node.loc.begin.source[0..-2]
29
+ end
30
+
31
+ # A range containing only the contents of the percent literal (e.g. in
32
+ # %i{1 2 3} this will be the range covering '1 2 3' only)
33
+ def contents_range(node)
34
+ range_between(node.loc.begin.end_pos, node.loc.end.begin_pos)
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,181 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ # Common functionality for checking whether an AST node/token is aligned
6
+ # with something on a preceding or following line
7
+ module PrecedingFollowingAlignment
8
+ private
9
+
10
+ def allow_for_alignment?
11
+ cop_config['AllowForAlignment']
12
+ end
13
+
14
+ def aligned_with_something?(range)
15
+ aligned_with_adjacent_line?(range, method(:aligned_token?))
16
+ end
17
+
18
+ def aligned_with_operator?(range)
19
+ aligned_with_adjacent_line?(range, method(:aligned_operator?))
20
+ end
21
+
22
+ def aligned_with_preceding_assignment(token)
23
+ preceding_line_range = token.line.downto(1)
24
+
25
+ aligned_with_assignment(token, preceding_line_range)
26
+ end
27
+
28
+ def aligned_with_subsequent_assignment(token)
29
+ subsequent_line_range = token.line.upto(processed_source.lines.length)
30
+
31
+ aligned_with_assignment(token, subsequent_line_range)
32
+ end
33
+
34
+ def aligned_with_adjacent_line?(range, predicate)
35
+ # minus 2 because node.loc.line is zero-based
36
+ pre = (range.line - 2).downto(0)
37
+ post = range.line.upto(processed_source.lines.size - 1)
38
+
39
+ aligned_with_any_line_range?([pre, post], range, &predicate)
40
+ end
41
+
42
+ def aligned_with_any_line_range?(line_ranges, range, &predicate)
43
+ return true if aligned_with_any_line?(line_ranges, range, &predicate)
44
+
45
+ # If no aligned token was found, search for an aligned token on the
46
+ # nearest line with the same indentation as the checked line.
47
+ base_indentation = processed_source.lines[range.line - 1] =~ /\S/
48
+
49
+ aligned_with_any_line?(line_ranges, range, base_indentation, &predicate)
50
+ end
51
+
52
+ def aligned_with_any_line?(line_ranges, range, indent = nil, &predicate)
53
+ line_ranges.any? do |line_nos|
54
+ aligned_with_line?(line_nos, range, indent, &predicate)
55
+ end
56
+ end
57
+
58
+ def aligned_with_line?(line_nos, range, indent = nil)
59
+ line_nos.each do |lineno|
60
+ next if aligned_comment_lines.include?(lineno + 1)
61
+
62
+ line = processed_source.lines[lineno]
63
+ index = line =~ /\S/
64
+ next unless index
65
+ next if indent && indent != index
66
+
67
+ return yield(range, line)
68
+ end
69
+ false
70
+ end
71
+
72
+ def aligned_comment_lines
73
+ @aligned_comment_lines ||=
74
+ processed_source.comments.map(&:loc).select do |r|
75
+ begins_its_line?(r.expression)
76
+ end.map(&:line)
77
+ end
78
+
79
+ def aligned_token?(range, line)
80
+ aligned_words?(range, line) ||
81
+ aligned_char?(range, line) ||
82
+ aligned_assignment?(range, line)
83
+ end
84
+
85
+ def aligned_operator?(range, line)
86
+ (aligned_identical?(range, line) || aligned_assignment?(range, line))
87
+ end
88
+
89
+ def aligned_words?(range, line)
90
+ line[range.column - 1, 2] =~ /\s\S/
91
+ end
92
+
93
+ def aligned_char?(range, line)
94
+ line[range.column] == range.source[0]
95
+ end
96
+
97
+ def aligned_assignment?(range, line)
98
+ range.source[-1] == '=' && line[range.last_column - 1] == '='
99
+ end
100
+
101
+ def aligned_identical?(range, line)
102
+ range.source == line[range.column, range.size]
103
+ end
104
+
105
+ def aligned_with_assignment(token, line_range)
106
+ token_line_indent = processed_source
107
+ .line_indentation(token.line)
108
+ assignment_lines = relevant_assignment_lines(line_range)
109
+ relevant_line_number = assignment_lines[1]
110
+
111
+ return :none unless relevant_line_number
112
+
113
+ relevant_indent = processed_source
114
+ .line_indentation(relevant_line_number)
115
+
116
+ return :none if relevant_indent < token_line_indent
117
+
118
+ assignment_line = processed_source.lines[relevant_line_number - 1]
119
+
120
+ return :none unless assignment_line
121
+
122
+ aligned_assignment?(token.pos, assignment_line) ? :yes : :no
123
+ end
124
+
125
+ def assignment_lines
126
+ @assignment_lines ||= assignment_tokens.map(&:line)
127
+ end
128
+
129
+ def assignment_tokens
130
+ @assignment_tokens ||= begin
131
+ tokens = processed_source.tokens.select(&:equal_sign?)
132
+
133
+ # we don't want to operate on equals signs which are part of an
134
+ # optarg in a method definition
135
+ # e.g.: def method(optarg = default_val); end
136
+ tokens = remove_optarg_equals(tokens, processed_source)
137
+
138
+ # Only attempt to align the first = on each line
139
+ Set.new(tokens.uniq(&:line))
140
+ end
141
+ end
142
+
143
+ # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
144
+ # rubocop:disable Metrics/PerceivedComplexity, Metrics/MethodLength
145
+ def relevant_assignment_lines(line_range)
146
+ result = []
147
+ original_line_indent = processed_source
148
+ .line_indentation(line_range.first)
149
+ relevant_line_indent_at_level = true
150
+
151
+ line_range.each do |line_number|
152
+ current_line_indent = processed_source.line_indentation(line_number)
153
+ blank_line = processed_source.lines[line_number - 1].blank?
154
+
155
+ if (current_line_indent < original_line_indent && !blank_line) ||
156
+ (relevant_line_indent_at_level && blank_line)
157
+ break
158
+ end
159
+
160
+ result << line_number if assignment_lines.include?(line_number) &&
161
+ current_line_indent == original_line_indent
162
+
163
+ unless blank_line
164
+ relevant_line_indent_at_level = \
165
+ current_line_indent == original_line_indent
166
+ end
167
+ end
168
+
169
+ result
170
+ end
171
+ # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity
172
+ # rubocop:enable Metrics/PerceivedComplexity, Metrics/MethodLength
173
+
174
+ def remove_optarg_equals(asgn_tokens, processed_source)
175
+ optargs = processed_source.ast.each_node(:optarg)
176
+ optarg_eql = optargs.map { |o| o.loc.operator.begin_pos }.to_set
177
+ asgn_tokens.reject { |t| optarg_eql.include?(t.begin_pos) }
178
+ end
179
+ end
180
+ end
181
+ end