rubocop 0.78.0

Sign up to get free protection for your applications and to get access to all the features.
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,10 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'bundler/setup'
5
+ require 'pry'
6
+ require 'rubocop'
7
+
8
+ ARGV.clear
9
+
10
+ RuboCop.pry
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -euo pipefail
4
+ IFS=$'\n\t'
5
+ set -vx
6
+
7
+ bundle install
@@ -0,0 +1,3963 @@
1
+ # Common configuration.
2
+
3
+ AllCops:
4
+ RubyInterpreters:
5
+ - ruby
6
+ - macruby
7
+ - rake
8
+ - jruby
9
+ - rbx
10
+ # Include common Ruby source files.
11
+ Include:
12
+ - '**/*.rb'
13
+ - '**/*.arb'
14
+ - '**/*.axlsx'
15
+ - '**/*.builder'
16
+ - '**/*.fcgi'
17
+ - '**/*.gemfile'
18
+ - '**/*.gemspec'
19
+ - '**/*.god'
20
+ - '**/*.jb'
21
+ - '**/*.jbuilder'
22
+ - '**/*.mspec'
23
+ - '**/*.opal'
24
+ - '**/*.pluginspec'
25
+ - '**/*.podspec'
26
+ - '**/*.rabl'
27
+ - '**/*.rake'
28
+ - '**/*.rbuild'
29
+ - '**/*.rbw'
30
+ - '**/*.rbx'
31
+ - '**/*.ru'
32
+ - '**/*.ruby'
33
+ - '**/*.spec'
34
+ - '**/*.thor'
35
+ - '**/*.watchr'
36
+ - '**/.irbrc'
37
+ - '**/.pryrc'
38
+ - '**/buildfile'
39
+ - '**/Appraisals'
40
+ - '**/Berksfile'
41
+ - '**/Brewfile'
42
+ - '**/Buildfile'
43
+ - '**/Capfile'
44
+ - '**/Cheffile'
45
+ - '**/Dangerfile'
46
+ - '**/Deliverfile'
47
+ - '**/Fastfile'
48
+ - '**/*Fastfile'
49
+ - '**/Gemfile'
50
+ - '**/Guardfile'
51
+ - '**/Jarfile'
52
+ - '**/Mavenfile'
53
+ - '**/Podfile'
54
+ - '**/Puppetfile'
55
+ - '**/Rakefile'
56
+ - '**/Snapfile'
57
+ - '**/Thorfile'
58
+ - '**/Vagabondfile'
59
+ - '**/Vagrantfile'
60
+ Exclude:
61
+ - 'node_modules/**/*'
62
+ - 'tmp/**/*'
63
+ - 'vendor/**/*'
64
+ - '.git/**/*'
65
+ # Default formatter will be used if no `-f/--format` option is given.
66
+ DefaultFormatter: progress
67
+ # Cop names are displayed in offense messages by default. Change behavior
68
+ # by overriding DisplayCopNames, or by giving the `--no-display-cop-names`
69
+ # option.
70
+ DisplayCopNames: true
71
+ # Style guide URLs are not displayed in offense messages by default. Change
72
+ # behavior by overriding `DisplayStyleGuide`, or by giving the
73
+ # `-S/--display-style-guide` option.
74
+ DisplayStyleGuide: false
75
+ # When specifying style guide URLs, any paths and/or fragments will be
76
+ # evaluated relative to the base URL.
77
+ StyleGuideBaseURL: https://rubystyle.guide
78
+ # Extra details are not displayed in offense messages by default. Change
79
+ # behavior by overriding ExtraDetails, or by giving the
80
+ # `-E/--extra-details` option.
81
+ ExtraDetails: false
82
+ # Additional cops that do not reference a style guide rule may be enabled by
83
+ # default. Change behavior by overriding `StyleGuideCopsOnly`, or by giving
84
+ # the `--only-guide-cops` option.
85
+ StyleGuideCopsOnly: false
86
+ # All cops except the ones configured `Enabled: false` in this file are enabled by default.
87
+ # Change this behavior by overriding either `DisabledByDefault` or `EnabledByDefault`.
88
+ # When `DisabledByDefault` is `true`, all cops in the default configuration
89
+ # are disabled, and only cops in user configuration are enabled. This makes
90
+ # cops opt-in instead of opt-out. Note that when `DisabledByDefault` is `true`,
91
+ # cops in user configuration will be enabled even if they don't set the
92
+ # Enabled parameter.
93
+ # When `EnabledByDefault` is `true`, all cops, even those configured `Enabled: false`
94
+ # in this file are enabled by default. Cops can still be disabled in user configuration.
95
+ # Note that it is invalid to set both EnabledByDefault and DisabledByDefault
96
+ # to true in the same configuration.
97
+ EnabledByDefault: false
98
+ DisabledByDefault: false
99
+ # Enables the result cache if `true`. Can be overridden by the `--cache` command
100
+ # line option.
101
+ UseCache: true
102
+ # Threshold for how many files can be stored in the result cache before some
103
+ # of the files are automatically removed.
104
+ MaxFilesInCache: 20000
105
+ # The cache will be stored in "rubocop_cache" under this directory. If
106
+ # CacheRootDirectory is ~ (nil), which it is by default, the root will be
107
+ # taken from the environment variable `$XDG_CACHE_HOME` if it is set, or if
108
+ # `$XDG_CACHE_HOME` is not set, it will be `$HOME/.cache/`.
109
+ CacheRootDirectory: ~
110
+ # It is possible for a malicious user to know the location of RuboCop's cache
111
+ # directory by looking at CacheRootDirectory, and create a symlink in its
112
+ # place that could cause RuboCop to overwrite unintended files, or read
113
+ # malicious input. If you are certain that your cache location is secure from
114
+ # this kind of attack, and wish to use a symlinked cache location, set this
115
+ # value to "true".
116
+ AllowSymlinksInCacheRootDirectory: false
117
+ # What MRI version of the Ruby interpreter is the inspected code intended to
118
+ # run on? (If there is more than one, set this to the lowest version.)
119
+ # If a value is specified for TargetRubyVersion then it is used. Acceptable
120
+ # values are specificed as a float (i.e. 2.5); the teeny version of Ruby
121
+ # should not be included. If the project specifies a Ruby version in the
122
+ # .ruby-version file, Gemfile or gems.rb file, RuboCop will try to determine
123
+ # the desired version of Ruby by inspecting the .ruby-version file first,
124
+ # followed by the Gemfile.lock or gems.locked file. (Although the Ruby version
125
+ # is specified in the Gemfile or gems.rb file, RuboCop reads the final value
126
+ # from the lock file.) If the Ruby version is still unresolved, RuboCop will
127
+ # use the oldest officially supported Ruby version (currently Ruby 2.3).
128
+ TargetRubyVersion: ~
129
+
130
+ #################### Bundler ###############################
131
+
132
+ Bundler/DuplicatedGem:
133
+ Description: 'Checks for duplicate gem entries in Gemfile.'
134
+ Enabled: true
135
+ VersionAdded: '0.46'
136
+ Include:
137
+ - '**/*.gemfile'
138
+ - '**/Gemfile'
139
+ - '**/gems.rb'
140
+
141
+ Bundler/GemComment:
142
+ Description: 'Add a comment describing each gem.'
143
+ Enabled: false
144
+ VersionAdded: '0.59'
145
+ VersionChanged: '0.77'
146
+ Include:
147
+ - '**/*.gemfile'
148
+ - '**/Gemfile'
149
+ - '**/gems.rb'
150
+ IgnoredGems: []
151
+
152
+ Bundler/InsecureProtocolSource:
153
+ Description: >-
154
+ The source `:gemcutter`, `:rubygems` and `:rubyforge` are deprecated
155
+ because HTTP requests are insecure. Please change your source to
156
+ 'https://rubygems.org' if possible, or 'http://rubygems.org' if not.
157
+ Enabled: true
158
+ VersionAdded: '0.50'
159
+ Include:
160
+ - '**/*.gemfile'
161
+ - '**/Gemfile'
162
+ - '**/gems.rb'
163
+
164
+ Bundler/OrderedGems:
165
+ Description: >-
166
+ Gems within groups in the Gemfile should be alphabetically sorted.
167
+ Enabled: true
168
+ VersionAdded: '0.46'
169
+ VersionChanged: '0.47'
170
+ TreatCommentsAsGroupSeparators: true
171
+ Include:
172
+ - '**/*.gemfile'
173
+ - '**/Gemfile'
174
+ - '**/gems.rb'
175
+
176
+ #################### Gemspec ###############################
177
+
178
+ Gemspec/DuplicatedAssignment:
179
+ Description: 'An attribute assignment method calls should be listed only once in a gemspec.'
180
+ Enabled: true
181
+ VersionAdded: '0.52'
182
+ Include:
183
+ - '**/*.gemspec'
184
+
185
+ Gemspec/OrderedDependencies:
186
+ Description: >-
187
+ Dependencies in the gemspec should be alphabetically sorted.
188
+ Enabled: true
189
+ VersionAdded: '0.51'
190
+ TreatCommentsAsGroupSeparators: true
191
+ Include:
192
+ - '**/*.gemspec'
193
+
194
+ Gemspec/RequiredRubyVersion:
195
+ Description: 'Checks that `required_ruby_version` of gemspec and `TargetRubyVersion` of .rubocop.yml are equal.'
196
+ Enabled: true
197
+ VersionAdded: '0.52'
198
+ Include:
199
+ - '**/*.gemspec'
200
+
201
+ Gemspec/RubyVersionGlobalsUsage:
202
+ Description: Checks usage of RUBY_VERSION in gemspec.
203
+ StyleGuide: '#no-ruby-version-in-the-gemspec'
204
+ Enabled: true
205
+ VersionAdded: '0.72'
206
+ Include:
207
+ - '**/*.gemspec'
208
+
209
+ #################### Layout ###########################
210
+
211
+ Layout/AccessModifierIndentation:
212
+ Description: Check indentation of private/protected visibility modifiers.
213
+ StyleGuide: '#indent-public-private-protected'
214
+ Enabled: true
215
+ VersionAdded: '0.49'
216
+ EnforcedStyle: indent
217
+ SupportedStyles:
218
+ - outdent
219
+ - indent
220
+ # By default, the indentation width from Layout/IndentationWidth is used
221
+ # But it can be overridden by setting this parameter
222
+ IndentationWidth: ~
223
+
224
+ Layout/ArgumentAlignment:
225
+ Description: >-
226
+ Align the arguments of a method call if they span more
227
+ than one line.
228
+ StyleGuide: '#no-double-indent'
229
+ Enabled: true
230
+ VersionAdded: '0.68'
231
+ VersionChanged: '0.77'
232
+ # Alignment of arguments in multi-line method calls.
233
+ #
234
+ # The `with_first_argument` style aligns the following lines along the same
235
+ # column as the first parameter.
236
+ #
237
+ # method_call(a,
238
+ # b)
239
+ #
240
+ # The `with_fixed_indentation` style aligns the following lines with one
241
+ # level of indentation relative to the start of the line with the method call.
242
+ #
243
+ # method_call(a,
244
+ # b)
245
+ EnforcedStyle: with_first_argument
246
+ SupportedStyles:
247
+ - with_first_argument
248
+ - with_fixed_indentation
249
+ # By default, the indentation width from Layout/IndentationWidth is used
250
+ # But it can be overridden by setting this parameter
251
+ IndentationWidth: ~
252
+
253
+ Layout/ArrayAlignment:
254
+ Description: >-
255
+ Align the elements of an array literal if they span more than
256
+ one line.
257
+ StyleGuide: '#align-multiline-arrays'
258
+ Enabled: true
259
+ VersionAdded: '0.49'
260
+ VersionChanged: '0.77'
261
+
262
+ Layout/AssignmentIndentation:
263
+ Description: >-
264
+ Checks the indentation of the first line of the
265
+ right-hand-side of a multi-line assignment.
266
+ Enabled: true
267
+ VersionAdded: '0.49'
268
+ VersionChanged: '0.77'
269
+ # By default, the indentation width from `Layout/IndentationWidth` is used
270
+ # But it can be overridden by setting this parameter
271
+ IndentationWidth: ~
272
+
273
+ Layout/BlockAlignment:
274
+ Description: 'Align block ends correctly.'
275
+ Enabled: true
276
+ VersionAdded: '0.53'
277
+ # The value `start_of_block` means that the `end` should be aligned with line
278
+ # where the `do` keyword appears.
279
+ # The value `start_of_line` means it should be aligned with the whole
280
+ # expression's starting line.
281
+ # The value `either` means both are allowed.
282
+ EnforcedStyleAlignWith: either
283
+ SupportedStylesAlignWith:
284
+ - either
285
+ - start_of_block
286
+ - start_of_line
287
+
288
+ Layout/BlockEndNewline:
289
+ Description: 'Put end statement of multiline block on its own line.'
290
+ Enabled: true
291
+ VersionAdded: '0.49'
292
+
293
+ Layout/CaseIndentation:
294
+ Description: 'Indentation of when in a case/when/[else/]end.'
295
+ StyleGuide: '#indent-when-to-case'
296
+ Enabled: true
297
+ VersionAdded: '0.49'
298
+ EnforcedStyle: case
299
+ SupportedStyles:
300
+ - case
301
+ - end
302
+ IndentOneStep: false
303
+ # By default, the indentation width from `Layout/IndentationWidth` is used.
304
+ # But it can be overridden by setting this parameter.
305
+ # This only matters if `IndentOneStep` is `true`
306
+ IndentationWidth: ~
307
+
308
+ Layout/ClassStructure:
309
+ Description: 'Enforces a configured order of definitions within a class body.'
310
+ StyleGuide: '#consistent-classes'
311
+ Enabled: false
312
+ VersionAdded: '0.52'
313
+ Categories:
314
+ module_inclusion:
315
+ - include
316
+ - prepend
317
+ - extend
318
+ ExpectedOrder:
319
+ - module_inclusion
320
+ - constants
321
+ - public_class_methods
322
+ - initializer
323
+ - public_methods
324
+ - protected_methods
325
+ - private_methods
326
+
327
+ Layout/ClosingHeredocIndentation:
328
+ Description: 'Checks the indentation of here document closings.'
329
+ Enabled: true
330
+ VersionAdded: '0.57'
331
+
332
+ Layout/ClosingParenthesisIndentation:
333
+ Description: 'Checks the indentation of hanging closing parentheses.'
334
+ Enabled: true
335
+ VersionAdded: '0.49'
336
+
337
+ Layout/CommentIndentation:
338
+ Description: 'Indentation of comments.'
339
+ Enabled: true
340
+ VersionAdded: '0.49'
341
+
342
+ Layout/ConditionPosition:
343
+ Description: >-
344
+ Checks for condition placed in a confusing position relative to
345
+ the keyword.
346
+ StyleGuide: '#same-line-condition'
347
+ Enabled: true
348
+ VersionAdded: '0.53'
349
+
350
+ Layout/DefEndAlignment:
351
+ Description: 'Align ends corresponding to defs correctly.'
352
+ Enabled: true
353
+ VersionAdded: '0.53'
354
+ # The value `def` means that `end` should be aligned with the def keyword.
355
+ # The value `start_of_line` means that `end` should be aligned with method
356
+ # calls like `private`, `public`, etc, if present in front of the `def`
357
+ # keyword on the same line.
358
+ EnforcedStyleAlignWith: start_of_line
359
+ SupportedStylesAlignWith:
360
+ - start_of_line
361
+ - def
362
+ AutoCorrect: false
363
+ Severity: warning
364
+
365
+ Layout/DotPosition:
366
+ Description: 'Checks the position of the dot in multi-line method calls.'
367
+ StyleGuide: '#consistent-multi-line-chains'
368
+ Enabled: true
369
+ VersionAdded: '0.49'
370
+ EnforcedStyle: leading
371
+ SupportedStyles:
372
+ - leading
373
+ - trailing
374
+
375
+ Layout/ElseAlignment:
376
+ Description: 'Align elses and elsifs correctly.'
377
+ Enabled: true
378
+ VersionAdded: '0.49'
379
+
380
+ Layout/EmptyComment:
381
+ Description: 'Checks empty comment.'
382
+ Enabled: true
383
+ VersionAdded: '0.53'
384
+ AllowBorderComment: true
385
+ AllowMarginComment: true
386
+
387
+ Layout/EmptyLineAfterGuardClause:
388
+ Description: 'Add empty line after guard clause.'
389
+ Enabled: true
390
+ VersionAdded: '0.56'
391
+ VersionChanged: '0.59'
392
+
393
+ Layout/EmptyLineAfterMagicComment:
394
+ Description: 'Add an empty line after magic comments to separate them from code.'
395
+ StyleGuide: '#separate-magic-comments-from-code'
396
+ Enabled: true
397
+ VersionAdded: '0.49'
398
+
399
+ Layout/EmptyLineBetweenDefs:
400
+ Description: 'Use empty lines between defs.'
401
+ StyleGuide: '#empty-lines-between-methods'
402
+ Enabled: true
403
+ VersionAdded: '0.49'
404
+ # If `true`, this parameter means that single line method definitions don't
405
+ # need an empty line between them.
406
+ AllowAdjacentOneLineDefs: false
407
+ # Can be array to specify minimum and maximum number of empty lines, e.g. [1, 2]
408
+ NumberOfEmptyLines: 1
409
+
410
+ Layout/EmptyLines:
411
+ Description: "Don't use several empty lines in a row."
412
+ StyleGuide: '#two-or-more-empty-lines'
413
+ Enabled: true
414
+ VersionAdded: '0.49'
415
+
416
+ Layout/EmptyLinesAroundAccessModifier:
417
+ Description: "Keep blank lines around access modifiers."
418
+ StyleGuide: '#empty-lines-around-access-modifier'
419
+ Enabled: true
420
+ VersionAdded: '0.49'
421
+ EnforcedStyle: around
422
+ SupportedStyles:
423
+ - around
424
+ - only_before
425
+ Reference:
426
+ # A reference to `EnforcedStyle: only_before`.
427
+ - https://edgeguides.rubyonrails.org/contributing_to_ruby_on_rails.html#follow-the-coding-conventions
428
+
429
+ Layout/EmptyLinesAroundArguments:
430
+ Description: "Keeps track of empty lines around method arguments."
431
+ Enabled: true
432
+ VersionAdded: '0.52'
433
+
434
+ Layout/EmptyLinesAroundBeginBody:
435
+ Description: "Keeps track of empty lines around begin-end bodies."
436
+ StyleGuide: '#empty-lines-around-bodies'
437
+ Enabled: true
438
+ VersionAdded: '0.49'
439
+
440
+ Layout/EmptyLinesAroundBlockBody:
441
+ Description: "Keeps track of empty lines around block bodies."
442
+ StyleGuide: '#empty-lines-around-bodies'
443
+ Enabled: true
444
+ VersionAdded: '0.49'
445
+ EnforcedStyle: no_empty_lines
446
+ SupportedStyles:
447
+ - empty_lines
448
+ - no_empty_lines
449
+
450
+ Layout/EmptyLinesAroundClassBody:
451
+ Description: "Keeps track of empty lines around class bodies."
452
+ StyleGuide: '#empty-lines-around-bodies'
453
+ Enabled: true
454
+ VersionAdded: '0.49'
455
+ VersionChanged: '0.53'
456
+ EnforcedStyle: no_empty_lines
457
+ SupportedStyles:
458
+ - empty_lines
459
+ - empty_lines_except_namespace
460
+ - empty_lines_special
461
+ - no_empty_lines
462
+ - beginning_only
463
+ - ending_only
464
+
465
+ Layout/EmptyLinesAroundExceptionHandlingKeywords:
466
+ Description: "Keeps track of empty lines around exception handling keywords."
467
+ StyleGuide: '#empty-lines-around-bodies'
468
+ Enabled: true
469
+ VersionAdded: '0.49'
470
+
471
+ Layout/EmptyLinesAroundMethodBody:
472
+ Description: "Keeps track of empty lines around method bodies."
473
+ StyleGuide: '#empty-lines-around-bodies'
474
+ Enabled: true
475
+ VersionAdded: '0.49'
476
+
477
+ Layout/EmptyLinesAroundModuleBody:
478
+ Description: "Keeps track of empty lines around module bodies."
479
+ StyleGuide: '#empty-lines-around-bodies'
480
+ Enabled: true
481
+ VersionAdded: '0.49'
482
+ EnforcedStyle: no_empty_lines
483
+ SupportedStyles:
484
+ - empty_lines
485
+ - empty_lines_except_namespace
486
+ - empty_lines_special
487
+ - no_empty_lines
488
+
489
+ Layout/EndAlignment:
490
+ Description: 'Align ends correctly.'
491
+ Enabled: true
492
+ VersionAdded: '0.53'
493
+ # The value `keyword` means that `end` should be aligned with the matching
494
+ # keyword (`if`, `while`, etc.).
495
+ # The value `variable` means that in assignments, `end` should be aligned
496
+ # with the start of the variable on the left hand side of `=`. In all other
497
+ # situations, `end` should still be aligned with the keyword.
498
+ # The value `start_of_line` means that `end` should be aligned with the start
499
+ # of the line which the matching keyword appears on.
500
+ EnforcedStyleAlignWith: keyword
501
+ SupportedStylesAlignWith:
502
+ - keyword
503
+ - variable
504
+ - start_of_line
505
+ AutoCorrect: false
506
+ Severity: warning
507
+
508
+ Layout/EndOfLine:
509
+ Description: 'Use Unix-style line endings.'
510
+ StyleGuide: '#crlf'
511
+ Enabled: true
512
+ VersionAdded: '0.49'
513
+ # The `native` style means that CR+LF (Carriage Return + Line Feed) is
514
+ # enforced on Windows, and LF is enforced on other platforms. The other styles
515
+ # mean LF and CR+LF, respectively.
516
+ EnforcedStyle: native
517
+ SupportedStyles:
518
+ - native
519
+ - lf
520
+ - crlf
521
+
522
+ Layout/ExtraSpacing:
523
+ Description: 'Do not use unnecessary spacing.'
524
+ Enabled: true
525
+ VersionAdded: '0.49'
526
+ # When true, allows most uses of extra spacing if the intent is to align
527
+ # things with the previous or next line, not counting empty lines or comment
528
+ # lines.
529
+ AllowForAlignment: true
530
+ # When true, allows things like 'obj.meth(arg) # comment',
531
+ # rather than insisting on 'obj.meth(arg) # comment'.
532
+ # If done for alignment, either this OR AllowForAlignment will allow it.
533
+ AllowBeforeTrailingComments: false
534
+ # When true, forces the alignment of `=` in assignments on consecutive lines.
535
+ ForceEqualSignAlignment: false
536
+
537
+ Layout/FirstArgumentIndentation:
538
+ Description: 'Checks the indentation of the first argument in a method call.'
539
+ Enabled: true
540
+ VersionAdded: '0.68'
541
+ VersionChanged: '0.77'
542
+ EnforcedStyle: special_for_inner_method_call_in_parentheses
543
+ SupportedStyles:
544
+ # The first parameter should always be indented one step more than the
545
+ # preceding line.
546
+ - consistent
547
+ # The first parameter should always be indented one level relative to the
548
+ # parent that is receiving the parameter
549
+ - consistent_relative_to_receiver
550
+ # The first parameter should normally be indented one step more than the
551
+ # preceding line, but if it's a parameter for a method call that is itself
552
+ # a parameter in a method call, then the inner parameter should be indented
553
+ # relative to the inner method.
554
+ - special_for_inner_method_call
555
+ # Same as `special_for_inner_method_call` except that the special rule only
556
+ # applies if the outer method call encloses its arguments in parentheses.
557
+ - special_for_inner_method_call_in_parentheses
558
+ # By default, the indentation width from `Layout/IndentationWidth` is used
559
+ # But it can be overridden by setting this parameter
560
+ IndentationWidth: ~
561
+
562
+ Layout/FirstArrayElementIndentation:
563
+ Description: >-
564
+ Checks the indentation of the first element in an array
565
+ literal.
566
+ Enabled: true
567
+ VersionAdded: '0.68'
568
+ VersionChanged: '0.77'
569
+ # The value `special_inside_parentheses` means that array literals with
570
+ # brackets that have their opening bracket on the same line as a surrounding
571
+ # opening round parenthesis, shall have their first element indented relative
572
+ # to the first position inside the parenthesis.
573
+ #
574
+ # The value `consistent` means that the indentation of the first element shall
575
+ # always be relative to the first position of the line where the opening
576
+ # bracket is.
577
+ #
578
+ # The value `align_brackets` means that the indentation of the first element
579
+ # shall always be relative to the position of the opening bracket.
580
+ EnforcedStyle: special_inside_parentheses
581
+ SupportedStyles:
582
+ - special_inside_parentheses
583
+ - consistent
584
+ - align_brackets
585
+ # By default, the indentation width from `Layout/IndentationWidth` is used
586
+ # But it can be overridden by setting this parameter
587
+ IndentationWidth: ~
588
+
589
+ Layout/FirstArrayElementLineBreak:
590
+ Description: >-
591
+ Checks for a line break before the first element in a
592
+ multi-line array.
593
+ Enabled: false
594
+ VersionAdded: '0.49'
595
+
596
+ Layout/FirstHashElementIndentation:
597
+ Description: 'Checks the indentation of the first key in a hash literal.'
598
+ Enabled: true
599
+ VersionAdded: '0.68'
600
+ VersionChanged: '0.77'
601
+ # The value `special_inside_parentheses` means that hash literals with braces
602
+ # that have their opening brace on the same line as a surrounding opening
603
+ # round parenthesis, shall have their first key indented relative to the
604
+ # first position inside the parenthesis.
605
+ #
606
+ # The value `consistent` means that the indentation of the first key shall
607
+ # always be relative to the first position of the line where the opening
608
+ # brace is.
609
+ #
610
+ # The value `align_braces` means that the indentation of the first key shall
611
+ # always be relative to the position of the opening brace.
612
+ EnforcedStyle: special_inside_parentheses
613
+ SupportedStyles:
614
+ - special_inside_parentheses
615
+ - consistent
616
+ - align_braces
617
+ # By default, the indentation width from `Layout/IndentationWidth` is used
618
+ # But it can be overridden by setting this parameter
619
+ IndentationWidth: ~
620
+
621
+ Layout/FirstHashElementLineBreak:
622
+ Description: >-
623
+ Checks for a line break before the first element in a
624
+ multi-line hash.
625
+ Enabled: false
626
+ VersionAdded: '0.49'
627
+
628
+ Layout/FirstMethodArgumentLineBreak:
629
+ Description: >-
630
+ Checks for a line break before the first argument in a
631
+ multi-line method call.
632
+ Enabled: false
633
+ VersionAdded: '0.49'
634
+
635
+ Layout/FirstMethodParameterLineBreak:
636
+ Description: >-
637
+ Checks for a line break before the first parameter in a
638
+ multi-line method parameter definition.
639
+ Enabled: false
640
+ VersionAdded: '0.49'
641
+
642
+ Layout/FirstParameterIndentation:
643
+ Description: >-
644
+ Checks the indentation of the first parameter in a
645
+ method definition.
646
+ Enabled: true
647
+ VersionAdded: '0.49'
648
+ VersionChanged: '0.77'
649
+ EnforcedStyle: consistent
650
+ SupportedStyles:
651
+ - consistent
652
+ - align_parentheses
653
+ # By default, the indentation width from `Layout/IndentationWidth` is used
654
+ # But it can be overridden by setting this parameter
655
+ IndentationWidth: ~
656
+
657
+ Layout/HashAlignment:
658
+ Description: >-
659
+ Align the elements of a hash literal if they span more than
660
+ one line.
661
+ Enabled: true
662
+ AllowMultipleStyles: true
663
+ VersionAdded: '0.49'
664
+ VersionChanged: '0.77'
665
+ # Alignment of entries using hash rocket as separator. Valid values are:
666
+ #
667
+ # key - left alignment of keys
668
+ # 'a' => 2
669
+ # 'bb' => 3
670
+ # separator - alignment of hash rockets, keys are right aligned
671
+ # 'a' => 2
672
+ # 'bb' => 3
673
+ # table - left alignment of keys, hash rockets, and values
674
+ # 'a' => 2
675
+ # 'bb' => 3
676
+ EnforcedHashRocketStyle: key
677
+ SupportedHashRocketStyles:
678
+ - key
679
+ - separator
680
+ - table
681
+ # Alignment of entries using colon as separator. Valid values are:
682
+ #
683
+ # key - left alignment of keys
684
+ # a: 0
685
+ # bb: 1
686
+ # separator - alignment of colons, keys are right aligned
687
+ # a: 0
688
+ # bb: 1
689
+ # table - left alignment of keys and values
690
+ # a: 0
691
+ # bb: 1
692
+ EnforcedColonStyle: key
693
+ SupportedColonStyles:
694
+ - key
695
+ - separator
696
+ - table
697
+ # Select whether hashes that are the last argument in a method call should be
698
+ # inspected? Valid values are:
699
+ #
700
+ # always_inspect - Inspect both implicit and explicit hashes.
701
+ # Registers an offense for:
702
+ # function(a: 1,
703
+ # b: 2)
704
+ # Registers an offense for:
705
+ # function({a: 1,
706
+ # b: 2})
707
+ # always_ignore - Ignore both implicit and explicit hashes.
708
+ # Accepts:
709
+ # function(a: 1,
710
+ # b: 2)
711
+ # Accepts:
712
+ # function({a: 1,
713
+ # b: 2})
714
+ # ignore_implicit - Ignore only implicit hashes.
715
+ # Accepts:
716
+ # function(a: 1,
717
+ # b: 2)
718
+ # Registers an offense for:
719
+ # function({a: 1,
720
+ # b: 2})
721
+ # ignore_explicit - Ignore only explicit hashes.
722
+ # Accepts:
723
+ # function({a: 1,
724
+ # b: 2})
725
+ # Registers an offense for:
726
+ # function(a: 1,
727
+ # b: 2)
728
+ EnforcedLastArgumentHashStyle: always_inspect
729
+ SupportedLastArgumentHashStyles:
730
+ - always_inspect
731
+ - always_ignore
732
+ - ignore_implicit
733
+ - ignore_explicit
734
+
735
+ Layout/HeredocArgumentClosingParenthesis:
736
+ Description: >-
737
+ Checks for the placement of the closing parenthesis in a
738
+ method call that passes a HEREDOC string as an argument.
739
+ Enabled: false
740
+ StyleGuide: '#heredoc-argument-closing-parentheses'
741
+ VersionAdded: '0.68'
742
+
743
+ Layout/HeredocIndentation:
744
+ Description: 'This cop checks the indentation of the here document bodies.'
745
+ StyleGuide: '#squiggly-heredocs'
746
+ Enabled: true
747
+ VersionAdded: '0.49'
748
+ VersionChanged: '0.77'
749
+ EnforcedStyle: squiggly
750
+ SupportedStyles:
751
+ - squiggly
752
+ - active_support
753
+ - powerpack
754
+ - unindent
755
+
756
+ Layout/IndentationConsistency:
757
+ Description: 'Keep indentation straight.'
758
+ StyleGuide: '#spaces-indentation'
759
+ Enabled: true
760
+ VersionAdded: '0.49'
761
+ # The difference between `indented` and `normal` is that the `indented_internal_methods`
762
+ # style prescribes that in classes and modules the `protected` and `private`
763
+ # modifier keywords shall be indented the same as public methods and that
764
+ # protected and private members shall be indented one step more than the
765
+ # modifiers. Other than that, both styles mean that entities on the same
766
+ # logical depth shall have the same indentation.
767
+ EnforcedStyle: normal
768
+ SupportedStyles:
769
+ - normal
770
+ - indented_internal_methods
771
+ Reference:
772
+ # A reference to `EnforcedStyle: indented_internal_methods`.
773
+ - https://edgeguides.rubyonrails.org/contributing_to_ruby_on_rails.html#follow-the-coding-conventions
774
+
775
+ Layout/IndentationWidth:
776
+ Description: 'Use 2 spaces for indentation.'
777
+ StyleGuide: '#spaces-indentation'
778
+ Enabled: true
779
+ VersionAdded: '0.49'
780
+ # Number of spaces for each indentation level.
781
+ Width: 2
782
+ IgnoredPatterns: []
783
+
784
+ Layout/InitialIndentation:
785
+ Description: >-
786
+ Checks the indentation of the first non-blank non-comment line in a file.
787
+ Enabled: true
788
+ VersionAdded: '0.49'
789
+
790
+ Layout/LeadingCommentSpace:
791
+ Description: 'Comments should start with a space.'
792
+ StyleGuide: '#hash-space'
793
+ Enabled: true
794
+ VersionAdded: '0.49'
795
+ VersionChanged: '0.73'
796
+ AllowDoxygenCommentStyle: false
797
+
798
+ Layout/LeadingEmptyLines:
799
+ Description: Check for unnecessary blank lines at the beginning of a file.
800
+ Enabled: true
801
+ VersionAdded: '0.57'
802
+ VersionChanged: '0.77'
803
+
804
+ Layout/LineLength:
805
+ Description: 'Limit lines to 80 characters.'
806
+ StyleGuide: '#80-character-limits'
807
+ Enabled: true
808
+ VersionAdded: '0.25'
809
+ VersionChanged: '0.78'
810
+ AutoCorrect: false
811
+ Max: 80
812
+ # To make it possible to copy or click on URIs in the code, we allow lines
813
+ # containing a URI to be longer than Max.
814
+ AllowHeredoc: true
815
+ AllowURI: true
816
+ URISchemes:
817
+ - http
818
+ - https
819
+ # The IgnoreCopDirectives option causes the LineLength rule to ignore cop
820
+ # directives like '# rubocop: enable ...' when calculating a line's length.
821
+ IgnoreCopDirectives: true
822
+ # The IgnoredPatterns option is a list of !ruby/regexp and/or string
823
+ # elements. Strings will be converted to Regexp objects. A line that matches
824
+ # any regular expression listed in this option will be ignored by LineLength.
825
+ IgnoredPatterns: []
826
+
827
+ Layout/MultilineArrayBraceLayout:
828
+ Description: >-
829
+ Checks that the closing brace in an array literal is
830
+ either on the same line as the last array element, or
831
+ a new line.
832
+ Enabled: true
833
+ VersionAdded: '0.49'
834
+ EnforcedStyle: symmetrical
835
+ SupportedStyles:
836
+ # symmetrical: closing brace is positioned in same way as opening brace
837
+ # new_line: closing brace is always on a new line
838
+ # same_line: closing brace is always on the same line as last element
839
+ - symmetrical
840
+ - new_line
841
+ - same_line
842
+
843
+ Layout/MultilineArrayLineBreaks:
844
+ Description: >-
845
+ Checks that each item in a multi-line array literal
846
+ starts on a separate line.
847
+ Enabled: false
848
+ VersionAdded: '0.67'
849
+
850
+ Layout/MultilineAssignmentLayout:
851
+ Description: 'Check for a newline after the assignment operator in multi-line assignments.'
852
+ StyleGuide: '#indent-conditional-assignment'
853
+ Enabled: false
854
+ VersionAdded: '0.49'
855
+ # The types of assignments which are subject to this rule.
856
+ SupportedTypes:
857
+ - block
858
+ - case
859
+ - class
860
+ - if
861
+ - kwbegin
862
+ - module
863
+ EnforcedStyle: new_line
864
+ SupportedStyles:
865
+ # Ensures that the assignment operator and the rhs are on the same line for
866
+ # the set of supported types.
867
+ - same_line
868
+ # Ensures that the assignment operator and the rhs are on separate lines
869
+ # for the set of supported types.
870
+ - new_line
871
+
872
+ Layout/MultilineBlockLayout:
873
+ Description: 'Ensures newlines after multiline block do statements.'
874
+ Enabled: true
875
+ VersionAdded: '0.49'
876
+
877
+ Layout/MultilineHashBraceLayout:
878
+ Description: >-
879
+ Checks that the closing brace in a hash literal is
880
+ either on the same line as the last hash element, or
881
+ a new line.
882
+ Enabled: true
883
+ VersionAdded: '0.49'
884
+ EnforcedStyle: symmetrical
885
+ SupportedStyles:
886
+ # symmetrical: closing brace is positioned in same way as opening brace
887
+ # new_line: closing brace is always on a new line
888
+ # same_line: closing brace is always on same line as last element
889
+ - symmetrical
890
+ - new_line
891
+ - same_line
892
+
893
+ Layout/MultilineHashKeyLineBreaks:
894
+ Description: >-
895
+ Checks that each item in a multi-line hash literal
896
+ starts on a separate line.
897
+ Enabled: false
898
+ VersionAdded: '0.67'
899
+
900
+ Layout/MultilineMethodArgumentLineBreaks:
901
+ Description: >-
902
+ Checks that each argument in a multi-line method call
903
+ starts on a separate line.
904
+ Enabled: false
905
+ VersionAdded: '0.67'
906
+
907
+ Layout/MultilineMethodCallBraceLayout:
908
+ Description: >-
909
+ Checks that the closing brace in a method call is
910
+ either on the same line as the last method argument, or
911
+ a new line.
912
+ Enabled: true
913
+ VersionAdded: '0.49'
914
+ EnforcedStyle: symmetrical
915
+ SupportedStyles:
916
+ # symmetrical: closing brace is positioned in same way as opening brace
917
+ # new_line: closing brace is always on a new line
918
+ # same_line: closing brace is always on the same line as last argument
919
+ - symmetrical
920
+ - new_line
921
+ - same_line
922
+
923
+ Layout/MultilineMethodCallIndentation:
924
+ Description: >-
925
+ Checks indentation of method calls with the dot operator
926
+ that span more than one line.
927
+ Enabled: true
928
+ VersionAdded: '0.49'
929
+ EnforcedStyle: aligned
930
+ SupportedStyles:
931
+ - aligned
932
+ - indented
933
+ - indented_relative_to_receiver
934
+ # By default, the indentation width from Layout/IndentationWidth is used
935
+ # But it can be overridden by setting this parameter
936
+ IndentationWidth: ~
937
+
938
+ Layout/MultilineMethodDefinitionBraceLayout:
939
+ Description: >-
940
+ Checks that the closing brace in a method definition is
941
+ either on the same line as the last method parameter, or
942
+ a new line.
943
+ Enabled: true
944
+ VersionAdded: '0.49'
945
+ EnforcedStyle: symmetrical
946
+ SupportedStyles:
947
+ # symmetrical: closing brace is positioned in same way as opening brace
948
+ # new_line: closing brace is always on a new line
949
+ # same_line: closing brace is always on the same line as last parameter
950
+ - symmetrical
951
+ - new_line
952
+ - same_line
953
+
954
+ Layout/MultilineOperationIndentation:
955
+ Description: >-
956
+ Checks indentation of binary operations that span more than
957
+ one line.
958
+ Enabled: true
959
+ VersionAdded: '0.49'
960
+ EnforcedStyle: aligned
961
+ SupportedStyles:
962
+ - aligned
963
+ - indented
964
+ # By default, the indentation width from `Layout/IndentationWidth` is used
965
+ # But it can be overridden by setting this parameter
966
+ IndentationWidth: ~
967
+
968
+ Layout/ParameterAlignment:
969
+ Description: >-
970
+ Align the parameters of a method definition if they span more
971
+ than one line.
972
+ StyleGuide: '#no-double-indent'
973
+ Enabled: true
974
+ VersionAdded: '0.49'
975
+ VersionChanged: '0.77'
976
+ # Alignment of parameters in multi-line method calls.
977
+ #
978
+ # The `with_first_parameter` style aligns the following lines along the same
979
+ # column as the first parameter.
980
+ #
981
+ # def method_foo(a,
982
+ # b)
983
+ #
984
+ # The `with_fixed_indentation` style aligns the following lines with one
985
+ # level of indentation relative to the start of the line with the method call.
986
+ #
987
+ # def method_foo(a,
988
+ # b)
989
+ EnforcedStyle: with_first_parameter
990
+ SupportedStyles:
991
+ - with_first_parameter
992
+ - with_fixed_indentation
993
+ # By default, the indentation width from Layout/IndentationWidth is used
994
+ # But it can be overridden by setting this parameter
995
+ IndentationWidth: ~
996
+
997
+ Layout/RescueEnsureAlignment:
998
+ Description: 'Align rescues and ensures correctly.'
999
+ Enabled: true
1000
+ VersionAdded: '0.49'
1001
+
1002
+ Layout/SpaceAfterColon:
1003
+ Description: 'Use spaces after colons.'
1004
+ StyleGuide: '#spaces-operators'
1005
+ Enabled: true
1006
+ VersionAdded: '0.49'
1007
+
1008
+ Layout/SpaceAfterComma:
1009
+ Description: 'Use spaces after commas.'
1010
+ StyleGuide: '#spaces-operators'
1011
+ Enabled: true
1012
+ VersionAdded: '0.49'
1013
+
1014
+ Layout/SpaceAfterMethodName:
1015
+ Description: >-
1016
+ Do not put a space between a method name and the opening
1017
+ parenthesis in a method definition.
1018
+ StyleGuide: '#parens-no-spaces'
1019
+ Enabled: true
1020
+ VersionAdded: '0.49'
1021
+
1022
+ Layout/SpaceAfterNot:
1023
+ Description: Tracks redundant space after the ! operator.
1024
+ StyleGuide: '#no-space-bang'
1025
+ Enabled: true
1026
+ VersionAdded: '0.49'
1027
+
1028
+ Layout/SpaceAfterSemicolon:
1029
+ Description: 'Use spaces after semicolons.'
1030
+ StyleGuide: '#spaces-operators'
1031
+ Enabled: true
1032
+ VersionAdded: '0.49'
1033
+
1034
+ Layout/SpaceAroundBlockParameters:
1035
+ Description: 'Checks the spacing inside and after block parameters pipes.'
1036
+ Enabled: true
1037
+ VersionAdded: '0.49'
1038
+ EnforcedStyleInsidePipes: no_space
1039
+ SupportedStylesInsidePipes:
1040
+ - space
1041
+ - no_space
1042
+
1043
+ Layout/SpaceAroundEqualsInParameterDefault:
1044
+ Description: >-
1045
+ Checks that the equals signs in parameter default assignments
1046
+ have or don't have surrounding space depending on
1047
+ configuration.
1048
+ StyleGuide: '#spaces-around-equals'
1049
+ Enabled: true
1050
+ VersionAdded: '0.49'
1051
+ EnforcedStyle: space
1052
+ SupportedStyles:
1053
+ - space
1054
+ - no_space
1055
+
1056
+ Layout/SpaceAroundKeyword:
1057
+ Description: 'Use a space around keywords if appropriate.'
1058
+ Enabled: true
1059
+ VersionAdded: '0.49'
1060
+
1061
+ Layout/SpaceAroundOperators:
1062
+ Description: 'Use a single space around operators.'
1063
+ StyleGuide: '#spaces-operators'
1064
+ Enabled: true
1065
+ VersionAdded: '0.49'
1066
+ # When `true`, allows most uses of extra spacing if the intent is to align
1067
+ # with an operator on the previous or next line, not counting empty lines
1068
+ # or comment lines.
1069
+ AllowForAlignment: true
1070
+ EnforcedStyleForExponentOperator: no_space
1071
+ SupportedStylesForExponentOperator:
1072
+ - space
1073
+ - no_space
1074
+
1075
+ Layout/SpaceBeforeBlockBraces:
1076
+ Description: >-
1077
+ Checks that the left block brace has or doesn't have space
1078
+ before it.
1079
+ Enabled: true
1080
+ VersionAdded: '0.49'
1081
+ EnforcedStyle: space
1082
+ SupportedStyles:
1083
+ - space
1084
+ - no_space
1085
+ EnforcedStyleForEmptyBraces: space
1086
+ SupportedStylesForEmptyBraces:
1087
+ - space
1088
+ - no_space
1089
+ VersionChanged: '0.52.1'
1090
+
1091
+ Layout/SpaceBeforeComma:
1092
+ Description: 'No spaces before commas.'
1093
+ Enabled: true
1094
+ VersionAdded: '0.49'
1095
+
1096
+ Layout/SpaceBeforeComment:
1097
+ Description: >-
1098
+ Checks for missing space between code and a comment on the
1099
+ same line.
1100
+ Enabled: true
1101
+ VersionAdded: '0.49'
1102
+
1103
+ Layout/SpaceBeforeFirstArg:
1104
+ Description: >-
1105
+ Checks that exactly one space is used between a method name
1106
+ and the first argument for method calls without parentheses.
1107
+ Enabled: true
1108
+ VersionAdded: '0.49'
1109
+ # When `true`, allows most uses of extra spacing if the intent is to align
1110
+ # things with the previous or next line, not counting empty lines or comment
1111
+ # lines.
1112
+ AllowForAlignment: true
1113
+
1114
+ Layout/SpaceBeforeSemicolon:
1115
+ Description: 'No spaces before semicolons.'
1116
+ Enabled: true
1117
+ VersionAdded: '0.49'
1118
+
1119
+ Layout/SpaceInLambdaLiteral:
1120
+ Description: 'Checks for spaces in lambda literals.'
1121
+ Enabled: true
1122
+ VersionAdded: '0.49'
1123
+ EnforcedStyle: require_no_space
1124
+ SupportedStyles:
1125
+ - require_no_space
1126
+ - require_space
1127
+
1128
+ Layout/SpaceInsideArrayLiteralBrackets:
1129
+ Description: 'Checks the spacing inside array literal brackets.'
1130
+ Enabled: true
1131
+ VersionAdded: '0.52'
1132
+ EnforcedStyle: no_space
1133
+ SupportedStyles:
1134
+ - space
1135
+ - no_space
1136
+ # 'compact' normally requires a space inside the brackets, with the exception
1137
+ # that successive left brackets or right brackets are collapsed together
1138
+ - compact
1139
+ EnforcedStyleForEmptyBrackets: no_space
1140
+ SupportedStylesForEmptyBrackets:
1141
+ - space
1142
+ - no_space
1143
+
1144
+ Layout/SpaceInsideArrayPercentLiteral:
1145
+ Description: 'No unnecessary additional spaces between elements in %i/%w literals.'
1146
+ Enabled: true
1147
+ VersionAdded: '0.49'
1148
+
1149
+ Layout/SpaceInsideBlockBraces:
1150
+ Description: >-
1151
+ Checks that block braces have or don't have surrounding space.
1152
+ For blocks taking parameters, checks that the left brace has
1153
+ or doesn't have trailing space.
1154
+ Enabled: true
1155
+ VersionAdded: '0.49'
1156
+ EnforcedStyle: space
1157
+ SupportedStyles:
1158
+ - space
1159
+ - no_space
1160
+ EnforcedStyleForEmptyBraces: no_space
1161
+ SupportedStylesForEmptyBraces:
1162
+ - space
1163
+ - no_space
1164
+ # Space between `{` and `|`. Overrides `EnforcedStyle` if there is a conflict.
1165
+ SpaceBeforeBlockParameters: true
1166
+
1167
+ Layout/SpaceInsideHashLiteralBraces:
1168
+ Description: "Use spaces inside hash literal braces - or don't."
1169
+ StyleGuide: '#spaces-operators'
1170
+ Enabled: true
1171
+ VersionAdded: '0.49'
1172
+ EnforcedStyle: space
1173
+ SupportedStyles:
1174
+ - space
1175
+ - no_space
1176
+ # 'compact' normally requires a space inside hash braces, with the exception
1177
+ # that successive left braces or right braces are collapsed together
1178
+ - compact
1179
+ EnforcedStyleForEmptyBraces: no_space
1180
+ SupportedStylesForEmptyBraces:
1181
+ - space
1182
+ - no_space
1183
+
1184
+
1185
+ Layout/SpaceInsideParens:
1186
+ Description: 'No spaces after ( or before ).'
1187
+ StyleGuide: '#spaces-braces'
1188
+ Enabled: true
1189
+ VersionAdded: '0.49'
1190
+ VersionChanged: '0.55'
1191
+ EnforcedStyle: no_space
1192
+ SupportedStyles:
1193
+ - space
1194
+ - no_space
1195
+
1196
+ Layout/SpaceInsidePercentLiteralDelimiters:
1197
+ Description: 'No unnecessary spaces inside delimiters of %i/%w/%x literals.'
1198
+ Enabled: true
1199
+ VersionAdded: '0.49'
1200
+
1201
+ Layout/SpaceInsideRangeLiteral:
1202
+ Description: 'No spaces inside range literals.'
1203
+ StyleGuide: '#no-space-inside-range-literals'
1204
+ Enabled: true
1205
+ VersionAdded: '0.49'
1206
+
1207
+ Layout/SpaceInsideReferenceBrackets:
1208
+ Description: 'Checks the spacing inside referential brackets.'
1209
+ Enabled: true
1210
+ VersionAdded: '0.52'
1211
+ VersionChanged: '0.53'
1212
+ EnforcedStyle: no_space
1213
+ SupportedStyles:
1214
+ - space
1215
+ - no_space
1216
+ EnforcedStyleForEmptyBrackets: no_space
1217
+ SupportedStylesForEmptyBrackets:
1218
+ - space
1219
+ - no_space
1220
+
1221
+ Layout/SpaceInsideStringInterpolation:
1222
+ Description: 'Checks for padding/surrounding spaces inside string interpolation.'
1223
+ StyleGuide: '#string-interpolation'
1224
+ Enabled: true
1225
+ VersionAdded: '0.49'
1226
+ EnforcedStyle: no_space
1227
+ SupportedStyles:
1228
+ - space
1229
+ - no_space
1230
+
1231
+ Layout/Tab:
1232
+ Description: 'No hard tabs.'
1233
+ StyleGuide: '#spaces-indentation'
1234
+ Enabled: true
1235
+ VersionAdded: '0.49'
1236
+ VersionChanged: '0.51'
1237
+ # By default, the indentation width from Layout/IndentationWidth is used
1238
+ # But it can be overridden by setting this parameter
1239
+ # It is used during auto-correction to determine how many spaces should
1240
+ # replace each tab.
1241
+ IndentationWidth: ~
1242
+
1243
+ Layout/TrailingEmptyLines:
1244
+ Description: 'Checks trailing blank lines and final newline.'
1245
+ StyleGuide: '#newline-eof'
1246
+ Enabled: true
1247
+ VersionAdded: '0.49'
1248
+ VersionChanged: '0.77'
1249
+ EnforcedStyle: final_newline
1250
+ SupportedStyles:
1251
+ - final_newline
1252
+ - final_blank_line
1253
+
1254
+ Layout/TrailingWhitespace:
1255
+ Description: 'Avoid trailing whitespace.'
1256
+ StyleGuide: '#no-trailing-whitespace'
1257
+ Enabled: true
1258
+ VersionAdded: '0.49'
1259
+ VersionChanged: '0.55'
1260
+ AllowInHeredoc: false
1261
+
1262
+ #################### Lint ##################################
1263
+ ### Warnings
1264
+
1265
+ Lint/AmbiguousBlockAssociation:
1266
+ Description: >-
1267
+ Checks for ambiguous block association with method when param passed without
1268
+ parentheses.
1269
+ StyleGuide: '#syntax'
1270
+ Enabled: true
1271
+ VersionAdded: '0.48'
1272
+
1273
+ Lint/AmbiguousOperator:
1274
+ Description: >-
1275
+ Checks for ambiguous operators in the first argument of a
1276
+ method invocation without parentheses.
1277
+ StyleGuide: '#method-invocation-parens'
1278
+ Enabled: true
1279
+ VersionAdded: '0.17'
1280
+
1281
+ Lint/AmbiguousRegexpLiteral:
1282
+ Description: >-
1283
+ Checks for ambiguous regexp literals in the first argument of
1284
+ a method invocation without parentheses.
1285
+ Enabled: true
1286
+ VersionAdded: '0.17'
1287
+
1288
+ Lint/AssignmentInCondition:
1289
+ Description: "Don't use assignment in conditions."
1290
+ StyleGuide: '#safe-assignment-in-condition'
1291
+ Enabled: true
1292
+ VersionAdded: '0.9'
1293
+ AllowSafeAssignment: true
1294
+
1295
+ Lint/BigDecimalNew:
1296
+ Description: '`BigDecimal.new()` is deprecated. Use `BigDecimal()` instead.'
1297
+ Enabled: true
1298
+ VersionAdded: '0.53'
1299
+
1300
+ Lint/BooleanSymbol:
1301
+ Description: 'Check for `:true` and `:false` symbols.'
1302
+ Enabled: true
1303
+ VersionAdded: '0.50'
1304
+
1305
+ Lint/CircularArgumentReference:
1306
+ Description: "Default values in optional keyword arguments and optional ordinal arguments should not refer back to the name of the argument."
1307
+ Enabled: true
1308
+ VersionAdded: '0.33'
1309
+
1310
+ Lint/Debugger:
1311
+ Description: 'Check for debugger calls.'
1312
+ Enabled: true
1313
+ VersionAdded: '0.14'
1314
+ VersionChanged: '0.49'
1315
+
1316
+ Lint/DeprecatedClassMethods:
1317
+ Description: 'Check for deprecated class method calls.'
1318
+ Enabled: true
1319
+ VersionAdded: '0.19'
1320
+
1321
+ Lint/DisjunctiveAssignmentInConstructor:
1322
+ Description: 'In constructor, plain assignment is preferred over disjunctive.'
1323
+ Enabled: true
1324
+ Safe: false
1325
+ VersionAdded: '0.62'
1326
+
1327
+ Lint/DuplicateCaseCondition:
1328
+ Description: 'Do not repeat values in case conditionals.'
1329
+ Enabled: true
1330
+ VersionAdded: '0.45'
1331
+
1332
+ Lint/DuplicateHashKey:
1333
+ Description: 'Check for duplicate keys in hash literals.'
1334
+ Enabled: true
1335
+ VersionAdded: '0.34'
1336
+ VersionChanged: '0.77'
1337
+
1338
+ Lint/DuplicateMethods:
1339
+ Description: 'Check for duplicate method definitions.'
1340
+ Enabled: true
1341
+ VersionAdded: '0.29'
1342
+
1343
+ Lint/EachWithObjectArgument:
1344
+ Description: 'Check for immutable argument given to each_with_object.'
1345
+ Enabled: true
1346
+ VersionAdded: '0.31'
1347
+
1348
+ Lint/ElseLayout:
1349
+ Description: 'Check for odd code arrangement in an else block.'
1350
+ Enabled: true
1351
+ VersionAdded: '0.17'
1352
+
1353
+ Lint/EmptyEnsure:
1354
+ Description: 'Checks for empty ensure block.'
1355
+ Enabled: true
1356
+ VersionAdded: '0.10'
1357
+ VersionChanged: '0.48'
1358
+ AutoCorrect: false
1359
+
1360
+ Lint/EmptyExpression:
1361
+ Description: 'Checks for empty expressions.'
1362
+ Enabled: true
1363
+ VersionAdded: '0.45'
1364
+
1365
+ Lint/EmptyInterpolation:
1366
+ Description: 'Checks for empty string interpolation.'
1367
+ Enabled: true
1368
+ VersionAdded: '0.20'
1369
+ VersionChanged: '0.45'
1370
+
1371
+ Lint/EmptyWhen:
1372
+ Description: 'Checks for `when` branches with empty bodies.'
1373
+ Enabled: true
1374
+ VersionAdded: '0.45'
1375
+
1376
+ Lint/EndInMethod:
1377
+ Description: 'END blocks should not be placed inside method definitions.'
1378
+ Enabled: true
1379
+ VersionAdded: '0.9'
1380
+
1381
+ Lint/EnsureReturn:
1382
+ Description: 'Do not use return in an ensure block.'
1383
+ StyleGuide: '#no-return-ensure'
1384
+ Enabled: true
1385
+ VersionAdded: '0.9'
1386
+
1387
+ Lint/ErbNewArguments:
1388
+ Description: 'Use `:trim_mode` and `:eoutvar` keyword arguments to `ERB.new`.'
1389
+ Enabled: true
1390
+ VersionAdded: '0.56'
1391
+
1392
+ Lint/FlipFlop:
1393
+ Description: 'Checks for flip-flops.'
1394
+ StyleGuide: '#no-flip-flops'
1395
+ Enabled: true
1396
+ VersionAdded: '0.16'
1397
+
1398
+ Lint/FloatOutOfRange:
1399
+ Description: >-
1400
+ Catches floating-point literals too large or small for Ruby to
1401
+ represent.
1402
+ Enabled: true
1403
+ VersionAdded: '0.36'
1404
+
1405
+ Lint/FormatParameterMismatch:
1406
+ Description: 'The number of parameters to format/sprint must match the fields.'
1407
+ Enabled: true
1408
+ VersionAdded: '0.33'
1409
+
1410
+ Lint/HeredocMethodCallPosition:
1411
+ Description: >-
1412
+ Checks for the ordering of a method call where
1413
+ the receiver of the call is a HEREDOC.
1414
+ Enabled: false
1415
+ StyleGuide: '#heredoc-method-calls'
1416
+ VersionAdded: '0.68'
1417
+
1418
+ Lint/ImplicitStringConcatenation:
1419
+ Description: >-
1420
+ Checks for adjacent string literals on the same line, which
1421
+ could better be represented as a single string literal.
1422
+ Enabled: true
1423
+ VersionAdded: '0.36'
1424
+
1425
+ Lint/IneffectiveAccessModifier:
1426
+ Description: >-
1427
+ Checks for attempts to use `private` or `protected` to set
1428
+ the visibility of a class method, which does not work.
1429
+ Enabled: true
1430
+ VersionAdded: '0.36'
1431
+
1432
+ Lint/InheritException:
1433
+ Description: 'Avoid inheriting from the `Exception` class.'
1434
+ Enabled: true
1435
+ VersionAdded: '0.41'
1436
+ # The default base class in favour of `Exception`.
1437
+ EnforcedStyle: runtime_error
1438
+ SupportedStyles:
1439
+ - runtime_error
1440
+ - standard_error
1441
+
1442
+ Lint/InterpolationCheck:
1443
+ Description: 'Raise warning for interpolation in single q strs.'
1444
+ Enabled: true
1445
+ VersionAdded: '0.50'
1446
+
1447
+ Lint/LiteralAsCondition:
1448
+ Description: 'Checks of literals used in conditions.'
1449
+ Enabled: true
1450
+ VersionAdded: '0.51'
1451
+
1452
+ Lint/LiteralInInterpolation:
1453
+ Description: 'Checks for literals used in interpolation.'
1454
+ Enabled: true
1455
+ VersionAdded: '0.19'
1456
+ VersionChanged: '0.32'
1457
+
1458
+ Lint/Loop:
1459
+ Description: >-
1460
+ Use Kernel#loop with break rather than begin/end/until or
1461
+ begin/end/while for post-loop tests.
1462
+ StyleGuide: '#loop-with-break'
1463
+ Enabled: true
1464
+ VersionAdded: '0.9'
1465
+
1466
+ Lint/MissingCopEnableDirective:
1467
+ Description: 'Checks for a `# rubocop:enable` after `# rubocop:disable`.'
1468
+ Enabled: true
1469
+ VersionAdded: '0.52'
1470
+ # Maximum number of consecutive lines the cop can be disabled for.
1471
+ # 0 allows only single-line disables
1472
+ # 1 would mean the maximum allowed is the following:
1473
+ # # rubocop:disable SomeCop
1474
+ # a = 1
1475
+ # # rubocop:enable SomeCop
1476
+ # .inf for any size
1477
+ MaximumRangeSize: .inf
1478
+
1479
+ Lint/MultipleComparison:
1480
+ Description: "Use `&&` operator to compare multiple values."
1481
+ Enabled: true
1482
+ VersionAdded: '0.47'
1483
+ VersionChanged: '0.77'
1484
+
1485
+ Lint/NestedMethodDefinition:
1486
+ Description: 'Do not use nested method definitions.'
1487
+ StyleGuide: '#no-nested-methods'
1488
+ Enabled: true
1489
+ VersionAdded: '0.32'
1490
+
1491
+ Lint/NestedPercentLiteral:
1492
+ Description: 'Checks for nested percent literals.'
1493
+ Enabled: true
1494
+ VersionAdded: '0.52'
1495
+
1496
+ Lint/NextWithoutAccumulator:
1497
+ Description: >-
1498
+ Do not omit the accumulator when calling `next`
1499
+ in a `reduce`/`inject` block.
1500
+ Enabled: true
1501
+ VersionAdded: '0.36'
1502
+
1503
+ Lint/NonDeterministicRequireOrder:
1504
+ Description: 'Always sort arrays returned by Dir.glob when requiring files.'
1505
+ Enabled: true
1506
+ VersionAdded: '0.78'
1507
+ Safe: false
1508
+
1509
+ Lint/NonLocalExitFromIterator:
1510
+ Description: 'Do not use return in iterator to cause non-local exit.'
1511
+ Enabled: true
1512
+ VersionAdded: '0.30'
1513
+
1514
+ Lint/NumberConversion:
1515
+ Description: 'Checks unsafe usage of number conversion methods.'
1516
+ Enabled: false
1517
+ VersionAdded: '0.53'
1518
+ VersionChanged: '0.70'
1519
+ SafeAutoCorrect: false
1520
+
1521
+ Lint/OrderedMagicComments:
1522
+ Description: 'Checks the proper ordering of magic comments and whether a magic comment is not placed before a shebang.'
1523
+ Enabled: true
1524
+ VersionAdded: '0.53'
1525
+
1526
+ Lint/ParenthesesAsGroupedExpression:
1527
+ Description: >-
1528
+ Checks for method calls with a space before the opening
1529
+ parenthesis.
1530
+ StyleGuide: '#parens-no-spaces'
1531
+ Enabled: true
1532
+ VersionAdded: '0.12'
1533
+
1534
+ Lint/PercentStringArray:
1535
+ Description: >-
1536
+ Checks for unwanted commas and quotes in %w/%W literals.
1537
+ Enabled: true
1538
+ Safe: false
1539
+ VersionAdded: '0.41'
1540
+
1541
+ Lint/PercentSymbolArray:
1542
+ Description: >-
1543
+ Checks for unwanted commas and colons in %i/%I literals.
1544
+ Enabled: true
1545
+ VersionAdded: '0.41'
1546
+
1547
+ Lint/RandOne:
1548
+ Description: >-
1549
+ Checks for `rand(1)` calls. Such calls always return `0`
1550
+ and most likely a mistake.
1551
+ Enabled: true
1552
+ VersionAdded: '0.36'
1553
+
1554
+ Lint/RedundantCopDisableDirective:
1555
+ Description: >-
1556
+ Checks for rubocop:disable comments that can be removed.
1557
+ Note: this cop is not disabled when disabling all cops.
1558
+ It must be explicitly disabled.
1559
+ Enabled: true
1560
+ VersionAdded: '0.76'
1561
+
1562
+ Lint/RedundantCopEnableDirective:
1563
+ Description: Checks for rubocop:enable comments that can be removed.
1564
+ Enabled: true
1565
+ VersionAdded: '0.76'
1566
+
1567
+ Lint/RedundantRequireStatement:
1568
+ Description: 'Checks for unnecessary `require` statement.'
1569
+ Enabled: true
1570
+ VersionAdded: '0.76'
1571
+
1572
+ Lint/RedundantSplatExpansion:
1573
+ Description: 'Checks for splat unnecessarily being called on literals.'
1574
+ Enabled: true
1575
+ VersionChanged: '0.76'
1576
+
1577
+ Lint/RedundantStringCoercion:
1578
+ Description: 'Checks for Object#to_s usage in string interpolation.'
1579
+ StyleGuide: '#no-to-s'
1580
+ Enabled: true
1581
+ VersionAdded: '0.19'
1582
+ VersionChanged: '0.77'
1583
+
1584
+ Lint/RedundantWithIndex:
1585
+ Description: 'Checks for redundant `with_index`.'
1586
+ Enabled: true
1587
+ VersionAdded: '0.50'
1588
+
1589
+ Lint/RedundantWithObject:
1590
+ Description: 'Checks for redundant `with_object`.'
1591
+ Enabled: true
1592
+ VersionAdded: '0.51'
1593
+
1594
+ Lint/RegexpAsCondition:
1595
+ Description: >-
1596
+ Do not use regexp literal as a condition.
1597
+ The regexp literal matches `$_` implicitly.
1598
+ Enabled: true
1599
+ VersionAdded: '0.51'
1600
+
1601
+ Lint/RequireParentheses:
1602
+ Description: >-
1603
+ Use parentheses in the method call to avoid confusion
1604
+ about precedence.
1605
+ Enabled: true
1606
+ VersionAdded: '0.18'
1607
+
1608
+ Lint/RescueException:
1609
+ Description: 'Avoid rescuing the Exception class.'
1610
+ StyleGuide: '#no-blind-rescues'
1611
+ Enabled: true
1612
+ VersionAdded: '0.9'
1613
+ VersionChanged: '0.27.1'
1614
+
1615
+ Lint/RescueType:
1616
+ Description: 'Avoid rescuing from non constants that could result in a `TypeError`.'
1617
+ Enabled: true
1618
+ VersionAdded: '0.49'
1619
+
1620
+ Lint/ReturnInVoidContext:
1621
+ Description: 'Checks for return in void context.'
1622
+ Enabled: true
1623
+ VersionAdded: '0.50'
1624
+
1625
+ Lint/SafeNavigationChain:
1626
+ Description: 'Do not chain ordinary method call after safe navigation operator.'
1627
+ Enabled: true
1628
+ VersionAdded: '0.47'
1629
+ VersionChanged: '0.77'
1630
+ AllowedMethods:
1631
+ - present?
1632
+ - blank?
1633
+ - presence
1634
+ - try
1635
+ - try!
1636
+
1637
+ Lint/SafeNavigationConsistency:
1638
+ Description: >-
1639
+ Check to make sure that if safe navigation is used for a method
1640
+ call in an `&&` or `||` condition that safe navigation is used
1641
+ for all method calls on that same object.
1642
+ Enabled: true
1643
+ VersionAdded: '0.55'
1644
+ VersionChanged: '0.77'
1645
+ AllowedMethods:
1646
+ - present?
1647
+ - blank?
1648
+ - presence
1649
+ - try
1650
+ - try!
1651
+
1652
+ Lint/SafeNavigationWithEmpty:
1653
+ Description: 'Avoid `foo&.empty?` in conditionals.'
1654
+ Enabled: true
1655
+ VersionAdded: '0.62'
1656
+
1657
+ Lint/ScriptPermission:
1658
+ Description: 'Grant script file execute permission.'
1659
+ Enabled: true
1660
+ VersionAdded: '0.49'
1661
+ VersionChanged: '0.50'
1662
+
1663
+ Lint/SendWithMixinArgument:
1664
+ Description: 'Checks for `send` method when using mixin.'
1665
+ Enabled: true
1666
+ VersionAdded: '0.75'
1667
+
1668
+ Lint/ShadowedArgument:
1669
+ Description: 'Avoid reassigning arguments before they were used.'
1670
+ Enabled: true
1671
+ VersionAdded: '0.52'
1672
+ IgnoreImplicitReferences: false
1673
+
1674
+
1675
+ Lint/ShadowedException:
1676
+ Description: >-
1677
+ Avoid rescuing a higher level exception
1678
+ before a lower level exception.
1679
+ Enabled: true
1680
+ VersionAdded: '0.41'
1681
+
1682
+ Lint/ShadowingOuterLocalVariable:
1683
+ Description: >-
1684
+ Do not use the same name as outer local variable
1685
+ for block arguments or block local variables.
1686
+ Enabled: true
1687
+ VersionAdded: '0.9'
1688
+
1689
+ Lint/SuppressedException:
1690
+ Description: "Don't suppress exceptions."
1691
+ StyleGuide: '#dont-hide-exceptions'
1692
+ Enabled: true
1693
+ AllowComments: false
1694
+ VersionAdded: '0.9'
1695
+ VersionChanged: '0.77'
1696
+
1697
+ Lint/Syntax:
1698
+ Description: 'Checks syntax error.'
1699
+ Enabled: true
1700
+ VersionAdded: '0.9'
1701
+
1702
+
1703
+ Lint/ToJSON:
1704
+ Description: 'Ensure #to_json includes an optional argument.'
1705
+ Enabled: true
1706
+
1707
+ Lint/UnderscorePrefixedVariableName:
1708
+ Description: 'Do not use prefix `_` for a variable that is used.'
1709
+ Enabled: true
1710
+ VersionAdded: '0.21'
1711
+ AllowKeywordBlockArguments: false
1712
+
1713
+ Lint/UnifiedInteger:
1714
+ Description: 'Use Integer instead of Fixnum or Bignum.'
1715
+ Enabled: true
1716
+ VersionAdded: '0.43'
1717
+
1718
+ Lint/UnreachableCode:
1719
+ Description: 'Unreachable code.'
1720
+ Enabled: true
1721
+ VersionAdded: '0.9'
1722
+
1723
+ Lint/UnusedBlockArgument:
1724
+ Description: 'Checks for unused block arguments.'
1725
+ StyleGuide: '#underscore-unused-vars'
1726
+ Enabled: true
1727
+ VersionAdded: '0.21'
1728
+ VersionChanged: '0.22'
1729
+ IgnoreEmptyBlocks: true
1730
+ AllowUnusedKeywordArguments: false
1731
+
1732
+ Lint/UnusedMethodArgument:
1733
+ Description: 'Checks for unused method arguments.'
1734
+ StyleGuide: '#underscore-unused-vars'
1735
+ Enabled: true
1736
+ VersionAdded: '0.21'
1737
+ VersionChanged: '0.35'
1738
+ AllowUnusedKeywordArguments: false
1739
+ IgnoreEmptyMethods: true
1740
+
1741
+ Lint/UriEscapeUnescape:
1742
+ Description: >-
1743
+ `URI.escape` method is obsolete and should not be used. Instead, use
1744
+ `CGI.escape`, `URI.encode_www_form` or `URI.encode_www_form_component`
1745
+ depending on your specific use case.
1746
+ Also `URI.unescape` method is obsolete and should not be used. Instead, use
1747
+ `CGI.unescape`, `URI.decode_www_form` or `URI.decode_www_form_component`
1748
+ depending on your specific use case.
1749
+ Enabled: true
1750
+ VersionAdded: '0.50'
1751
+
1752
+ Lint/UriRegexp:
1753
+ Description: 'Use `URI::DEFAULT_PARSER.make_regexp` instead of `URI.regexp`.'
1754
+ Enabled: true
1755
+ VersionAdded: '0.50'
1756
+
1757
+ Lint/UselessAccessModifier:
1758
+ Description: 'Checks for useless access modifiers.'
1759
+ Enabled: true
1760
+ VersionAdded: '0.20'
1761
+ VersionChanged: '0.47'
1762
+ ContextCreatingMethods: []
1763
+ MethodCreatingMethods: []
1764
+
1765
+ Lint/UselessAssignment:
1766
+ Description: 'Checks for useless assignment to a local variable.'
1767
+ StyleGuide: '#underscore-unused-vars'
1768
+ Enabled: true
1769
+ VersionAdded: '0.11'
1770
+
1771
+ Lint/UselessComparison:
1772
+ Description: 'Checks for comparison of something with itself.'
1773
+ Enabled: true
1774
+ VersionAdded: '0.11'
1775
+
1776
+ Lint/UselessElseWithoutRescue:
1777
+ Description: 'Checks for useless `else` in `begin..end` without `rescue`.'
1778
+ Enabled: true
1779
+ VersionAdded: '0.17'
1780
+
1781
+ Lint/UselessSetterCall:
1782
+ Description: 'Checks for useless setter call to a local variable.'
1783
+ Enabled: true
1784
+ VersionAdded: '0.13'
1785
+
1786
+ Lint/Void:
1787
+ Description: 'Possible use of operator/literal/variable in void context.'
1788
+ Enabled: true
1789
+ VersionAdded: '0.9'
1790
+ CheckForMethodsWithNoSideEffects: false
1791
+
1792
+ #################### Metrics ###############################
1793
+
1794
+ Metrics/AbcSize:
1795
+ Description: >-
1796
+ A calculated magnitude based on number of assignments,
1797
+ branches, and conditions.
1798
+ Reference:
1799
+ - http://c2.com/cgi/wiki?AbcMetric
1800
+ - https://en.wikipedia.org/wiki/ABC_Software_Metric
1801
+ Enabled: true
1802
+ VersionAdded: '0.27'
1803
+ VersionChanged: '0.66'
1804
+ # The ABC size is a calculated magnitude, so this number can be an Integer or
1805
+ # a Float.
1806
+ Max: 15
1807
+
1808
+ Metrics/BlockLength:
1809
+ Description: 'Avoid long blocks with many lines.'
1810
+ Enabled: true
1811
+ VersionAdded: '0.44'
1812
+ VersionChanged: '0.66'
1813
+ CountComments: false # count full line comments?
1814
+ Max: 25
1815
+ ExcludedMethods:
1816
+ # By default, exclude the `#refine` method, as it tends to have larger
1817
+ # associated blocks.
1818
+ - refine
1819
+ Exclude:
1820
+ - '**/*.gemspec'
1821
+
1822
+ Metrics/BlockNesting:
1823
+ Description: 'Avoid excessive block nesting.'
1824
+ StyleGuide: '#three-is-the-number-thou-shalt-count'
1825
+ Enabled: true
1826
+ VersionAdded: '0.25'
1827
+ VersionChanged: '0.47'
1828
+ CountBlocks: false
1829
+ Max: 3
1830
+
1831
+ Metrics/ClassLength:
1832
+ Description: 'Avoid classes longer than 100 lines of code.'
1833
+ Enabled: true
1834
+ VersionAdded: '0.25'
1835
+ CountComments: false # count full line comments?
1836
+ Max: 100
1837
+
1838
+ # Avoid complex methods.
1839
+ Metrics/CyclomaticComplexity:
1840
+ Description: >-
1841
+ A complexity metric that is strongly correlated to the number
1842
+ of test cases needed to validate a method.
1843
+ Enabled: true
1844
+ VersionAdded: '0.25'
1845
+ Max: 6
1846
+
1847
+ Metrics/MethodLength:
1848
+ Description: 'Avoid methods longer than 10 lines of code.'
1849
+ StyleGuide: '#short-methods'
1850
+ Enabled: true
1851
+ VersionAdded: '0.25'
1852
+ VersionChanged: '0.59.2'
1853
+ CountComments: false # count full line comments?
1854
+ Max: 10
1855
+ ExcludedMethods: []
1856
+
1857
+ Metrics/ModuleLength:
1858
+ Description: 'Avoid modules longer than 100 lines of code.'
1859
+ Enabled: true
1860
+ VersionAdded: '0.31'
1861
+ CountComments: false # count full line comments?
1862
+ Max: 100
1863
+
1864
+ Metrics/ParameterLists:
1865
+ Description: 'Avoid parameter lists longer than three or four parameters.'
1866
+ StyleGuide: '#too-many-params'
1867
+ Enabled: true
1868
+ VersionAdded: '0.25'
1869
+ Max: 5
1870
+ CountKeywordArgs: true
1871
+
1872
+ Metrics/PerceivedComplexity:
1873
+ Description: >-
1874
+ A complexity metric geared towards measuring complexity for a
1875
+ human reader.
1876
+ Enabled: true
1877
+ VersionAdded: '0.25'
1878
+ Max: 7
1879
+
1880
+ ################## Migration #############################
1881
+
1882
+ Migration/DepartmentName:
1883
+ Description: >-
1884
+ Check that cop names in rubocop:disable (etc) comments are
1885
+ given with department name.
1886
+ Enabled: false
1887
+
1888
+ #################### Naming ##############################
1889
+
1890
+ Naming/AccessorMethodName:
1891
+ Description: Check the naming of accessor methods for get_/set_.
1892
+ StyleGuide: '#accessor_mutator_method_names'
1893
+ Enabled: true
1894
+ VersionAdded: '0.50'
1895
+
1896
+ Naming/AsciiIdentifiers:
1897
+ Description: 'Use only ascii symbols in identifiers.'
1898
+ StyleGuide: '#english-identifiers'
1899
+ Enabled: true
1900
+ VersionAdded: '0.50'
1901
+
1902
+ Naming/BinaryOperatorParameterName:
1903
+ Description: 'When defining binary operators, name the argument other.'
1904
+ StyleGuide: '#other-arg'
1905
+ Enabled: true
1906
+ VersionAdded: '0.50'
1907
+
1908
+ Naming/BlockParameterName:
1909
+ Description: >-
1910
+ Checks for block parameter names that contain capital letters,
1911
+ end in numbers, or do not meet a minimal length.
1912
+ Enabled: true
1913
+ VersionAdded: '0.53'
1914
+ VersionChanged: '0.77'
1915
+ # Parameter names may be equal to or greater than this value
1916
+ MinNameLength: 1
1917
+ AllowNamesEndingInNumbers: true
1918
+ # Allowed names that will not register an offense
1919
+ AllowedNames: []
1920
+ # Forbidden names that will register an offense
1921
+ ForbiddenNames: []
1922
+
1923
+ Naming/ClassAndModuleCamelCase:
1924
+ Description: 'Use CamelCase for classes and modules.'
1925
+ StyleGuide: '#camelcase-classes'
1926
+ Enabled: true
1927
+ VersionAdded: '0.50'
1928
+
1929
+ Naming/ConstantName:
1930
+ Description: 'Constants should use SCREAMING_SNAKE_CASE.'
1931
+ StyleGuide: '#screaming-snake-case'
1932
+ Enabled: true
1933
+ VersionAdded: '0.50'
1934
+
1935
+ Naming/FileName:
1936
+ Description: 'Use snake_case for source file names.'
1937
+ StyleGuide: '#snake-case-files'
1938
+ Enabled: true
1939
+ VersionAdded: '0.50'
1940
+ # Camel case file names listed in `AllCops:Include` and all file names listed
1941
+ # in `AllCops:Exclude` are excluded by default. Add extra excludes here.
1942
+ Exclude: []
1943
+ # When `true`, requires that each source file should define a class or module
1944
+ # with a name which matches the file name (converted to ... case).
1945
+ # It further expects it to be nested inside modules which match the names
1946
+ # of subdirectories in its path.
1947
+ ExpectMatchingDefinition: false
1948
+ # If non-`nil`, expect all source file names to match the following regex.
1949
+ # Only the file name itself is matched, not the entire file path.
1950
+ # Use anchors as necessary if you want to match the entire name rather than
1951
+ # just a part of it.
1952
+ Regex: ~
1953
+ # With `IgnoreExecutableScripts` set to `true`, this cop does not
1954
+ # report offending filenames for executable scripts (i.e. source
1955
+ # files with a shebang in the first line).
1956
+ IgnoreExecutableScripts: true
1957
+ AllowedAcronyms:
1958
+ - CLI
1959
+ - DSL
1960
+ - ACL
1961
+ - API
1962
+ - ASCII
1963
+ - CPU
1964
+ - CSS
1965
+ - DNS
1966
+ - EOF
1967
+ - GUID
1968
+ - HTML
1969
+ - HTTP
1970
+ - HTTPS
1971
+ - ID
1972
+ - IP
1973
+ - JSON
1974
+ - LHS
1975
+ - QPS
1976
+ - RAM
1977
+ - RHS
1978
+ - RPC
1979
+ - SLA
1980
+ - SMTP
1981
+ - SQL
1982
+ - SSH
1983
+ - TCP
1984
+ - TLS
1985
+ - TTL
1986
+ - UDP
1987
+ - UI
1988
+ - UID
1989
+ - UUID
1990
+ - URI
1991
+ - URL
1992
+ - UTF8
1993
+ - VM
1994
+ - XML
1995
+ - XMPP
1996
+ - XSRF
1997
+ - XSS
1998
+
1999
+ Naming/HeredocDelimiterCase:
2000
+ Description: 'Use configured case for heredoc delimiters.'
2001
+ StyleGuide: '#heredoc-delimiters'
2002
+ Enabled: true
2003
+ VersionAdded: '0.50'
2004
+ EnforcedStyle: uppercase
2005
+ SupportedStyles:
2006
+ - lowercase
2007
+ - uppercase
2008
+
2009
+ Naming/HeredocDelimiterNaming:
2010
+ Description: 'Use descriptive heredoc delimiters.'
2011
+ StyleGuide: '#heredoc-delimiters'
2012
+ Enabled: true
2013
+ VersionAdded: '0.50'
2014
+ ForbiddenDelimiters:
2015
+ - !ruby/regexp '/(^|\s)(EO[A-Z]{1}|END)(\s|$)/'
2016
+
2017
+ Naming/MemoizedInstanceVariableName:
2018
+ Description: >-
2019
+ Memoized method name should match memo instance variable name.
2020
+ Enabled: true
2021
+ VersionAdded: '0.53'
2022
+ VersionChanged: '0.58'
2023
+ EnforcedStyleForLeadingUnderscores: disallowed
2024
+ SupportedStylesForLeadingUnderscores:
2025
+ - disallowed
2026
+ - required
2027
+ - optional
2028
+
2029
+ Naming/MethodName:
2030
+ Description: 'Use the configured style when naming methods.'
2031
+ StyleGuide: '#snake-case-symbols-methods-vars'
2032
+ Enabled: true
2033
+ VersionAdded: '0.50'
2034
+ EnforcedStyle: snake_case
2035
+ SupportedStyles:
2036
+ - snake_case
2037
+ - camelCase
2038
+ # Method names matching patterns are always allowed.
2039
+ #
2040
+ # IgnoredPatterns:
2041
+ # - '\A\s*onSelectionBulkChange\s*'
2042
+ # - '\A\s*onSelectionCleared\s*'
2043
+ #
2044
+ IgnoredPatterns: []
2045
+
2046
+ Naming/MethodParameterName:
2047
+ Description: >-
2048
+ Checks for method parameter names that contain capital letters,
2049
+ end in numbers, or do not meet a minimal length.
2050
+ Enabled: true
2051
+ VersionAdded: '0.53'
2052
+ VersionChanged: '0.77'
2053
+ # Parameter names may be equal to or greater than this value
2054
+ MinNameLength: 3
2055
+ AllowNamesEndingInNumbers: true
2056
+ # Allowed names that will not register an offense
2057
+ AllowedNames:
2058
+ - io
2059
+ - id
2060
+ - to
2061
+ - by
2062
+ - 'on'
2063
+ - in
2064
+ - at
2065
+ - ip
2066
+ - db
2067
+ - os
2068
+ # Forbidden names that will register an offense
2069
+ ForbiddenNames: []
2070
+
2071
+ Naming/PredicateName:
2072
+ Description: 'Check the names of predicate methods.'
2073
+ StyleGuide: '#bool-methods-qmark'
2074
+ Enabled: true
2075
+ VersionAdded: '0.50'
2076
+ VersionChanged: '0.77'
2077
+ # Predicate name prefixes.
2078
+ NamePrefix:
2079
+ - is_
2080
+ - has_
2081
+ - have_
2082
+ # Predicate name prefixes that should be removed.
2083
+ ForbiddenPrefixes:
2084
+ - is_
2085
+ - has_
2086
+ - have_
2087
+ # Predicate names which, despite having a forbidden prefix, or no `?`,
2088
+ # should still be accepted
2089
+ AllowedMethods:
2090
+ - is_a?
2091
+ # Method definition macros for dynamically generated methods.
2092
+ MethodDefinitionMacros:
2093
+ - define_method
2094
+ - define_singleton_method
2095
+ # Exclude Rspec specs because there is a strong convention to write spec
2096
+ # helpers in the form of `have_something` or `be_something`.
2097
+ Exclude:
2098
+ - 'spec/**/*'
2099
+
2100
+ Naming/RescuedExceptionsVariableName:
2101
+ Description: 'Use consistent rescued exceptions variables naming.'
2102
+ Enabled: true
2103
+ VersionAdded: '0.67'
2104
+ VersionChanged: '0.68'
2105
+ PreferredName: e
2106
+
2107
+ Naming/VariableName:
2108
+ Description: 'Use the configured style when naming variables.'
2109
+ StyleGuide: '#snake-case-symbols-methods-vars'
2110
+ Enabled: true
2111
+ VersionAdded: '0.50'
2112
+ EnforcedStyle: snake_case
2113
+ SupportedStyles:
2114
+ - snake_case
2115
+ - camelCase
2116
+
2117
+ Naming/VariableNumber:
2118
+ Description: 'Use the configured style when numbering variables.'
2119
+ Enabled: true
2120
+ VersionAdded: '0.50'
2121
+ EnforcedStyle: normalcase
2122
+ SupportedStyles:
2123
+ - snake_case
2124
+ - normalcase
2125
+ - non_integer
2126
+
2127
+ #################### Security ##############################
2128
+
2129
+ Security/Eval:
2130
+ Description: 'The use of eval represents a serious security risk.'
2131
+ Enabled: true
2132
+ VersionAdded: '0.47'
2133
+
2134
+ Security/JSONLoad:
2135
+ Description: >-
2136
+ Prefer usage of `JSON.parse` over `JSON.load` due to potential
2137
+ security issues. See reference for more information.
2138
+ Reference: 'https://ruby-doc.org/stdlib-2.3.0/libdoc/json/rdoc/JSON.html#method-i-load'
2139
+ Enabled: true
2140
+ VersionAdded: '0.43'
2141
+ VersionChanged: '0.44'
2142
+ # Autocorrect here will change to a method that may cause crashes depending
2143
+ # on the value of the argument.
2144
+ AutoCorrect: false
2145
+ SafeAutoCorrect: false
2146
+
2147
+ Security/MarshalLoad:
2148
+ Description: >-
2149
+ Avoid using of `Marshal.load` or `Marshal.restore` due to potential
2150
+ security issues. See reference for more information.
2151
+ Reference: 'https://ruby-doc.org/core-2.3.3/Marshal.html#module-Marshal-label-Security+considerations'
2152
+ Enabled: true
2153
+ VersionAdded: '0.47'
2154
+
2155
+ Security/Open:
2156
+ Description: 'The use of Kernel#open represents a serious security risk.'
2157
+ Enabled: true
2158
+ VersionAdded: '0.53'
2159
+ Safe: false
2160
+
2161
+ Security/YAMLLoad:
2162
+ Description: >-
2163
+ Prefer usage of `YAML.safe_load` over `YAML.load` due to potential
2164
+ security issues. See reference for more information.
2165
+ Reference: 'https://ruby-doc.org/stdlib-2.3.3/libdoc/yaml/rdoc/YAML.html#module-YAML-label-Security'
2166
+ Enabled: true
2167
+ VersionAdded: '0.47'
2168
+ SafeAutoCorrect: false
2169
+
2170
+ #################### Style ###############################
2171
+
2172
+ Style/AccessModifierDeclarations:
2173
+ Description: 'Checks style of how access modifiers are used.'
2174
+ Enabled: true
2175
+ VersionAdded: '0.57'
2176
+ EnforcedStyle: group
2177
+ SupportedStyles:
2178
+ - inline
2179
+ - group
2180
+
2181
+ Style/Alias:
2182
+ Description: 'Use alias instead of alias_method.'
2183
+ StyleGuide: '#alias-method-lexically'
2184
+ Enabled: true
2185
+ VersionAdded: '0.9'
2186
+ VersionChanged: '0.36'
2187
+ EnforcedStyle: prefer_alias
2188
+ SupportedStyles:
2189
+ - prefer_alias
2190
+ - prefer_alias_method
2191
+
2192
+ Style/AndOr:
2193
+ Description: 'Use &&/|| instead of and/or.'
2194
+ StyleGuide: '#no-and-or-or'
2195
+ Enabled: true
2196
+ VersionAdded: '0.9'
2197
+ VersionChanged: '0.25'
2198
+ # Whether `and` and `or` are banned only in conditionals (conditionals)
2199
+ # or completely (always).
2200
+ EnforcedStyle: always
2201
+ SupportedStyles:
2202
+ - always
2203
+ - conditionals
2204
+
2205
+ Style/ArrayJoin:
2206
+ Description: 'Use Array#join instead of Array#*.'
2207
+ StyleGuide: '#array-join'
2208
+ Enabled: true
2209
+ VersionAdded: '0.20'
2210
+ VersionChanged: '0.31'
2211
+
2212
+ Style/AsciiComments:
2213
+ Description: 'Use only ascii symbols in comments.'
2214
+ StyleGuide: '#english-comments'
2215
+ Enabled: true
2216
+ VersionAdded: '0.9'
2217
+ VersionChanged: '0.52'
2218
+ AllowedChars: []
2219
+
2220
+ Style/Attr:
2221
+ Description: 'Checks for uses of Module#attr.'
2222
+ StyleGuide: '#attr'
2223
+ Enabled: true
2224
+ VersionAdded: '0.9'
2225
+ VersionChanged: '0.12'
2226
+
2227
+ Style/AutoResourceCleanup:
2228
+ Description: 'Suggests the usage of an auto resource cleanup version of a method (if available).'
2229
+ Enabled: false
2230
+ VersionAdded: '0.30'
2231
+
2232
+ Style/BarePercentLiterals:
2233
+ Description: 'Checks if usage of %() or %Q() matches configuration.'
2234
+ StyleGuide: '#percent-q-shorthand'
2235
+ Enabled: true
2236
+ VersionAdded: '0.25'
2237
+ EnforcedStyle: bare_percent
2238
+ SupportedStyles:
2239
+ - percent_q
2240
+ - bare_percent
2241
+
2242
+ Style/BeginBlock:
2243
+ Description: 'Avoid the use of BEGIN blocks.'
2244
+ StyleGuide: '#no-BEGIN-blocks'
2245
+ Enabled: true
2246
+ VersionAdded: '0.9'
2247
+
2248
+ Style/BlockComments:
2249
+ Description: 'Do not use block comments.'
2250
+ StyleGuide: '#no-block-comments'
2251
+ Enabled: true
2252
+ VersionAdded: '0.9'
2253
+ VersionChanged: '0.23'
2254
+
2255
+ Style/BlockDelimiters:
2256
+ Description: >-
2257
+ Avoid using {...} for multi-line blocks (multiline chaining is
2258
+ always ugly).
2259
+ Prefer {...} over do...end for single-line blocks.
2260
+ StyleGuide: '#single-line-blocks'
2261
+ Enabled: true
2262
+ VersionAdded: '0.30'
2263
+ VersionChanged: '0.35'
2264
+ EnforcedStyle: line_count_based
2265
+ SupportedStyles:
2266
+ # The `line_count_based` style enforces braces around single line blocks and
2267
+ # do..end around multi-line blocks.
2268
+ - line_count_based
2269
+ # The `semantic` style enforces braces around functional blocks, where the
2270
+ # primary purpose of the block is to return a value and do..end for
2271
+ # multi-line procedural blocks, where the primary purpose of the block is
2272
+ # its side-effects. Single-line procedural blocks may only use do-end,
2273
+ # unless AllowBracesOnProceduralOneLiners has a truthy value (see below).
2274
+ #
2275
+ # This looks at the usage of a block's method to determine its type (e.g. is
2276
+ # the result of a `map` assigned to a variable or passed to another
2277
+ # method) but exceptions are permitted in the `ProceduralMethods`,
2278
+ # `FunctionalMethods` and `IgnoredMethods` sections below.
2279
+ - semantic
2280
+ # The `braces_for_chaining` style enforces braces around single line blocks
2281
+ # and do..end around multi-line blocks, except for multi-line blocks whose
2282
+ # return value is being chained with another method (in which case braces
2283
+ # are enforced).
2284
+ - braces_for_chaining
2285
+ # The `always_braces` style always enforces braces.
2286
+ - always_braces
2287
+ ProceduralMethods:
2288
+ # Methods that are known to be procedural in nature but look functional from
2289
+ # their usage, e.g.
2290
+ #
2291
+ # time = Benchmark.realtime do
2292
+ # foo.bar
2293
+ # end
2294
+ #
2295
+ # Here, the return value of the block is discarded but the return value of
2296
+ # `Benchmark.realtime` is used.
2297
+ - benchmark
2298
+ - bm
2299
+ - bmbm
2300
+ - create
2301
+ - each_with_object
2302
+ - measure
2303
+ - new
2304
+ - realtime
2305
+ - tap
2306
+ - with_object
2307
+ FunctionalMethods:
2308
+ # Methods that are known to be functional in nature but look procedural from
2309
+ # their usage, e.g.
2310
+ #
2311
+ # let(:foo) { Foo.new }
2312
+ #
2313
+ # Here, the return value of `Foo.new` is used to define a `foo` helper but
2314
+ # doesn't appear to be used from the return value of `let`.
2315
+ - let
2316
+ - let!
2317
+ - subject
2318
+ - watch
2319
+ IgnoredMethods:
2320
+ # Methods that can be either procedural or functional and cannot be
2321
+ # categorised from their usage alone, e.g.
2322
+ #
2323
+ # foo = lambda do |x|
2324
+ # puts "Hello, #{x}"
2325
+ # end
2326
+ #
2327
+ # foo = lambda do |x|
2328
+ # x * 100
2329
+ # end
2330
+ #
2331
+ # Here, it is impossible to tell from the return value of `lambda` whether
2332
+ # the inner block's return value is significant.
2333
+ - lambda
2334
+ - proc
2335
+ - it
2336
+ # The AllowBracesOnProceduralOneLiners option is ignored unless the
2337
+ # EnforcedStyle is set to `semantic`. If so:
2338
+ #
2339
+ # If AllowBracesOnProceduralOneLiners is unspecified, or set to any
2340
+ # falsey value, then semantic purity is maintained, so one-line
2341
+ # procedural blocks must use do-end, not braces.
2342
+ #
2343
+ # # bad
2344
+ # collection.each { |element| puts element }
2345
+ #
2346
+ # # good
2347
+ # collection.each do |element| puts element end
2348
+ #
2349
+ # If AllowBracesOnProceduralOneLiners is set to any truthy value,
2350
+ # then one-line procedural blocks may use either style.
2351
+ #
2352
+ # # good
2353
+ # collection.each { |element| puts element }
2354
+ #
2355
+ # # also good
2356
+ # collection.each do |element| puts element end
2357
+ AllowBracesOnProceduralOneLiners: false
2358
+
2359
+ Style/BracesAroundHashParameters:
2360
+ Description: 'Enforce braces style around hash parameters.'
2361
+ Enabled: true
2362
+ VersionAdded: '0.14.1'
2363
+ VersionChanged: '0.28'
2364
+ EnforcedStyle: no_braces
2365
+ SupportedStyles:
2366
+ # The `braces` style enforces braces around all method parameters that are
2367
+ # hashes.
2368
+ - braces
2369
+ # The `no_braces` style checks that the last parameter doesn't have braces
2370
+ # around it.
2371
+ - no_braces
2372
+ # The `context_dependent` style checks that the last parameter doesn't have
2373
+ # braces around it, but requires braces if the second to last parameter is
2374
+ # also a hash literal.
2375
+ - context_dependent
2376
+
2377
+ Style/CaseEquality:
2378
+ Description: 'Avoid explicit use of the case equality operator(===).'
2379
+ StyleGuide: '#no-case-equality'
2380
+ Enabled: true
2381
+ VersionAdded: '0.9'
2382
+
2383
+ Style/CharacterLiteral:
2384
+ Description: 'Checks for uses of character literals.'
2385
+ StyleGuide: '#no-character-literals'
2386
+ Enabled: true
2387
+ VersionAdded: '0.9'
2388
+
2389
+ Style/ClassAndModuleChildren:
2390
+ Description: 'Checks style of children classes and modules.'
2391
+ StyleGuide: '#namespace-definition'
2392
+ # Moving from compact to nested children requires knowledge of whether the
2393
+ # outer parent is a module or a class. Moving from nested to compact requires
2394
+ # verification that the outer parent is defined elsewhere. Rubocop does not
2395
+ # have the knowledge to perform either operation safely and thus requires
2396
+ # manual oversight.
2397
+ SafeAutoCorrect: false
2398
+ AutoCorrect: false
2399
+ Enabled: true
2400
+ VersionAdded: '0.19'
2401
+ #
2402
+ # Basically there are two different styles:
2403
+ #
2404
+ # `nested` - have each child on a separate line
2405
+ # class Foo
2406
+ # class Bar
2407
+ # end
2408
+ # end
2409
+ #
2410
+ # `compact` - combine definitions as much as possible
2411
+ # class Foo::Bar
2412
+ # end
2413
+ #
2414
+ # The compact style is only forced, for classes or modules with one child.
2415
+ EnforcedStyle: nested
2416
+ SupportedStyles:
2417
+ - nested
2418
+ - compact
2419
+
2420
+ Style/ClassCheck:
2421
+ Description: 'Enforces consistent use of `Object#is_a?` or `Object#kind_of?`.'
2422
+ Enabled: true
2423
+ VersionAdded: '0.24'
2424
+ EnforcedStyle: is_a?
2425
+ SupportedStyles:
2426
+ - is_a?
2427
+ - kind_of?
2428
+
2429
+ Style/ClassMethods:
2430
+ Description: 'Use self when defining module/class methods.'
2431
+ StyleGuide: '#def-self-class-methods'
2432
+ Enabled: true
2433
+ VersionAdded: '0.9'
2434
+ VersionChanged: '0.20'
2435
+
2436
+ Style/ClassVars:
2437
+ Description: 'Avoid the use of class variables.'
2438
+ StyleGuide: '#no-class-vars'
2439
+ Enabled: true
2440
+ VersionAdded: '0.13'
2441
+
2442
+ # Align with the style guide.
2443
+ Style/CollectionMethods:
2444
+ Description: 'Preferred collection methods.'
2445
+ StyleGuide: '#map-find-select-reduce-size'
2446
+ Enabled: false
2447
+ VersionAdded: '0.9'
2448
+ VersionChanged: '0.27'
2449
+ Safe: false
2450
+ # Mapping from undesired method to desired method
2451
+ # e.g. to use `detect` over `find`:
2452
+ #
2453
+ # Style/CollectionMethods:
2454
+ # PreferredMethods:
2455
+ # find: detect
2456
+ PreferredMethods:
2457
+ collect: 'map'
2458
+ collect!: 'map!'
2459
+ inject: 'reduce'
2460
+ detect: 'find'
2461
+ find_all: 'select'
2462
+
2463
+ Style/ColonMethodCall:
2464
+ Description: 'Do not use :: for method call.'
2465
+ StyleGuide: '#double-colons'
2466
+ Enabled: true
2467
+ VersionAdded: '0.9'
2468
+
2469
+ Style/ColonMethodDefinition:
2470
+ Description: 'Do not use :: for defining class methods.'
2471
+ StyleGuide: '#colon-method-definition'
2472
+ Enabled: true
2473
+ VersionAdded: '0.52'
2474
+
2475
+ Style/CommandLiteral:
2476
+ Description: 'Use `` or %x around command literals.'
2477
+ StyleGuide: '#percent-x'
2478
+ Enabled: true
2479
+ VersionAdded: '0.30'
2480
+ EnforcedStyle: backticks
2481
+ # backticks: Always use backticks.
2482
+ # percent_x: Always use `%x`.
2483
+ # mixed: Use backticks on single-line commands, and `%x` on multi-line commands.
2484
+ SupportedStyles:
2485
+ - backticks
2486
+ - percent_x
2487
+ - mixed
2488
+ # If `false`, the cop will always recommend using `%x` if one or more backticks
2489
+ # are found in the command string.
2490
+ AllowInnerBackticks: false
2491
+
2492
+ # Checks formatting of special comments
2493
+ Style/CommentAnnotation:
2494
+ Description: >-
2495
+ Checks formatting of special comments
2496
+ (TODO, FIXME, OPTIMIZE, HACK, REVIEW).
2497
+ StyleGuide: '#annotate-keywords'
2498
+ Enabled: true
2499
+ VersionAdded: '0.10'
2500
+ VersionChanged: '0.31'
2501
+ Keywords:
2502
+ - TODO
2503
+ - FIXME
2504
+ - OPTIMIZE
2505
+ - HACK
2506
+ - REVIEW
2507
+
2508
+ Style/CommentedKeyword:
2509
+ Description: 'Do not place comments on the same line as certain keywords.'
2510
+ Enabled: true
2511
+ VersionAdded: '0.51'
2512
+
2513
+ Style/ConditionalAssignment:
2514
+ Description: >-
2515
+ Use the return value of `if` and `case` statements for
2516
+ assignment to a variable and variable comparison instead
2517
+ of assigning that variable inside of each branch.
2518
+ Enabled: true
2519
+ VersionAdded: '0.36'
2520
+ VersionChanged: '0.47'
2521
+ EnforcedStyle: assign_to_condition
2522
+ SupportedStyles:
2523
+ - assign_to_condition
2524
+ - assign_inside_condition
2525
+ # When configured to `assign_to_condition`, `SingleLineConditionsOnly`
2526
+ # will only register an offense when all branches of a condition are
2527
+ # a single line.
2528
+ # When configured to `assign_inside_condition`, `SingleLineConditionsOnly`
2529
+ # will only register an offense for assignment to a condition that has
2530
+ # at least one multiline branch.
2531
+ SingleLineConditionsOnly: true
2532
+ IncludeTernaryExpressions: true
2533
+
2534
+ Style/ConstantVisibility:
2535
+ Description: >-
2536
+ Check that class- and module constants have
2537
+ visibility declarations.
2538
+ Enabled: false
2539
+ VersionAdded: '0.66'
2540
+
2541
+ # Checks that you have put a copyright in a comment before any code.
2542
+ #
2543
+ # You can override the default Notice in your .rubocop.yml file.
2544
+ #
2545
+ # In order to use autocorrect, you must supply a value for the
2546
+ # `AutocorrectNotice` key that matches the regexp Notice. A blank
2547
+ # `AutocorrectNotice` will cause an error during autocorrect.
2548
+ #
2549
+ # Autocorrect will add a copyright notice in a comment at the top
2550
+ # of the file immediately after any shebang or encoding comments.
2551
+ #
2552
+ # Example rubocop.yml:
2553
+ #
2554
+ # Style/Copyright:
2555
+ # Enabled: true
2556
+ # Notice: 'Copyright (\(c\) )?2015 Yahoo! Inc'
2557
+ # AutocorrectNotice: '# Copyright (c) 2015 Yahoo! Inc.'
2558
+ #
2559
+ Style/Copyright:
2560
+ Description: 'Include a copyright notice in each file before any code.'
2561
+ Enabled: false
2562
+ VersionAdded: '0.30'
2563
+ Notice: '^Copyright (\(c\) )?2[0-9]{3} .+'
2564
+ AutocorrectNotice: ''
2565
+
2566
+ Style/DateTime:
2567
+ Description: 'Use Time over DateTime.'
2568
+ StyleGuide: '#date--time'
2569
+ Enabled: false
2570
+ VersionAdded: '0.51'
2571
+ VersionChanged: '0.59'
2572
+ AllowCoercion: false
2573
+
2574
+ Style/DefWithParentheses:
2575
+ Description: 'Use def with parentheses when there are arguments.'
2576
+ StyleGuide: '#method-parens'
2577
+ Enabled: true
2578
+ VersionAdded: '0.9'
2579
+ VersionChanged: '0.12'
2580
+
2581
+ Style/Dir:
2582
+ Description: >-
2583
+ Use the `__dir__` method to retrieve the canonicalized
2584
+ absolute path to the current file.
2585
+ Enabled: true
2586
+ VersionAdded: '0.50'
2587
+
2588
+ Style/Documentation:
2589
+ Description: 'Document classes and non-namespace modules.'
2590
+ Enabled: true
2591
+ VersionAdded: '0.9'
2592
+ Exclude:
2593
+ - 'spec/**/*'
2594
+ - 'test/**/*'
2595
+
2596
+ Style/DocumentationMethod:
2597
+ Description: 'Checks for missing documentation comment for public methods.'
2598
+ Enabled: false
2599
+ VersionAdded: '0.43'
2600
+ Exclude:
2601
+ - 'spec/**/*'
2602
+ - 'test/**/*'
2603
+ RequireForNonPublicMethods: false
2604
+
2605
+ Style/DoubleCopDisableDirective:
2606
+ Description: 'Checks for double rubocop:disable comments on a single line.'
2607
+ Enabled: true
2608
+ VersionAdded: '0.73'
2609
+
2610
+ Style/DoubleNegation:
2611
+ Description: 'Checks for uses of double negation (!!).'
2612
+ StyleGuide: '#no-bang-bang'
2613
+ Enabled: true
2614
+ VersionAdded: '0.19'
2615
+
2616
+ Style/EachForSimpleLoop:
2617
+ Description: >-
2618
+ Use `Integer#times` for a simple loop which iterates a fixed
2619
+ number of times.
2620
+ Enabled: true
2621
+ VersionAdded: '0.41'
2622
+
2623
+ Style/EachWithObject:
2624
+ Description: 'Prefer `each_with_object` over `inject` or `reduce`.'
2625
+ Enabled: true
2626
+ VersionAdded: '0.22'
2627
+ VersionChanged: '0.42'
2628
+
2629
+ Style/EmptyBlockParameter:
2630
+ Description: 'Omit pipes for empty block parameters.'
2631
+ Enabled: true
2632
+ VersionAdded: '0.52'
2633
+
2634
+ Style/EmptyCaseCondition:
2635
+ Description: 'Avoid empty condition in case statements.'
2636
+ Enabled: true
2637
+ VersionAdded: '0.40'
2638
+
2639
+ Style/EmptyElse:
2640
+ Description: 'Avoid empty else-clauses.'
2641
+ Enabled: true
2642
+ VersionAdded: '0.28'
2643
+ VersionChanged: '0.32'
2644
+ EnforcedStyle: both
2645
+ # empty - warn only on empty `else`
2646
+ # nil - warn on `else` with nil in it
2647
+ # both - warn on empty `else` and `else` with `nil` in it
2648
+ SupportedStyles:
2649
+ - empty
2650
+ - nil
2651
+ - both
2652
+
2653
+ Style/EmptyLambdaParameter:
2654
+ Description: 'Omit parens for empty lambda parameters.'
2655
+ Enabled: true
2656
+ VersionAdded: '0.52'
2657
+
2658
+ Style/EmptyLiteral:
2659
+ Description: 'Prefer literals to Array.new/Hash.new/String.new.'
2660
+ StyleGuide: '#literal-array-hash'
2661
+ Enabled: true
2662
+ VersionAdded: '0.9'
2663
+ VersionChanged: '0.12'
2664
+
2665
+ Style/EmptyMethod:
2666
+ Description: 'Checks the formatting of empty method definitions.'
2667
+ StyleGuide: '#no-single-line-methods'
2668
+ Enabled: true
2669
+ VersionAdded: '0.46'
2670
+ EnforcedStyle: compact
2671
+ SupportedStyles:
2672
+ - compact
2673
+ - expanded
2674
+
2675
+ Style/Encoding:
2676
+ Description: 'Use UTF-8 as the source file encoding.'
2677
+ StyleGuide: '#utf-8'
2678
+ Enabled: true
2679
+ VersionAdded: '0.9'
2680
+ VersionChanged: '0.50'
2681
+
2682
+ Style/EndBlock:
2683
+ Description: 'Avoid the use of END blocks.'
2684
+ StyleGuide: '#no-END-blocks'
2685
+ Enabled: true
2686
+ VersionAdded: '0.9'
2687
+
2688
+ Style/EvalWithLocation:
2689
+ Description: 'Pass `__FILE__` and `__LINE__` to `eval` method, as they are used by backtraces.'
2690
+ Enabled: true
2691
+ VersionAdded: '0.52'
2692
+
2693
+ Style/EvenOdd:
2694
+ Description: 'Favor the use of `Integer#even?` && `Integer#odd?`.'
2695
+ StyleGuide: '#predicate-methods'
2696
+ Enabled: true
2697
+ VersionAdded: '0.12'
2698
+ VersionChanged: '0.29'
2699
+
2700
+ Style/ExpandPathArguments:
2701
+ Description: "Use `expand_path(__dir__)` instead of `expand_path('..', __FILE__)`."
2702
+ Enabled: true
2703
+ VersionAdded: '0.53'
2704
+
2705
+ Style/FloatDivision:
2706
+ Description: 'For performing float division, coerce one side only.'
2707
+ StyleGuide: '#float-division'
2708
+ Reference: 'https://github.com/rubocop-hq/ruby-style-guide/issues/628'
2709
+ Enabled: true
2710
+ VersionAdded: '0.72'
2711
+ EnforcedStyle: single_coerce
2712
+ SupportedStyles:
2713
+ - left_coerce
2714
+ - right_coerce
2715
+ - single_coerce
2716
+ - fdiv
2717
+
2718
+ Style/For:
2719
+ Description: 'Checks use of for or each in multiline loops.'
2720
+ StyleGuide: '#no-for-loops'
2721
+ Enabled: true
2722
+ VersionAdded: '0.13'
2723
+ VersionChanged: '0.59'
2724
+ EnforcedStyle: each
2725
+ SupportedStyles:
2726
+ - each
2727
+ - for
2728
+
2729
+ Style/FormatString:
2730
+ Description: 'Enforce the use of Kernel#sprintf, Kernel#format or String#%.'
2731
+ StyleGuide: '#sprintf'
2732
+ Enabled: true
2733
+ VersionAdded: '0.19'
2734
+ VersionChanged: '0.49'
2735
+ EnforcedStyle: format
2736
+ SupportedStyles:
2737
+ - format
2738
+ - sprintf
2739
+ - percent
2740
+
2741
+ Style/FormatStringToken:
2742
+ Description: 'Use a consistent style for format string tokens.'
2743
+ Enabled: true
2744
+ EnforcedStyle: annotated
2745
+ SupportedStyles:
2746
+ # Prefer tokens which contain a sprintf like type annotation like
2747
+ # `%<name>s`, `%<age>d`, `%<score>f`
2748
+ - annotated
2749
+ # Prefer simple looking "template" style tokens like `%{name}`, `%{age}`
2750
+ - template
2751
+ - unannotated
2752
+ VersionAdded: '0.49'
2753
+ VersionChanged: '0.75'
2754
+
2755
+ Style/FrozenStringLiteralComment:
2756
+ Description: >-
2757
+ Add the frozen_string_literal comment to the top of files
2758
+ to help transition to frozen string literals by default.
2759
+ Enabled: true
2760
+ VersionAdded: '0.36'
2761
+ VersionChanged: '0.69'
2762
+ EnforcedStyle: always
2763
+ SupportedStyles:
2764
+ # `always` will always add the frozen string literal comment to a file
2765
+ # regardless of the Ruby version or if `freeze` or `<<` are called on a
2766
+ # string literal. If you run code against multiple versions of Ruby, it is
2767
+ # possible that this will create errors in Ruby 2.3.0+.
2768
+ - always
2769
+ # `never` will enforce that the frozen string literal comment does not
2770
+ # exist in a file.
2771
+ - never
2772
+
2773
+ Style/GlobalVars:
2774
+ Description: 'Do not introduce global variables.'
2775
+ StyleGuide: '#instance-vars'
2776
+ Reference: 'https://www.zenspider.com/ruby/quickref.html'
2777
+ Enabled: true
2778
+ VersionAdded: '0.13'
2779
+ # Built-in global variables are allowed by default.
2780
+ AllowedVariables: []
2781
+
2782
+ Style/GuardClause:
2783
+ Description: 'Check for conditionals that can be replaced with guard clauses.'
2784
+ StyleGuide: '#no-nested-conditionals'
2785
+ Enabled: true
2786
+ VersionAdded: '0.20'
2787
+ VersionChanged: '0.22'
2788
+ # `MinBodyLength` defines the number of lines of the a body of an `if` or `unless`
2789
+ # needs to have to trigger this cop
2790
+ MinBodyLength: 1
2791
+
2792
+ Style/HashSyntax:
2793
+ Description: >-
2794
+ Prefer Ruby 1.9 hash syntax { a: 1, b: 2 } over 1.8 syntax
2795
+ { :a => 1, :b => 2 }.
2796
+ StyleGuide: '#hash-literals'
2797
+ Enabled: true
2798
+ VersionAdded: '0.9'
2799
+ VersionChanged: '0.43'
2800
+ EnforcedStyle: ruby19
2801
+ SupportedStyles:
2802
+ # checks for 1.9 syntax (e.g. {a: 1}) for all symbol keys
2803
+ - ruby19
2804
+ # checks for hash rocket syntax for all hashes
2805
+ - hash_rockets
2806
+ # forbids mixed key syntaxes (e.g. {a: 1, :b => 2})
2807
+ - no_mixed_keys
2808
+ # enforces both ruby19 and no_mixed_keys styles
2809
+ - ruby19_no_mixed_keys
2810
+ # Force hashes that have a symbol value to use hash rockets
2811
+ UseHashRocketsWithSymbolValues: false
2812
+ # Do not suggest { a?: 1 } over { :a? => 1 } in ruby19 style
2813
+ PreferHashRocketsForNonAlnumEndingSymbols: false
2814
+
2815
+ Style/IdenticalConditionalBranches:
2816
+ Description: >-
2817
+ Checks that conditional statements do not have an identical
2818
+ line at the end of each branch, which can validly be moved
2819
+ out of the conditional.
2820
+ Enabled: true
2821
+ VersionAdded: '0.36'
2822
+
2823
+ Style/IfInsideElse:
2824
+ Description: 'Finds if nodes inside else, which can be converted to elsif.'
2825
+ Enabled: true
2826
+ AllowIfModifier: false
2827
+ VersionAdded: '0.36'
2828
+
2829
+ Style/IfUnlessModifier:
2830
+ Description: >-
2831
+ Favor modifier if/unless usage when you have a
2832
+ single-line body.
2833
+ StyleGuide: '#if-as-a-modifier'
2834
+ Enabled: true
2835
+ VersionAdded: '0.9'
2836
+ VersionChanged: '0.30'
2837
+
2838
+ Style/IfUnlessModifierOfIfUnless:
2839
+ Description: >-
2840
+ Avoid modifier if/unless usage on conditionals.
2841
+ Enabled: true
2842
+ VersionAdded: '0.39'
2843
+
2844
+ Style/IfWithSemicolon:
2845
+ Description: 'Do not use if x; .... Use the ternary operator instead.'
2846
+ StyleGuide: '#no-semicolon-ifs'
2847
+ Enabled: true
2848
+ VersionAdded: '0.9'
2849
+
2850
+ Style/ImplicitRuntimeError:
2851
+ Description: >-
2852
+ Use `raise` or `fail` with an explicit exception class and
2853
+ message, rather than just a message.
2854
+ Enabled: false
2855
+ VersionAdded: '0.41'
2856
+
2857
+ Style/InfiniteLoop:
2858
+ Description: 'Use Kernel#loop for infinite loops.'
2859
+ StyleGuide: '#infinite-loop'
2860
+ Enabled: true
2861
+ VersionAdded: '0.26'
2862
+ VersionChanged: '0.61'
2863
+ SafeAutoCorrect: true
2864
+
2865
+ Style/InlineComment:
2866
+ Description: 'Avoid trailing inline comments.'
2867
+ Enabled: false
2868
+ VersionAdded: '0.23'
2869
+
2870
+ Style/InverseMethods:
2871
+ Description: >-
2872
+ Use the inverse method instead of `!.method`
2873
+ if an inverse method is defined.
2874
+ Enabled: true
2875
+ Safe: false
2876
+ VersionAdded: '0.48'
2877
+ # `InverseMethods` are methods that can be inverted by a not (`not` or `!`)
2878
+ # The relationship of inverse methods only needs to be defined in one direction.
2879
+ # Keys and values both need to be defined as symbols.
2880
+ InverseMethods:
2881
+ :any?: :none?
2882
+ :even?: :odd?
2883
+ :==: :!=
2884
+ :=~: :!~
2885
+ :<: :>=
2886
+ :>: :<=
2887
+ # `ActiveSupport` defines some common inverse methods. They are listed below,
2888
+ # and not enabled by default.
2889
+ #:present?: :blank?,
2890
+ #:include?: :exclude?
2891
+ # `InverseBlocks` are methods that are inverted by inverting the return
2892
+ # of the block that is passed to the method
2893
+ InverseBlocks:
2894
+ :select: :reject
2895
+ :select!: :reject!
2896
+
2897
+ Style/IpAddresses:
2898
+ Description: "Don't include literal IP addresses in code."
2899
+ Enabled: false
2900
+ VersionAdded: '0.58'
2901
+ VersionChanged: '0.77'
2902
+ # Allow addresses to be permitted
2903
+ AllowedAddresses:
2904
+ - "::"
2905
+ # :: is a valid IPv6 address, but could potentially be legitimately in code
2906
+
2907
+ Style/Lambda:
2908
+ Description: 'Use the new lambda literal syntax for single-line blocks.'
2909
+ StyleGuide: '#lambda-multi-line'
2910
+ Enabled: true
2911
+ VersionAdded: '0.9'
2912
+ VersionChanged: '0.40'
2913
+ EnforcedStyle: line_count_dependent
2914
+ SupportedStyles:
2915
+ - line_count_dependent
2916
+ - lambda
2917
+ - literal
2918
+
2919
+ Style/LambdaCall:
2920
+ Description: 'Use lambda.call(...) instead of lambda.(...).'
2921
+ StyleGuide: '#proc-call'
2922
+ Enabled: true
2923
+ VersionAdded: '0.13.1'
2924
+ VersionChanged: '0.14'
2925
+ EnforcedStyle: call
2926
+ SupportedStyles:
2927
+ - call
2928
+ - braces
2929
+
2930
+ Style/LineEndConcatenation:
2931
+ Description: >-
2932
+ Use \ instead of + or << to concatenate two string literals at
2933
+ line end.
2934
+ Enabled: true
2935
+ SafeAutoCorrect: false
2936
+ VersionAdded: '0.18'
2937
+ VersionChanged: '0.64'
2938
+
2939
+ Style/MethodCallWithArgsParentheses:
2940
+ Description: 'Use parentheses for method calls with arguments.'
2941
+ StyleGuide: '#method-invocation-parens'
2942
+ Enabled: false
2943
+ VersionAdded: '0.47'
2944
+ VersionChanged: '0.61'
2945
+ IgnoreMacros: true
2946
+ IgnoredMethods: []
2947
+ IgnoredPatterns: []
2948
+ IncludedMacros: []
2949
+ AllowParenthesesInMultilineCall: false
2950
+ AllowParenthesesInChaining: false
2951
+ AllowParenthesesInCamelCaseMethod: false
2952
+ EnforcedStyle: require_parentheses
2953
+ SupportedStyles:
2954
+ - require_parentheses
2955
+ - omit_parentheses
2956
+
2957
+ Style/MethodCallWithoutArgsParentheses:
2958
+ Description: 'Do not use parentheses for method calls with no arguments.'
2959
+ StyleGuide: '#method-invocation-parens'
2960
+ Enabled: true
2961
+ IgnoredMethods: []
2962
+ VersionAdded: '0.47'
2963
+ VersionChanged: '0.55'
2964
+
2965
+ Style/MethodCalledOnDoEndBlock:
2966
+ Description: 'Avoid chaining a method call on a do...end block.'
2967
+ StyleGuide: '#single-line-blocks'
2968
+ Enabled: false
2969
+ VersionAdded: '0.14'
2970
+
2971
+ Style/MethodDefParentheses:
2972
+ Description: >-
2973
+ Checks if the method definitions have or don't have
2974
+ parentheses.
2975
+ StyleGuide: '#method-parens'
2976
+ Enabled: true
2977
+ VersionAdded: '0.16'
2978
+ VersionChanged: '0.35'
2979
+ EnforcedStyle: require_parentheses
2980
+ SupportedStyles:
2981
+ - require_parentheses
2982
+ - require_no_parentheses
2983
+ - require_no_parentheses_except_multiline
2984
+
2985
+ Style/MethodMissingSuper:
2986
+ Description: Checks for `method_missing` to call `super`.
2987
+ StyleGuide: '#no-method-missing'
2988
+ Enabled: true
2989
+ VersionAdded: '0.56'
2990
+
2991
+ Style/MinMax:
2992
+ Description: >-
2993
+ Use `Enumerable#minmax` instead of `Enumerable#min`
2994
+ and `Enumerable#max` in conjunction.
2995
+ Enabled: true
2996
+ VersionAdded: '0.50'
2997
+
2998
+ Style/MissingElse:
2999
+ Description: >-
3000
+ Require if/case expressions to have an else branches.
3001
+ If enabled, it is recommended that
3002
+ Style/UnlessElse and Style/EmptyElse be enabled.
3003
+ This will conflict with Style/EmptyElse if
3004
+ Style/EmptyElse is configured to style "both".
3005
+ Enabled: false
3006
+ VersionAdded: '0.30'
3007
+ VersionChanged: '0.38'
3008
+ EnforcedStyle: both
3009
+ SupportedStyles:
3010
+ # if - warn when an if expression is missing an else branch
3011
+ # case - warn when a case expression is missing an else branch
3012
+ # both - warn when an if or case expression is missing an else branch
3013
+ - if
3014
+ - case
3015
+ - both
3016
+
3017
+ Style/MissingRespondToMissing:
3018
+ Description: >-
3019
+ Checks if `method_missing` is implemented
3020
+ without implementing `respond_to_missing`.
3021
+ StyleGuide: '#no-method-missing'
3022
+ Enabled: true
3023
+ VersionAdded: '0.56'
3024
+
3025
+ Style/MixinGrouping:
3026
+ Description: 'Checks for grouping of mixins in `class` and `module` bodies.'
3027
+ StyleGuide: '#mixin-grouping'
3028
+ Enabled: true
3029
+ VersionAdded: '0.48'
3030
+ VersionChanged: '0.49'
3031
+ EnforcedStyle: separated
3032
+ SupportedStyles:
3033
+ # separated: each mixed in module goes in a separate statement.
3034
+ # grouped: mixed in modules are grouped into a single statement.
3035
+ - separated
3036
+ - grouped
3037
+
3038
+ Style/MixinUsage:
3039
+ Description: 'Checks that `include`, `extend` and `prepend` exists at the top level.'
3040
+ Enabled: true
3041
+ VersionAdded: '0.51'
3042
+
3043
+ Style/ModuleFunction:
3044
+ Description: 'Checks for usage of `extend self` in modules.'
3045
+ StyleGuide: '#module-function'
3046
+ Enabled: true
3047
+ VersionAdded: '0.11'
3048
+ VersionChanged: '0.65'
3049
+ EnforcedStyle: module_function
3050
+ SupportedStyles:
3051
+ - module_function
3052
+ - extend_self
3053
+ Autocorrect: false
3054
+ SafeAutoCorrect: false
3055
+
3056
+ Style/MultilineBlockChain:
3057
+ Description: 'Avoid multi-line chains of blocks.'
3058
+ StyleGuide: '#single-line-blocks'
3059
+ Enabled: true
3060
+ VersionAdded: '0.13'
3061
+
3062
+ Style/MultilineIfModifier:
3063
+ Description: 'Only use if/unless modifiers on single line statements.'
3064
+ StyleGuide: '#no-multiline-if-modifiers'
3065
+ Enabled: true
3066
+ VersionAdded: '0.45'
3067
+
3068
+ Style/MultilineIfThen:
3069
+ Description: 'Do not use then for multi-line if/unless.'
3070
+ StyleGuide: '#no-then'
3071
+ Enabled: true
3072
+ VersionAdded: '0.9'
3073
+ VersionChanged: '0.26'
3074
+
3075
+ Style/MultilineMemoization:
3076
+ Description: 'Wrap multiline memoizations in a `begin` and `end` block.'
3077
+ Enabled: true
3078
+ VersionAdded: '0.44'
3079
+ VersionChanged: '0.48'
3080
+ EnforcedStyle: keyword
3081
+ SupportedStyles:
3082
+ - keyword
3083
+ - braces
3084
+
3085
+ Style/MultilineMethodSignature:
3086
+ Description: 'Avoid multi-line method signatures.'
3087
+ Enabled: false
3088
+ VersionAdded: '0.59'
3089
+
3090
+ Style/MultilineTernaryOperator:
3091
+ Description: >-
3092
+ Avoid multi-line ?: (the ternary operator);
3093
+ use if/unless instead.
3094
+ StyleGuide: '#no-multiline-ternary'
3095
+ Enabled: true
3096
+ VersionAdded: '0.9'
3097
+
3098
+ Style/MultilineWhenThen:
3099
+ Description: 'Do not use then for multi-line when statement.'
3100
+ StyleGuide: '#no-then'
3101
+ Enabled: true
3102
+ VersionAdded: '0.73'
3103
+
3104
+ Style/MultipleComparison:
3105
+ Description: >-
3106
+ Avoid comparing a variable with multiple items in a conditional,
3107
+ use Array#include? instead.
3108
+ Enabled: true
3109
+ VersionAdded: '0.49'
3110
+
3111
+ Style/MutableConstant:
3112
+ Description: 'Do not assign mutable objects to constants.'
3113
+ Enabled: true
3114
+ VersionAdded: '0.34'
3115
+ VersionChanged: '0.65'
3116
+ EnforcedStyle: literals
3117
+ SupportedStyles:
3118
+ # literals: freeze literals assigned to constants
3119
+ # strict: freeze all constants
3120
+ # Strict mode is considered an experimental feature. It has not been updated
3121
+ # with an exhaustive list of all methods that will produce frozen objects so
3122
+ # there is a decent chance of getting some false positives. Luckily, there is
3123
+ # no harm in freezing an already frozen object.
3124
+ - literals
3125
+ - strict
3126
+
3127
+ Style/NegatedIf:
3128
+ Description: >-
3129
+ Favor unless over if for negative conditions
3130
+ (or control flow or).
3131
+ StyleGuide: '#unless-for-negatives'
3132
+ Enabled: true
3133
+ VersionAdded: '0.20'
3134
+ VersionChanged: '0.48'
3135
+ EnforcedStyle: both
3136
+ SupportedStyles:
3137
+ # both: prefix and postfix negated `if` should both use `unless`
3138
+ # prefix: only use `unless` for negated `if` statements positioned before the body of the statement
3139
+ # postfix: only use `unless` for negated `if` statements positioned after the body of the statement
3140
+ - both
3141
+ - prefix
3142
+ - postfix
3143
+
3144
+ Style/NegatedUnless:
3145
+ Description: 'Favor if over unless for negative conditions.'
3146
+ StyleGuide: '#if-for-negatives'
3147
+ Enabled: true
3148
+ VersionAdded: '0.69'
3149
+ EnforcedStyle: both
3150
+ SupportedStyles:
3151
+ # both: prefix and postfix negated `unless` should both use `if`
3152
+ # prefix: only use `if` for negated `unless` statements positioned before the body of the statement
3153
+ # postfix: only use `if` for negated `unless` statements positioned after the body of the statement
3154
+ - both
3155
+ - prefix
3156
+ - postfix
3157
+
3158
+ Style/NegatedWhile:
3159
+ Description: 'Favor until over while for negative conditions.'
3160
+ StyleGuide: '#until-for-negatives'
3161
+ Enabled: true
3162
+ VersionAdded: '0.20'
3163
+
3164
+ Style/NestedModifier:
3165
+ Description: 'Avoid using nested modifiers.'
3166
+ StyleGuide: '#no-nested-modifiers'
3167
+ Enabled: true
3168
+ VersionAdded: '0.35'
3169
+
3170
+ Style/NestedParenthesizedCalls:
3171
+ Description: >-
3172
+ Parenthesize method calls which are nested inside the
3173
+ argument list of another parenthesized method call.
3174
+ Enabled: true
3175
+ VersionAdded: '0.36'
3176
+ VersionChanged: '0.77'
3177
+ AllowedMethods:
3178
+ - be
3179
+ - be_a
3180
+ - be_an
3181
+ - be_between
3182
+ - be_falsey
3183
+ - be_kind_of
3184
+ - be_instance_of
3185
+ - be_truthy
3186
+ - be_within
3187
+ - eq
3188
+ - eql
3189
+ - end_with
3190
+ - include
3191
+ - match
3192
+ - raise_error
3193
+ - respond_to
3194
+ - start_with
3195
+
3196
+ Style/NestedTernaryOperator:
3197
+ Description: 'Use one expression per branch in a ternary operator.'
3198
+ StyleGuide: '#no-nested-ternary'
3199
+ Enabled: true
3200
+ VersionAdded: '0.9'
3201
+
3202
+ Style/Next:
3203
+ Description: 'Use `next` to skip iteration instead of a condition at the end.'
3204
+ StyleGuide: '#no-nested-conditionals'
3205
+ Enabled: true
3206
+ VersionAdded: '0.22'
3207
+ VersionChanged: '0.35'
3208
+ # With `always` all conditions at the end of an iteration needs to be
3209
+ # replaced by next - with `skip_modifier_ifs` the modifier if like this one
3210
+ # are ignored: [1, 2].each { |a| return 'yes' if a == 1 }
3211
+ EnforcedStyle: skip_modifier_ifs
3212
+ # `MinBodyLength` defines the number of lines of the a body of an `if` or `unless`
3213
+ # needs to have to trigger this cop
3214
+ MinBodyLength: 3
3215
+ SupportedStyles:
3216
+ - skip_modifier_ifs
3217
+ - always
3218
+
3219
+ Style/NilComparison:
3220
+ Description: 'Prefer x.nil? to x == nil.'
3221
+ StyleGuide: '#predicate-methods'
3222
+ Enabled: true
3223
+ VersionAdded: '0.12'
3224
+ VersionChanged: '0.59'
3225
+ EnforcedStyle: predicate
3226
+ SupportedStyles:
3227
+ - predicate
3228
+ - comparison
3229
+
3230
+ Style/NonNilCheck:
3231
+ Description: 'Checks for redundant nil checks.'
3232
+ StyleGuide: '#no-non-nil-checks'
3233
+ Enabled: true
3234
+ VersionAdded: '0.20'
3235
+ VersionChanged: '0.22'
3236
+ # With `IncludeSemanticChanges` set to `true`, this cop reports offenses for
3237
+ # `!x.nil?` and autocorrects that and `x != nil` to solely `x`, which is
3238
+ # **usually** OK, but might change behavior.
3239
+ #
3240
+ # With `IncludeSemanticChanges` set to `false`, this cop does not report
3241
+ # offenses for `!x.nil?` and does no changes that might change behavior.
3242
+ IncludeSemanticChanges: false
3243
+
3244
+ Style/Not:
3245
+ Description: 'Use ! instead of not.'
3246
+ StyleGuide: '#bang-not-not'
3247
+ Enabled: true
3248
+ VersionAdded: '0.9'
3249
+ VersionChanged: '0.20'
3250
+
3251
+ Style/NumericLiteralPrefix:
3252
+ Description: 'Use smallcase prefixes for numeric literals.'
3253
+ StyleGuide: '#numeric-literal-prefixes'
3254
+ Enabled: true
3255
+ VersionAdded: '0.41'
3256
+ EnforcedOctalStyle: zero_with_o
3257
+ SupportedOctalStyles:
3258
+ - zero_with_o
3259
+ - zero_only
3260
+
3261
+
3262
+ Style/NumericLiterals:
3263
+ Description: >-
3264
+ Add underscores to large numeric literals to improve their
3265
+ readability.
3266
+ StyleGuide: '#underscores-in-numerics'
3267
+ Enabled: true
3268
+ VersionAdded: '0.9'
3269
+ VersionChanged: '0.48'
3270
+ MinDigits: 5
3271
+ Strict: false
3272
+
3273
+ Style/NumericPredicate:
3274
+ Description: >-
3275
+ Checks for the use of predicate- or comparison methods for
3276
+ numeric comparisons.
3277
+ StyleGuide: '#predicate-methods'
3278
+ Safe: false
3279
+ # This will change to a new method call which isn't guaranteed to be on the
3280
+ # object. Switching these methods has to be done with knowledge of the types
3281
+ # of the variables which rubocop doesn't have.
3282
+ SafeAutoCorrect: false
3283
+ AutoCorrect: false
3284
+ Enabled: true
3285
+ VersionAdded: '0.42'
3286
+ VersionChanged: '0.59'
3287
+ EnforcedStyle: predicate
3288
+ SupportedStyles:
3289
+ - predicate
3290
+ - comparison
3291
+ IgnoredMethods: []
3292
+ # Exclude RSpec specs because assertions like `expect(1).to be > 0` cause
3293
+ # false positives.
3294
+ Exclude:
3295
+ - 'spec/**/*'
3296
+
3297
+ Style/OneLineConditional:
3298
+ Description: >-
3299
+ Favor the ternary operator(?:) over
3300
+ if/then/else/end constructs.
3301
+ StyleGuide: '#ternary-operator'
3302
+ Enabled: true
3303
+ VersionAdded: '0.9'
3304
+ VersionChanged: '0.38'
3305
+
3306
+ Style/OptionHash:
3307
+ Description: "Don't use option hashes when you can use keyword arguments."
3308
+ Enabled: false
3309
+ VersionAdded: '0.33'
3310
+ VersionChanged: '0.34'
3311
+ # A list of parameter names that will be flagged by this cop.
3312
+ SuspiciousParamNames:
3313
+ - options
3314
+ - opts
3315
+ - args
3316
+ - params
3317
+ - parameters
3318
+
3319
+ Style/OptionalArguments:
3320
+ Description: >-
3321
+ Checks for optional arguments that do not appear at the end
3322
+ of the argument list.
3323
+ StyleGuide: '#optional-arguments'
3324
+ Enabled: true
3325
+ VersionAdded: '0.33'
3326
+
3327
+ Style/OrAssignment:
3328
+ Description: 'Recommend usage of double pipe equals (||=) where applicable.'
3329
+ StyleGuide: '#double-pipe-for-uninit'
3330
+ Enabled: true
3331
+ VersionAdded: '0.50'
3332
+
3333
+ Style/ParallelAssignment:
3334
+ Description: >-
3335
+ Check for simple usages of parallel assignment.
3336
+ It will only warn when the number of variables
3337
+ matches on both sides of the assignment.
3338
+ StyleGuide: '#parallel-assignment'
3339
+ Enabled: true
3340
+ VersionAdded: '0.32'
3341
+
3342
+ Style/ParenthesesAroundCondition:
3343
+ Description: >-
3344
+ Don't use parentheses around the condition of an
3345
+ if/unless/while.
3346
+ StyleGuide: '#no-parens-around-condition'
3347
+ Enabled: true
3348
+ VersionAdded: '0.9'
3349
+ VersionChanged: '0.56'
3350
+ AllowSafeAssignment: true
3351
+ AllowInMultilineConditions: false
3352
+
3353
+ Style/PercentLiteralDelimiters:
3354
+ Description: 'Use `%`-literal delimiters consistently.'
3355
+ StyleGuide: '#percent-literal-braces'
3356
+ Enabled: true
3357
+ VersionAdded: '0.19'
3358
+ # Specify the default preferred delimiter for all types with the 'default' key
3359
+ # Override individual delimiters (even with default specified) by specifying
3360
+ # an individual key
3361
+ PreferredDelimiters:
3362
+ default: ()
3363
+ '%i': '[]'
3364
+ '%I': '[]'
3365
+ '%r': '{}'
3366
+ '%w': '[]'
3367
+ '%W': '[]'
3368
+ VersionChanged: '0.48.1'
3369
+
3370
+ Style/PercentQLiterals:
3371
+ Description: 'Checks if uses of %Q/%q match the configured preference.'
3372
+ Enabled: true
3373
+ VersionAdded: '0.25'
3374
+ EnforcedStyle: lower_case_q
3375
+ SupportedStyles:
3376
+ - lower_case_q # Use `%q` when possible, `%Q` when necessary
3377
+ - upper_case_q # Always use `%Q`
3378
+
3379
+ Style/PerlBackrefs:
3380
+ Description: 'Avoid Perl-style regex back references.'
3381
+ StyleGuide: '#no-perl-regexp-last-matchers'
3382
+ Enabled: true
3383
+ VersionAdded: '0.13'
3384
+
3385
+ Style/PreferredHashMethods:
3386
+ Description: 'Checks use of `has_key?` and `has_value?` Hash methods.'
3387
+ StyleGuide: '#hash-key'
3388
+ Enabled: true
3389
+ Safe: false
3390
+ VersionAdded: '0.41'
3391
+ VersionChanged: '0.70'
3392
+ EnforcedStyle: short
3393
+ SupportedStyles:
3394
+ - short
3395
+ - verbose
3396
+
3397
+ Style/Proc:
3398
+ Description: 'Use proc instead of Proc.new.'
3399
+ StyleGuide: '#proc'
3400
+ Enabled: true
3401
+ VersionAdded: '0.9'
3402
+ VersionChanged: '0.18'
3403
+
3404
+ Style/RaiseArgs:
3405
+ Description: 'Checks the arguments passed to raise/fail.'
3406
+ StyleGuide: '#exception-class-messages'
3407
+ Enabled: true
3408
+ VersionAdded: '0.14'
3409
+ VersionChanged: '0.40'
3410
+ EnforcedStyle: exploded
3411
+ SupportedStyles:
3412
+ - compact # raise Exception.new(msg)
3413
+ - exploded # raise Exception, msg
3414
+
3415
+ Style/RandomWithOffset:
3416
+ Description: >-
3417
+ Prefer to use ranges when generating random numbers instead of
3418
+ integers with offsets.
3419
+ StyleGuide: '#random-numbers'
3420
+ Enabled: true
3421
+ VersionAdded: '0.52'
3422
+
3423
+ Style/RedundantBegin:
3424
+ Description: "Don't use begin blocks when they are not needed."
3425
+ StyleGuide: '#begin-implicit'
3426
+ Enabled: true
3427
+ VersionAdded: '0.10'
3428
+ VersionChanged: '0.21'
3429
+
3430
+ Style/RedundantCapitalW:
3431
+ Description: 'Checks for %W when interpolation is not needed.'
3432
+ Enabled: true
3433
+ VersionAdded: '0.76'
3434
+
3435
+ Style/RedundantCondition:
3436
+ Description: 'Checks for unnecessary conditional expressions.'
3437
+ Enabled: true
3438
+ VersionAdded: '0.76'
3439
+
3440
+ Style/RedundantConditional:
3441
+ Description: "Don't return true/false from a conditional."
3442
+ Enabled: true
3443
+ VersionAdded: '0.50'
3444
+
3445
+ Style/RedundantException:
3446
+ Description: "Checks for an obsolete RuntimeException argument in raise/fail."
3447
+ StyleGuide: '#no-explicit-runtimeerror'
3448
+ Enabled: true
3449
+ VersionAdded: '0.14'
3450
+ VersionChanged: '0.29'
3451
+
3452
+ Style/RedundantFreeze:
3453
+ Description: "Checks usages of Object#freeze on immutable objects."
3454
+ Enabled: true
3455
+ VersionAdded: '0.34'
3456
+ VersionChanged: '0.66'
3457
+
3458
+ Style/RedundantInterpolation:
3459
+ Description: 'Checks for strings that are just an interpolated expression.'
3460
+ Enabled: true
3461
+ VersionAdded: '0.76'
3462
+
3463
+ Style/RedundantParentheses:
3464
+ Description: "Checks for parentheses that seem not to serve any purpose."
3465
+ Enabled: true
3466
+ VersionAdded: '0.36'
3467
+
3468
+ Style/RedundantPercentQ:
3469
+ Description: 'Checks for %q/%Q when single quotes or double quotes would do.'
3470
+ StyleGuide: '#percent-q'
3471
+ Enabled: true
3472
+ VersionAdded: '0.76'
3473
+
3474
+ Style/RedundantReturn:
3475
+ Description: "Don't use return where it's not required."
3476
+ StyleGuide: '#no-explicit-return'
3477
+ Enabled: true
3478
+ VersionAdded: '0.10'
3479
+ VersionChanged: '0.14'
3480
+ # When `true` allows code like `return x, y`.
3481
+ AllowMultipleReturnValues: false
3482
+
3483
+ Style/RedundantSelf:
3484
+ Description: "Don't use self where it's not needed."
3485
+ StyleGuide: '#no-self-unless-required'
3486
+ Enabled: true
3487
+ VersionAdded: '0.10'
3488
+ VersionChanged: '0.13'
3489
+
3490
+ Style/RedundantSort:
3491
+ Description: >-
3492
+ Use `min` instead of `sort.first`,
3493
+ `max_by` instead of `sort_by...last`, etc.
3494
+ Enabled: true
3495
+ VersionAdded: '0.76'
3496
+
3497
+ Style/RedundantSortBy:
3498
+ Description: 'Use `sort` instead of `sort_by { |x| x }`.'
3499
+ Enabled: true
3500
+ VersionAdded: '0.36'
3501
+
3502
+ Style/RegexpLiteral:
3503
+ Description: 'Use / or %r around regular expressions.'
3504
+ StyleGuide: '#percent-r'
3505
+ Enabled: true
3506
+ VersionAdded: '0.9'
3507
+ VersionChanged: '0.30'
3508
+ EnforcedStyle: slashes
3509
+ # slashes: Always use slashes.
3510
+ # percent_r: Always use `%r`.
3511
+ # mixed: Use slashes on single-line regexes, and `%r` on multi-line regexes.
3512
+ SupportedStyles:
3513
+ - slashes
3514
+ - percent_r
3515
+ - mixed
3516
+ # If `false`, the cop will always recommend using `%r` if one or more slashes
3517
+ # are found in the regexp string.
3518
+ AllowInnerSlashes: false
3519
+
3520
+ Style/RescueModifier:
3521
+ Description: 'Avoid using rescue in its modifier form.'
3522
+ StyleGuide: '#no-rescue-modifiers'
3523
+ Enabled: true
3524
+ VersionAdded: '0.9'
3525
+ VersionChanged: '0.34'
3526
+
3527
+ Style/RescueStandardError:
3528
+ Description: 'Avoid rescuing without specifying an error class.'
3529
+ Enabled: true
3530
+ VersionAdded: '0.52'
3531
+ EnforcedStyle: explicit
3532
+ # implicit: Do not include the error class, `rescue`
3533
+ # explicit: Require an error class `rescue StandardError`
3534
+ SupportedStyles:
3535
+ - implicit
3536
+ - explicit
3537
+
3538
+ Style/ReturnNil:
3539
+ Description: 'Use return instead of return nil.'
3540
+ Enabled: false
3541
+ EnforcedStyle: return
3542
+ SupportedStyles:
3543
+ - return
3544
+ - return_nil
3545
+ VersionAdded: '0.50'
3546
+
3547
+ Style/SafeNavigation:
3548
+ Description: >-
3549
+ This cop transforms usages of a method call safeguarded by
3550
+ a check for the existence of the object to
3551
+ safe navigation (`&.`).
3552
+ Enabled: true
3553
+ VersionAdded: '0.43'
3554
+ VersionChanged: '0.77'
3555
+ # Safe navigation may cause a statement to start returning `nil` in addition
3556
+ # to whatever it used to return.
3557
+ ConvertCodeThatCanStartToReturnNil: false
3558
+ AllowedMethods:
3559
+ - present?
3560
+ - blank?
3561
+ - presence
3562
+ - try
3563
+ - try!
3564
+
3565
+ Style/Sample:
3566
+ Description: >-
3567
+ Use `sample` instead of `shuffle.first`,
3568
+ `shuffle.last`, and `shuffle[Integer]`.
3569
+ Reference: 'https://github.com/JuanitoFatas/fast-ruby#arrayshufflefirst-vs-arraysample-code'
3570
+ Enabled: true
3571
+ VersionAdded: '0.30'
3572
+
3573
+ Style/SelfAssignment:
3574
+ Description: >-
3575
+ Checks for places where self-assignment shorthand should have
3576
+ been used.
3577
+ StyleGuide: '#self-assignment'
3578
+ Enabled: true
3579
+ VersionAdded: '0.19'
3580
+ VersionChanged: '0.29'
3581
+
3582
+ Style/Semicolon:
3583
+ Description: "Don't use semicolons to terminate expressions."
3584
+ StyleGuide: '#no-semicolon'
3585
+ Enabled: true
3586
+ VersionAdded: '0.9'
3587
+ VersionChanged: '0.19'
3588
+ # Allow `;` to separate several expressions on the same line.
3589
+ AllowAsExpressionSeparator: false
3590
+
3591
+ Style/Send:
3592
+ Description: 'Prefer `Object#__send__` or `Object#public_send` to `send`, as `send` may overlap with existing methods.'
3593
+ StyleGuide: '#prefer-public-send'
3594
+ Enabled: false
3595
+ VersionAdded: '0.33'
3596
+
3597
+ Style/SignalException:
3598
+ Description: 'Checks for proper usage of fail and raise.'
3599
+ StyleGuide: '#prefer-raise-over-fail'
3600
+ Enabled: true
3601
+ VersionAdded: '0.11'
3602
+ VersionChanged: '0.37'
3603
+ EnforcedStyle: only_raise
3604
+ SupportedStyles:
3605
+ - only_raise
3606
+ - only_fail
3607
+ - semantic
3608
+
3609
+ Style/SingleLineBlockParams:
3610
+ Description: 'Enforces the names of some block params.'
3611
+ Enabled: false
3612
+ VersionAdded: '0.16'
3613
+ VersionChanged: '0.47'
3614
+ Methods:
3615
+ - reduce:
3616
+ - acc
3617
+ - elem
3618
+ - inject:
3619
+ - acc
3620
+ - elem
3621
+
3622
+ Style/SingleLineMethods:
3623
+ Description: 'Avoid single-line methods.'
3624
+ StyleGuide: '#no-single-line-methods'
3625
+ Enabled: true
3626
+ VersionAdded: '0.9'
3627
+ VersionChanged: '0.19'
3628
+ AllowIfMethodIsEmpty: true
3629
+
3630
+ Style/SpecialGlobalVars:
3631
+ Description: 'Avoid Perl-style global variables.'
3632
+ StyleGuide: '#no-cryptic-perlisms'
3633
+ Enabled: true
3634
+ VersionAdded: '0.13'
3635
+ VersionChanged: '0.36'
3636
+ SafeAutoCorrect: false
3637
+ EnforcedStyle: use_english_names
3638
+ SupportedStyles:
3639
+ - use_perl_names
3640
+ - use_english_names
3641
+
3642
+ Style/StabbyLambdaParentheses:
3643
+ Description: 'Check for the usage of parentheses around stabby lambda arguments.'
3644
+ StyleGuide: '#stabby-lambda-with-args'
3645
+ Enabled: true
3646
+ VersionAdded: '0.35'
3647
+ EnforcedStyle: require_parentheses
3648
+ SupportedStyles:
3649
+ - require_parentheses
3650
+ - require_no_parentheses
3651
+
3652
+ Style/StderrPuts:
3653
+ Description: 'Use `warn` instead of `$stderr.puts`.'
3654
+ StyleGuide: '#warn'
3655
+ Enabled: true
3656
+ VersionAdded: '0.51'
3657
+
3658
+ Style/StringHashKeys:
3659
+ Description: 'Prefer symbols instead of strings as hash keys.'
3660
+ StyleGuide: '#symbols-as-keys'
3661
+ Enabled: false
3662
+ VersionAdded: '0.52'
3663
+ VersionChanged: '0.75'
3664
+ Safe: false
3665
+
3666
+ Style/StringLiterals:
3667
+ Description: 'Checks if uses of quotes match the configured preference.'
3668
+ StyleGuide: '#consistent-string-literals'
3669
+ Enabled: true
3670
+ VersionAdded: '0.9'
3671
+ VersionChanged: '0.36'
3672
+ EnforcedStyle: single_quotes
3673
+ SupportedStyles:
3674
+ - single_quotes
3675
+ - double_quotes
3676
+ # If `true`, strings which span multiple lines using `\` for continuation must
3677
+ # use the same type of quotes on each line.
3678
+ ConsistentQuotesInMultiline: false
3679
+
3680
+ Style/StringLiteralsInInterpolation:
3681
+ Description: >-
3682
+ Checks if uses of quotes inside expressions in interpolated
3683
+ strings match the configured preference.
3684
+ Enabled: true
3685
+ VersionAdded: '0.27'
3686
+ EnforcedStyle: single_quotes
3687
+ SupportedStyles:
3688
+ - single_quotes
3689
+ - double_quotes
3690
+
3691
+ Style/StringMethods:
3692
+ Description: 'Checks if configured preferred methods are used over non-preferred.'
3693
+ Enabled: false
3694
+ VersionAdded: '0.34'
3695
+ VersionChanged: '0.34.2'
3696
+ # Mapping from undesired method to desired_method
3697
+ # e.g. to use `to_sym` over `intern`:
3698
+ #
3699
+ # StringMethods:
3700
+ # PreferredMethods:
3701
+ # intern: to_sym
3702
+ PreferredMethods:
3703
+ intern: to_sym
3704
+
3705
+ Style/Strip:
3706
+ Description: 'Use `strip` instead of `lstrip.rstrip`.'
3707
+ Enabled: true
3708
+ VersionAdded: '0.36'
3709
+
3710
+ Style/StructInheritance:
3711
+ Description: 'Checks for inheritance from Struct.new.'
3712
+ StyleGuide: '#no-extend-struct-new'
3713
+ Enabled: true
3714
+ VersionAdded: '0.29'
3715
+
3716
+ Style/SymbolArray:
3717
+ Description: 'Use %i or %I for arrays of symbols.'
3718
+ StyleGuide: '#percent-i'
3719
+ Enabled: true
3720
+ VersionAdded: '0.9'
3721
+ VersionChanged: '0.49'
3722
+ EnforcedStyle: percent
3723
+ MinSize: 2
3724
+ SupportedStyles:
3725
+ - percent
3726
+ - brackets
3727
+
3728
+ Style/SymbolLiteral:
3729
+ Description: 'Use plain symbols instead of string symbols when possible.'
3730
+ Enabled: true
3731
+ VersionAdded: '0.30'
3732
+
3733
+ Style/SymbolProc:
3734
+ Description: 'Use symbols as procs instead of blocks when possible.'
3735
+ Enabled: true
3736
+ SafeAutoCorrect: false
3737
+ VersionAdded: '0.26'
3738
+ VersionChanged: '0.64'
3739
+ # A list of method names to be ignored by the check.
3740
+ # The names should be fairly unique, otherwise you'll end up ignoring lots of code.
3741
+ IgnoredMethods:
3742
+ - respond_to
3743
+ - define_method
3744
+
3745
+ Style/TernaryParentheses:
3746
+ Description: 'Checks for use of parentheses around ternary conditions.'
3747
+ Enabled: true
3748
+ VersionAdded: '0.42'
3749
+ VersionChanged: '0.46'
3750
+ EnforcedStyle: require_no_parentheses
3751
+ SupportedStyles:
3752
+ - require_parentheses
3753
+ - require_no_parentheses
3754
+ - require_parentheses_when_complex
3755
+ AllowSafeAssignment: true
3756
+
3757
+ Style/TrailingBodyOnClass:
3758
+ Description: 'Class body goes below class statement.'
3759
+ Enabled: true
3760
+ VersionAdded: '0.53'
3761
+
3762
+ Style/TrailingBodyOnMethodDefinition:
3763
+ Description: 'Method body goes below definition.'
3764
+ Enabled: true
3765
+ VersionAdded: '0.52'
3766
+
3767
+ Style/TrailingBodyOnModule:
3768
+ Description: 'Module body goes below module statement.'
3769
+ Enabled: true
3770
+ VersionAdded: '0.53'
3771
+
3772
+ Style/TrailingCommaInArguments:
3773
+ Description: 'Checks for trailing comma in argument lists.'
3774
+ StyleGuide: '#no-trailing-params-comma'
3775
+ Enabled: true
3776
+ VersionAdded: '0.36'
3777
+ # If `comma`, the cop requires a comma after the last argument, but only for
3778
+ # parenthesized method calls where each argument is on its own line.
3779
+ # If `consistent_comma`, the cop requires a comma after the last argument,
3780
+ # for all parenthesized method calls with arguments.
3781
+ EnforcedStyleForMultiline: no_comma
3782
+ SupportedStylesForMultiline:
3783
+ - comma
3784
+ - consistent_comma
3785
+ - no_comma
3786
+
3787
+ Style/TrailingCommaInArrayLiteral:
3788
+ Description: 'Checks for trailing comma in array literals.'
3789
+ StyleGuide: '#no-trailing-array-commas'
3790
+ Enabled: true
3791
+ VersionAdded: '0.53'
3792
+ # but only when each item is on its own line.
3793
+ # If `consistent_comma`, the cop requires a comma after the last item of all
3794
+ # non-empty array literals.
3795
+ EnforcedStyleForMultiline: no_comma
3796
+ SupportedStylesForMultiline:
3797
+ - comma
3798
+ - consistent_comma
3799
+ - no_comma
3800
+
3801
+ Style/TrailingCommaInHashLiteral:
3802
+ Description: 'Checks for trailing comma in hash literals.'
3803
+ Enabled: true
3804
+ # If `comma`, the cop requires a comma after the last item in a hash,
3805
+ # but only when each item is on its own line.
3806
+ # If `consistent_comma`, the cop requires a comma after the last item of all
3807
+ # non-empty hash literals.
3808
+ EnforcedStyleForMultiline: no_comma
3809
+ SupportedStylesForMultiline:
3810
+ - comma
3811
+ - consistent_comma
3812
+ - no_comma
3813
+ VersionAdded: '0.53'
3814
+
3815
+ Style/TrailingMethodEndStatement:
3816
+ Description: 'Checks for trailing end statement on line of method body.'
3817
+ Enabled: true
3818
+ VersionAdded: '0.52'
3819
+
3820
+ Style/TrailingUnderscoreVariable:
3821
+ Description: >-
3822
+ Checks for the usage of unneeded trailing underscores at the
3823
+ end of parallel variable assignment.
3824
+ AllowNamedUnderscoreVariables: true
3825
+ Enabled: true
3826
+ VersionAdded: '0.31'
3827
+ VersionChanged: '0.35'
3828
+
3829
+ # `TrivialAccessors` requires exact name matches and doesn't allow
3830
+ # predicated methods by default.
3831
+ Style/TrivialAccessors:
3832
+ Description: 'Prefer attr_* methods to trivial readers/writers.'
3833
+ StyleGuide: '#attr_family'
3834
+ Enabled: true
3835
+ VersionAdded: '0.9'
3836
+ VersionChanged: '0.77'
3837
+ # When set to `false` the cop will suggest the use of accessor methods
3838
+ # in situations like:
3839
+ #
3840
+ # def name
3841
+ # @other_name
3842
+ # end
3843
+ #
3844
+ # This way you can uncover "hidden" attributes in your code.
3845
+ ExactNameMatch: true
3846
+ AllowPredicates: true
3847
+ # Allows trivial writers that don't end in an equal sign. e.g.
3848
+ #
3849
+ # def on_exception(action)
3850
+ # @on_exception=action
3851
+ # end
3852
+ # on_exception :restart
3853
+ #
3854
+ # Commonly used in DSLs
3855
+ AllowDSLWriters: false
3856
+ IgnoreClassMethods: false
3857
+ AllowedMethods:
3858
+ - to_ary
3859
+ - to_a
3860
+ - to_c
3861
+ - to_enum
3862
+ - to_h
3863
+ - to_hash
3864
+ - to_i
3865
+ - to_int
3866
+ - to_io
3867
+ - to_open
3868
+ - to_path
3869
+ - to_proc
3870
+ - to_r
3871
+ - to_regexp
3872
+ - to_str
3873
+ - to_s
3874
+ - to_sym
3875
+
3876
+ Style/UnlessElse:
3877
+ Description: >-
3878
+ Do not use unless with else. Rewrite these with the positive
3879
+ case first.
3880
+ StyleGuide: '#no-else-with-unless'
3881
+ Enabled: true
3882
+ VersionAdded: '0.9'
3883
+
3884
+ Style/UnpackFirst:
3885
+ Description: >-
3886
+ Checks for accessing the first element of `String#unpack`
3887
+ instead of using `unpack1`.
3888
+ Enabled: true
3889
+ VersionAdded: '0.54'
3890
+
3891
+ Style/VariableInterpolation:
3892
+ Description: >-
3893
+ Don't interpolate global, instance and class variables
3894
+ directly in strings.
3895
+ StyleGuide: '#curlies-interpolate'
3896
+ Enabled: true
3897
+ VersionAdded: '0.9'
3898
+ VersionChanged: '0.20'
3899
+
3900
+ Style/WhenThen:
3901
+ Description: 'Use when x then ... for one-line cases.'
3902
+ StyleGuide: '#one-line-cases'
3903
+ Enabled: true
3904
+ VersionAdded: '0.9'
3905
+
3906
+ Style/WhileUntilDo:
3907
+ Description: 'Checks for redundant do after while or until.'
3908
+ StyleGuide: '#no-multiline-while-do'
3909
+ Enabled: true
3910
+ VersionAdded: '0.9'
3911
+
3912
+ Style/WhileUntilModifier:
3913
+ Description: >-
3914
+ Favor modifier while/until usage when you have a
3915
+ single-line body.
3916
+ StyleGuide: '#while-as-a-modifier'
3917
+ Enabled: true
3918
+ VersionAdded: '0.9'
3919
+ VersionChanged: '0.30'
3920
+
3921
+ Style/WordArray:
3922
+ Description: 'Use %w or %W for arrays of words.'
3923
+ StyleGuide: '#percent-w'
3924
+ Enabled: true
3925
+ VersionAdded: '0.9'
3926
+ VersionChanged: '0.36'
3927
+ EnforcedStyle: percent
3928
+ SupportedStyles:
3929
+ # percent style: %w(word1 word2)
3930
+ - percent
3931
+ # bracket style: ['word1', 'word2']
3932
+ - brackets
3933
+ # The `MinSize` option causes the `WordArray` rule to be ignored for arrays
3934
+ # smaller than a certain size. The rule is only applied to arrays
3935
+ # whose element count is greater than or equal to `MinSize`.
3936
+ MinSize: 2
3937
+ # The regular expression `WordRegex` decides what is considered a word.
3938
+ WordRegex: !ruby/regexp '/\A(?:\p{Word}|\p{Word}-\p{Word}|\n|\t)+\z/'
3939
+
3940
+ Style/YodaCondition:
3941
+ Description: 'Forbid or enforce yoda conditions.'
3942
+ Reference: 'https://en.wikipedia.org/wiki/Yoda_conditions'
3943
+ Enabled: true
3944
+ EnforcedStyle: forbid_for_all_comparison_operators
3945
+ SupportedStyles:
3946
+ # check all comparison operators
3947
+ - forbid_for_all_comparison_operators
3948
+ # check only equality operators: `!=` and `==`
3949
+ - forbid_for_equality_operators_only
3950
+ # enforce yoda for all comparison operators
3951
+ - require_for_all_comparison_operators
3952
+ # enforce yoda only for equality operators: `!=` and `==`
3953
+ - require_for_equality_operators_only
3954
+ Safe: false
3955
+ VersionAdded: '0.49'
3956
+ VersionChanged: '0.75'
3957
+
3958
+ Style/ZeroLengthPredicate:
3959
+ Description: 'Use #empty? when testing for objects of length 0.'
3960
+ Enabled: true
3961
+ Safe: false
3962
+ VersionAdded: '0.37'
3963
+ VersionChanged: '0.39'