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,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Metrics
6
+ # This cop tries to produce a complexity score that's a measure of the
7
+ # complexity the reader experiences when looking at a method. For that
8
+ # reason it considers `when` nodes as something that doesn't add as much
9
+ # complexity as an `if` or a `&&`. Except if it's one of those special
10
+ # `case`/`when` constructs where there's no expression after `case`. Then
11
+ # the cop treats it as an `if`/`elsif`/`elsif`... and lets all the `when`
12
+ # nodes count. In contrast to the CyclomaticComplexity cop, this cop
13
+ # considers `else` nodes as adding complexity.
14
+ #
15
+ # @example
16
+ #
17
+ # def my_method # 1
18
+ # if cond # 1
19
+ # case var # 2 (0.8 + 4 * 0.2, rounded)
20
+ # when 1 then func_one
21
+ # when 2 then func_two
22
+ # when 3 then func_three
23
+ # when 4..10 then func_other
24
+ # end
25
+ # else # 1
26
+ # do_something until a && b # 2
27
+ # end # ===
28
+ # end # 7 complexity points
29
+ class PerceivedComplexity < Cop
30
+ include MethodComplexity
31
+
32
+ MSG = 'Perceived complexity for %<method>s is too high. ' \
33
+ '[%<complexity>d/%<max>d]'
34
+ COUNTED_NODES = %i[if case while until
35
+ for rescue and or].freeze
36
+
37
+ private
38
+
39
+ def complexity_score_for(node)
40
+ case node.type
41
+ when :case
42
+ # If cond is nil, that means each when has an expression that
43
+ # evaluates to true or false. It's just an alternative to
44
+ # if/elsif/elsif... so the when nodes count.
45
+ if node.condition.nil?
46
+ node.when_branches.length
47
+ else
48
+ # Otherwise, the case node gets 0.8 complexity points and each
49
+ # when gets 0.2.
50
+ (0.8 + 0.2 * node.when_branches.length).round
51
+ end
52
+ when :if
53
+ node.else? && !node.elsif? ? 2 : 1
54
+ else
55
+ 1
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,84 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Metrics
6
+ module Utils
7
+ # > ABC is .. a software size metric .. computed by counting the number
8
+ # > of assignments, branches and conditions for a section of code.
9
+ # > http://c2.com/cgi/wiki?AbcMetric
10
+ #
11
+ # We separate the *calculator* from the *cop* so that the calculation,
12
+ # the formula itself, is easier to test.
13
+ class AbcSizeCalculator
14
+ # > Branch -- an explicit forward program branch out of scope -- a
15
+ # > function call, class method call ..
16
+ # > http://c2.com/cgi/wiki?AbcMetric
17
+ BRANCH_NODES = %i[send csend].freeze
18
+
19
+ # > Condition -- a logical/Boolean test, == != <= >= < > else case
20
+ # > default try catch ? and unary conditionals.
21
+ # > http://c2.com/cgi/wiki?AbcMetric
22
+ CONDITION_NODES = CyclomaticComplexity::COUNTED_NODES.freeze
23
+
24
+ def self.calculate(node)
25
+ new(node).calculate
26
+ end
27
+
28
+ def initialize(node)
29
+ @assignment = 0
30
+ @branch = 0
31
+ @condition = 0
32
+ @node = node
33
+ end
34
+
35
+ def calculate
36
+ @node.each_node do |child|
37
+ if child.assignment?
38
+ @assignment += 1
39
+ elsif branch?(child)
40
+ evaluate_branch_nodes(child)
41
+ elsif condition?(child)
42
+ evaluate_condition_node(child)
43
+ end
44
+ end
45
+
46
+ [
47
+ Math.sqrt(@assignment**2 + @branch**2 + @condition**2).round(2),
48
+ "<#{@assignment}, #{@branch}, #{@condition}>"
49
+ ]
50
+ end
51
+
52
+ def evaluate_branch_nodes(node)
53
+ if node.comparison_method?
54
+ @condition += 1
55
+ else
56
+ @branch += 1
57
+ end
58
+ end
59
+
60
+ def evaluate_condition_node(node)
61
+ @condition += 1 if else_branch?(node)
62
+ @condition += 1
63
+ end
64
+
65
+ def else_branch?(node)
66
+ %i[case if].include?(node.type) &&
67
+ node.else? &&
68
+ node.loc.else.is?('else')
69
+ end
70
+
71
+ private
72
+
73
+ def branch?(node)
74
+ BRANCH_NODES.include?(node.type)
75
+ end
76
+
77
+ def condition?(node)
78
+ CONDITION_NODES.include?(node.type)
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Migration
6
+ # Check that cop names in rubocop:disable comments are given with
7
+ # department name.
8
+ class DepartmentName < Cop
9
+ include RangeHelp
10
+
11
+ MSG = 'Department name is missing.'
12
+
13
+ def investigate(processed_source)
14
+ processed_source.each_comment do |comment|
15
+ next if comment.text !~ /\A(# *rubocop:((dis|en)able|todo) +)(.*)/
16
+
17
+ offset = Regexp.last_match(1).length
18
+ Regexp.last_match(4).scan(%r{[\w/]+|\W+}) do |name|
19
+ check_cop_name(name, comment, offset)
20
+ offset += name.length
21
+ end
22
+ end
23
+ end
24
+
25
+ def autocorrect(range)
26
+ shall_warn = false
27
+ qualified_cop_name = Cop.registry.qualified_cop_name(range.source,
28
+ nil, shall_warn)
29
+ ->(corrector) { corrector.replace(range, qualified_cop_name) }
30
+ end
31
+
32
+ private
33
+
34
+ def check_cop_name(name, comment, offset)
35
+ return if name !~ /^[A-Z]/ || name =~ %r{/}
36
+
37
+ start = comment.location.expression.begin_pos + offset
38
+ range = range_between(start, start + name.length)
39
+ add_offense(range, location: range)
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ # This module checks for nodes that should be aligned to the left or right.
6
+ # This amount is determined by the instance variable @column_delta.
7
+ module Alignment
8
+ private
9
+
10
+ SPACE = ' '
11
+
12
+ attr_reader :column_delta
13
+
14
+ def configured_indentation_width
15
+ cop_config['IndentationWidth'] ||
16
+ config.for_cop('Layout/IndentationWidth')['Width']
17
+ end
18
+
19
+ def indentation(node)
20
+ offset(node) + (SPACE * configured_indentation_width)
21
+ end
22
+
23
+ def offset(node)
24
+ SPACE * node.loc.column
25
+ end
26
+
27
+ def check_alignment(items, base_column = nil)
28
+ unless items.empty?
29
+ base_column ||= display_column(items.first.source_range)
30
+ end
31
+
32
+ each_bad_alignment(items, base_column) do |current|
33
+ expr = current.source_range
34
+ if offenses.any? { |o| within?(expr, o.location) }
35
+ # If this offense is within a line range that is already being
36
+ # realigned by autocorrect, we report the offense without
37
+ # autocorrecting it. Two rewrites in the same area by the same
38
+ # cop cannot be handled. The next iteration will find the
39
+ # offense again and correct it.
40
+ add_offense(nil, location: expr)
41
+ else
42
+ add_offense(current)
43
+ end
44
+ end
45
+ end
46
+
47
+ def each_bad_alignment(items, base_column)
48
+ prev_line = -1
49
+ items.each do |current|
50
+ if current.loc.line > prev_line &&
51
+ begins_its_line?(current.source_range)
52
+ @column_delta = base_column - display_column(current.source_range)
53
+
54
+ yield current if @column_delta.nonzero?
55
+ end
56
+ prev_line = current.loc.line
57
+ end
58
+ end
59
+
60
+ def display_column(range)
61
+ line = processed_source.lines[range.line - 1]
62
+ Unicode::DisplayWidth.of(line[0, range.column])
63
+ end
64
+
65
+ def within?(inner, outer)
66
+ inner.begin_pos >= outer.begin_pos && inner.end_pos <= outer.end_pos
67
+ end
68
+
69
+ def end_of_line_comment(line)
70
+ processed_source.find_comment { |c| c.loc.line == line }
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Style
6
+ # Common functionality related to annotation comments.
7
+ module AnnotationComment
8
+ private
9
+
10
+ def annotation?(comment)
11
+ _margin, first_word, colon, space, note = split_comment(comment)
12
+ keyword_appearance?(first_word, colon, space) &&
13
+ !just_first_word_of_sentence?(first_word, colon, space, note)
14
+ end
15
+
16
+ def split_comment(comment)
17
+ match = comment.text.match(/^(# ?)([A-Za-z]+)(\s*:)?(\s+)?(\S+)?/)
18
+ return false unless match
19
+
20
+ match.captures
21
+ end
22
+
23
+ def keyword_appearance?(first_word, colon, space)
24
+ first_word && keyword?(first_word.upcase) && (colon || space)
25
+ end
26
+
27
+ def just_first_word_of_sentence?(first_word, colon, space, note)
28
+ first_word == first_word.capitalize && !colon && space && note
29
+ end
30
+
31
+ def keyword?(word)
32
+ config.for_cop('Style/CommentAnnotation')['Keywords'].include?(word)
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ # Handles the `MinSize` configuration option for array-based cops
6
+ # `Style/SymbolArray` and `Style/WordArray`, which check for use of the
7
+ # relevant percent literal syntax such as `%i[...]` and `%w[...]`
8
+ module ArrayMinSize
9
+ private
10
+
11
+ def below_array_length?(node)
12
+ node.values.length < min_size_config
13
+ end
14
+
15
+ def min_size_config
16
+ cop_config['MinSize']
17
+ end
18
+
19
+ def array_style_detected(style, ary_size)
20
+ cfg = config_to_allow_offenses
21
+ return if cfg['Enabled'] == false
22
+
23
+ largest_brackets = largest_brackets_size(style, ary_size)
24
+ smallest_percent = smallest_percent_size(style, ary_size)
25
+
26
+ if cfg['EnforcedStyle'] == style.to_s
27
+ # do nothing
28
+ elsif cfg['EnforcedStyle'].nil?
29
+ cfg['EnforcedStyle'] = style.to_s
30
+ elsif smallest_percent <= largest_brackets
31
+ self.config_to_allow_offenses = { 'Enabled' => false }
32
+ else
33
+ cfg['EnforcedStyle'] = 'percent'
34
+ cfg['MinSize'] = largest_brackets + 1
35
+ end
36
+ end
37
+
38
+ def largest_brackets_size(style, ary_size)
39
+ self.class.largest_brackets ||= -Float::INFINITY
40
+
41
+ if style == :brackets && ary_size > self.class.largest_brackets
42
+ self.class.largest_brackets = ary_size
43
+ end
44
+
45
+ self.class.largest_brackets
46
+ end
47
+
48
+ def smallest_percent_size(style, ary_size)
49
+ @smallest_percent ||= Float::INFINITY
50
+
51
+ if style == :percent && ary_size < @smallest_percent
52
+ @smallest_percent = ary_size
53
+ end
54
+
55
+ @smallest_percent
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ # Common code for ordinary arrays with [] that can be written with %
6
+ # syntax.
7
+ module ArraySyntax
8
+ private
9
+
10
+ def bracketed_array_of?(element_type, node)
11
+ return false unless node.square_brackets? && !node.values.empty?
12
+
13
+ node.values.all? { |value| value.type == element_type }
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ # Common functionality for checking assignment nodes.
6
+ module CheckAssignment
7
+ def on_lvasgn(node)
8
+ check_assignment(node, extract_rhs(node))
9
+ end
10
+ alias on_ivasgn on_lvasgn
11
+ alias on_cvasgn on_lvasgn
12
+ alias on_gvasgn on_lvasgn
13
+ alias on_casgn on_lvasgn
14
+ alias on_masgn on_lvasgn
15
+ alias on_op_asgn on_lvasgn
16
+ alias on_or_asgn on_lvasgn
17
+ alias on_and_asgn on_lvasgn
18
+
19
+ def on_send(node)
20
+ rhs = extract_rhs(node)
21
+
22
+ return unless rhs
23
+
24
+ check_assignment(node, rhs)
25
+ end
26
+
27
+ module_function
28
+
29
+ def extract_rhs(node)
30
+ if node.casgn_type?
31
+ _scope, _lhs, rhs = *node
32
+ elsif node.op_asgn_type?
33
+ _lhs, _op, rhs = *node
34
+ elsif node.call_type?
35
+ rhs = node.last_argument
36
+ elsif node.assignment?
37
+ _lhs, rhs = *node
38
+ end
39
+
40
+ rhs
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,190 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ # This mixin detects collections that are safe to "break"
6
+ # by inserting new lines. This is useful for breaking
7
+ # up long lines.
8
+ #
9
+ # Let's look at hashes as an example:
10
+ #
11
+ # We know hash keys are safe to break across lines. We can add
12
+ # linebreaks into hashes on lines longer than the specified maximum.
13
+ # Then in further passes cops can clean up the multi-line hash.
14
+ # For example, say the maximum line length is as indicated below:
15
+ #
16
+ # |
17
+ # v
18
+ # {foo: "0000000000", bar: "0000000000", baz: "0000000000"}
19
+ #
20
+ # In a LineLength autocorrection pass, a line is added before
21
+ # the first key that exceeds the column limit:
22
+ #
23
+ # {foo: "0000000000", bar: "0000000000",
24
+ # baz: "0000000000"}
25
+ #
26
+ # In a MultilineHashKeyLineBreaks pass, lines are inserted
27
+ # before all keys:
28
+ #
29
+ # {foo: "0000000000",
30
+ # bar: "0000000000",
31
+ # baz: "0000000000"}
32
+ #
33
+ # Then in future passes FirstHashElementLineBreak,
34
+ # MultilineHashBraceLayout, and TrailingCommaInHashLiteral will
35
+ # manipulate as well until we get:
36
+ #
37
+ # {
38
+ # foo: "0000000000",
39
+ # bar: "0000000000",
40
+ # baz: "0000000000",
41
+ # }
42
+ #
43
+ # (Note: Passes may not happen exactly in this sequence.)
44
+ module CheckLineBreakable
45
+ def extract_breakable_node(node, max)
46
+ if node.send_type?
47
+ args = process_args(node.arguments)
48
+ return extract_breakable_node_from_elements(node, args, max)
49
+ elsif node.array_type? || node.hash_type?
50
+ return extract_breakable_node_from_elements(node, node.children, max)
51
+ end
52
+ nil
53
+ end
54
+
55
+ private
56
+
57
+ def extract_breakable_node_from_elements(node, elements, max)
58
+ return unless breakable_collection?(node, elements)
59
+ return if safe_to_ignore?(node)
60
+
61
+ line = processed_source.lines[node.first_line - 1]
62
+ return if processed_source.commented?(node.loc.begin)
63
+ return if line.length <= max
64
+
65
+ extract_first_element_over_column_limit(node, elements, max)
66
+ end
67
+
68
+ def extract_first_element_over_column_limit(node, elements, max)
69
+ line = node.first_line
70
+ i = 0
71
+ i += 1 while within_column_limit?(elements[i], max, line)
72
+ return elements.first if i.zero?
73
+
74
+ elements[i - 1]
75
+ end
76
+
77
+ def within_column_limit?(element, max, line)
78
+ element && element.loc.column < max && element.loc.line == line
79
+ end
80
+
81
+ def safe_to_ignore?(node)
82
+ return true unless max
83
+ return true if already_on_multiple_lines?(node)
84
+
85
+ # If there's a containing breakable collection on the same
86
+ # line, we let that one get broken first. In a separate pass,
87
+ # this one might get broken as well, but to avoid conflicting
88
+ # or redundant edits, we only mark one offense at a time.
89
+ return true if contained_by_breakable_collection_on_same_line?(node)
90
+
91
+ if contained_by_multiline_collection_that_could_be_broken_up?(node)
92
+ return true
93
+ end
94
+
95
+ false
96
+ end
97
+
98
+ def breakable_collection?(node, elements)
99
+ # For simplicity we only want to insert breaks in normal
100
+ # hashes wrapped in a set of curly braces like {foo: 1}.
101
+ # That is, not a kwargs hash. For method calls, this ensures
102
+ # the method call is made with parens.
103
+ starts_with_bracket = node.loc.begin
104
+
105
+ # If the call has a second argument, we can insert a line
106
+ # break before the second argument and the rest of the
107
+ # argument will get auto-formatted onto separate lines
108
+ # by other cops.
109
+ has_second_element = elements.length >= 2
110
+
111
+ starts_with_bracket && has_second_element
112
+ end
113
+
114
+ def contained_by_breakable_collection_on_same_line?(node)
115
+ node.each_ancestor.find do |ancestor|
116
+ # Ignore ancestors on different lines.
117
+ break if ancestor.first_line != node.first_line
118
+
119
+ if ancestor.hash_type? || ancestor.array_type?
120
+ elements = ancestor.children
121
+ elsif ancestor.send_type?
122
+ elements = process_args(ancestor.arguments)
123
+ else
124
+ next
125
+ end
126
+
127
+ return true if breakable_collection?(ancestor, elements)
128
+ end
129
+
130
+ false
131
+ end
132
+
133
+ def contained_by_multiline_collection_that_could_be_broken_up?(node)
134
+ node.each_ancestor.find do |ancestor|
135
+ if ancestor.hash_type? || ancestor.array_type?
136
+ if breakable_collection?(ancestor, ancestor.children)
137
+ return children_could_be_broken_up?(ancestor.children)
138
+ end
139
+ end
140
+
141
+ next unless ancestor.send_type?
142
+
143
+ args = process_args(ancestor.arguments)
144
+ if breakable_collection?(ancestor, args)
145
+ return children_could_be_broken_up?(args)
146
+ end
147
+ end
148
+
149
+ false
150
+ end
151
+
152
+ def children_could_be_broken_up?(children)
153
+ return false if all_on_same_line?(children)
154
+
155
+ last_seen_line = -1
156
+ children.each do |child|
157
+ return true if last_seen_line >= child.first_line
158
+
159
+ last_seen_line = child.last_line
160
+ end
161
+ false
162
+ end
163
+
164
+ def all_on_same_line?(nodes)
165
+ return true if nodes.empty?
166
+
167
+ nodes.first.first_line == nodes.last.last_line
168
+ end
169
+
170
+ def process_args(args)
171
+ # If there is a trailing hash arg without explicit braces, like this:
172
+ #
173
+ # method(1, 'key1' => value1, 'key2' => value2)
174
+ #
175
+ # ...then each key/value pair is treated as a method 'argument'
176
+ # when determining where line breaks should appear.
177
+ if (last_arg = args.last)
178
+ if last_arg.hash_type? && !last_arg.braces?
179
+ args = args.concat(args.pop.children)
180
+ end
181
+ end
182
+ args
183
+ end
184
+
185
+ def already_on_multiple_lines?(node)
186
+ node.first_line != node.last_line
187
+ end
188
+ end
189
+ end
190
+ end