rubocop 0.42.0 → 0.52.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (627) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/README.md +106 -20
  4. data/assets/output.html.erb +21 -10
  5. data/bin/rubocop +1 -2
  6. data/config/default.yml +914 -483
  7. data/config/disabled.yml +61 -41
  8. data/config/enabled.yml +1396 -878
  9. data/lib/rubocop/ast/builder.rb +72 -0
  10. data/lib/rubocop/ast/node/and_node.rb +37 -0
  11. data/lib/rubocop/ast/node/args_node.rb +29 -0
  12. data/lib/rubocop/ast/node/array_node.rb +57 -0
  13. data/lib/rubocop/ast/node/block_node.rb +116 -0
  14. data/lib/rubocop/ast/node/case_node.rb +64 -0
  15. data/lib/rubocop/ast/node/def_node.rb +71 -0
  16. data/lib/rubocop/ast/node/ensure_node.rb +25 -0
  17. data/lib/rubocop/ast/node/for_node.rb +61 -0
  18. data/lib/rubocop/ast/node/hash_node.rb +109 -0
  19. data/lib/rubocop/ast/node/if_node.rb +146 -0
  20. data/lib/rubocop/ast/node/keyword_splat_node.rb +45 -0
  21. data/lib/rubocop/ast/node/mixin/basic_literal_node.rb +16 -0
  22. data/lib/rubocop/ast/node/mixin/binary_operator_node.rb +23 -0
  23. data/lib/rubocop/ast/node/mixin/collection_node.rb +15 -0
  24. data/lib/rubocop/ast/node/mixin/conditional_node.rb +45 -0
  25. data/lib/rubocop/ast/node/mixin/hash_element_node.rb +125 -0
  26. data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +174 -0
  27. data/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +89 -0
  28. data/lib/rubocop/ast/node/mixin/modifier_node.rb +17 -0
  29. data/lib/rubocop/ast/node/mixin/parameterized_node.rb +61 -0
  30. data/lib/rubocop/ast/node/mixin/predicate_operator_node.rb +35 -0
  31. data/lib/rubocop/ast/node/or_node.rb +37 -0
  32. data/lib/rubocop/ast/node/pair_node.rb +64 -0
  33. data/lib/rubocop/ast/node/regexp_node.rb +35 -0
  34. data/lib/rubocop/ast/node/resbody_node.rb +25 -0
  35. data/lib/rubocop/ast/node/send_node.rb +45 -0
  36. data/lib/rubocop/ast/node/str_node.rb +14 -0
  37. data/lib/rubocop/ast/node/super_node.rb +21 -0
  38. data/lib/rubocop/ast/node/symbol_node.rb +20 -0
  39. data/lib/rubocop/ast/node/until_node.rb +43 -0
  40. data/lib/rubocop/ast/node/when_node.rb +61 -0
  41. data/lib/rubocop/ast/node/while_node.rb +43 -0
  42. data/lib/rubocop/ast/node/yield_node.rb +21 -0
  43. data/lib/rubocop/ast/node.rb +634 -0
  44. data/lib/rubocop/ast/sexp.rb +16 -0
  45. data/lib/rubocop/{ast_node → ast}/traversal.rb +23 -24
  46. data/lib/rubocop/cached_data.rb +11 -31
  47. data/lib/rubocop/cli.rb +116 -33
  48. data/lib/rubocop/comment_config.rb +4 -10
  49. data/lib/rubocop/config.rb +355 -102
  50. data/lib/rubocop/config_loader.rb +93 -78
  51. data/lib/rubocop/config_loader_resolver.rb +106 -7
  52. data/lib/rubocop/config_store.rb +4 -1
  53. data/lib/rubocop/cop/autocorrect_logic.rb +1 -2
  54. data/lib/rubocop/cop/badge.rb +73 -0
  55. data/lib/rubocop/cop/bundler/duplicated_gem.rb +71 -0
  56. data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +67 -0
  57. data/lib/rubocop/cop/bundler/ordered_gems.rb +71 -0
  58. data/lib/rubocop/cop/commissioner.rb +27 -10
  59. data/lib/rubocop/cop/cop.rb +62 -107
  60. data/lib/rubocop/cop/corrector.rb +0 -1
  61. data/lib/rubocop/cop/correctors/alignment_corrector.rb +121 -0
  62. data/lib/rubocop/cop/correctors/condition_corrector.rb +28 -0
  63. data/lib/rubocop/cop/correctors/empty_line_corrector.rb +26 -0
  64. data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +62 -0
  65. data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +44 -0
  66. data/lib/rubocop/cop/correctors/parentheses_corrector.rb +31 -0
  67. data/lib/rubocop/cop/correctors/punctuation_corrector.rb +29 -0
  68. data/lib/rubocop/cop/correctors/space_corrector.rb +34 -0
  69. data/lib/rubocop/cop/correctors/string_literal_corrector.rb +25 -0
  70. data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +31 -0
  71. data/lib/rubocop/cop/force.rb +0 -1
  72. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +102 -0
  73. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +106 -0
  74. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +87 -0
  75. data/lib/rubocop/cop/generator/require_file_injector.rb +78 -0
  76. data/lib/rubocop/cop/generator.rb +191 -0
  77. data/lib/rubocop/cop/ignored_node.rb +0 -1
  78. data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +46 -0
  79. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +44 -0
  80. data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +54 -0
  81. data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +59 -0
  82. data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +71 -0
  83. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +52 -0
  84. data/lib/rubocop/cop/internal_affairs.rb +8 -0
  85. data/lib/rubocop/cop/{style → layout}/access_modifier_indentation.rb +39 -10
  86. data/lib/rubocop/cop/layout/align_array.rb +39 -0
  87. data/lib/rubocop/cop/layout/align_hash.rb +235 -0
  88. data/lib/rubocop/cop/{style → layout}/align_parameters.rb +38 -19
  89. data/lib/rubocop/cop/{style → layout}/block_end_newline.rb +26 -8
  90. data/lib/rubocop/cop/layout/case_indentation.rb +160 -0
  91. data/lib/rubocop/cop/layout/class_structure.rb +306 -0
  92. data/lib/rubocop/cop/{style → layout}/closing_parenthesis_indentation.rb +18 -13
  93. data/lib/rubocop/cop/{style → layout}/comment_indentation.rb +48 -6
  94. data/lib/rubocop/cop/{style → layout}/dot_position.rb +34 -21
  95. data/lib/rubocop/cop/{style → layout}/else_alignment.rb +55 -37
  96. data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +63 -0
  97. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +147 -0
  98. data/lib/rubocop/cop/{style → layout}/empty_lines.rb +17 -4
  99. data/lib/rubocop/cop/{style → layout}/empty_lines_around_access_modifier.rb +40 -24
  100. data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +87 -0
  101. data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +46 -0
  102. data/lib/rubocop/cop/{style → layout}/empty_lines_around_block_body.rb +9 -12
  103. data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +68 -0
  104. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +135 -0
  105. data/lib/rubocop/cop/{style → layout}/empty_lines_around_method_body.rb +10 -7
  106. data/lib/rubocop/cop/{style → layout}/empty_lines_around_module_body.rb +27 -9
  107. data/lib/rubocop/cop/layout/end_of_line.rb +52 -0
  108. data/lib/rubocop/cop/{style → layout}/extra_spacing.rb +63 -53
  109. data/lib/rubocop/cop/{style → layout}/first_array_element_line_break.rb +5 -2
  110. data/lib/rubocop/cop/{style → layout}/first_hash_element_line_break.rb +5 -2
  111. data/lib/rubocop/cop/{style → layout}/first_method_argument_line_break.rb +7 -4
  112. data/lib/rubocop/cop/{style → layout}/first_method_parameter_line_break.rb +8 -5
  113. data/lib/rubocop/cop/{style → layout}/first_parameter_indentation.rb +32 -26
  114. data/lib/rubocop/cop/{style → layout}/indent_array.rb +75 -25
  115. data/lib/rubocop/cop/{style → layout}/indent_assignment.rb +9 -6
  116. data/lib/rubocop/cop/{style → layout}/indent_hash.rb +80 -31
  117. data/lib/rubocop/cop/layout/indent_heredoc.rb +208 -0
  118. data/lib/rubocop/cop/{style → layout}/indentation_consistency.rb +7 -5
  119. data/lib/rubocop/cop/{style → layout}/indentation_width.rb +151 -117
  120. data/lib/rubocop/cop/layout/initial_indentation.rb +45 -0
  121. data/lib/rubocop/cop/layout/leading_comment_space.rb +58 -0
  122. data/lib/rubocop/cop/{style → layout}/multiline_array_brace_layout.rb +52 -16
  123. data/lib/rubocop/cop/{style → layout}/multiline_assignment_layout.rb +18 -21
  124. data/lib/rubocop/cop/{style → layout}/multiline_block_layout.rb +37 -43
  125. data/lib/rubocop/cop/{style → layout}/multiline_hash_brace_layout.rb +55 -15
  126. data/lib/rubocop/cop/{style → layout}/multiline_method_call_brace_layout.rb +15 -4
  127. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +221 -0
  128. data/lib/rubocop/cop/{style → layout}/multiline_method_definition_brace_layout.rb +12 -5
  129. data/lib/rubocop/cop/{style → layout}/multiline_operation_indentation.rb +23 -13
  130. data/lib/rubocop/cop/{style → layout}/rescue_ensure_alignment.rb +24 -13
  131. data/lib/rubocop/cop/{style → layout}/space_after_colon.rb +17 -13
  132. data/lib/rubocop/cop/layout/space_after_comma.rb +35 -0
  133. data/lib/rubocop/cop/{style → layout}/space_after_method_name.rb +11 -11
  134. data/lib/rubocop/cop/layout/space_after_not.rb +38 -0
  135. data/lib/rubocop/cop/{style → layout}/space_after_semicolon.rb +14 -4
  136. data/lib/rubocop/cop/{style → layout}/space_around_block_parameters.rb +52 -28
  137. data/lib/rubocop/cop/{style → layout}/space_around_equals_in_parameter_default.rb +29 -21
  138. data/lib/rubocop/cop/{style → layout}/space_around_keyword.rb +33 -29
  139. data/lib/rubocop/cop/layout/space_around_operators.rb +159 -0
  140. data/lib/rubocop/cop/layout/space_before_block_braces.rb +107 -0
  141. data/lib/rubocop/cop/layout/space_before_comma.rb +31 -0
  142. data/lib/rubocop/cop/{style → layout}/space_before_comment.rb +11 -7
  143. data/lib/rubocop/cop/{style → layout}/space_before_first_arg.rb +23 -20
  144. data/lib/rubocop/cop/layout/space_before_semicolon.rb +27 -0
  145. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +85 -0
  146. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +236 -0
  147. data/lib/rubocop/cop/{style → layout}/space_inside_array_percent_literal.rb +8 -8
  148. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +228 -0
  149. data/lib/rubocop/cop/{style → layout}/space_inside_hash_literal_braces.rb +91 -51
  150. data/lib/rubocop/cop/layout/space_inside_parens.rb +53 -0
  151. data/lib/rubocop/cop/{style → layout}/space_inside_percent_literal_delimiters.rb +14 -13
  152. data/lib/rubocop/cop/{style → layout}/space_inside_range_literal.rb +16 -17
  153. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +90 -0
  154. data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +80 -0
  155. data/lib/rubocop/cop/{style → layout}/tab.rb +8 -6
  156. data/lib/rubocop/cop/{style → layout}/trailing_blank_lines.rb +14 -15
  157. data/lib/rubocop/cop/{style → layout}/trailing_whitespace.rb +3 -4
  158. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +59 -0
  159. data/lib/rubocop/cop/lint/ambiguous_operator.rb +13 -9
  160. data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +7 -1
  161. data/lib/rubocop/cop/lint/assignment_in_condition.rb +55 -25
  162. data/lib/rubocop/cop/lint/block_alignment.rb +75 -34
  163. data/lib/rubocop/cop/lint/boolean_symbol.rb +38 -0
  164. data/lib/rubocop/cop/lint/circular_argument_reference.rb +17 -15
  165. data/lib/rubocop/cop/lint/condition_position.rb +16 -15
  166. data/lib/rubocop/cop/lint/debugger.rb +57 -23
  167. data/lib/rubocop/cop/lint/def_end_alignment.rb +28 -14
  168. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +19 -10
  169. data/lib/rubocop/cop/lint/duplicate_case_condition.rb +53 -0
  170. data/lib/rubocop/cop/lint/duplicate_methods.rb +108 -14
  171. data/lib/rubocop/cop/lint/duplicated_key.rb +16 -9
  172. data/lib/rubocop/cop/lint/each_with_object_argument.rb +15 -6
  173. data/lib/rubocop/cop/lint/else_layout.rb +27 -31
  174. data/lib/rubocop/cop/lint/empty_ensure.rb +44 -3
  175. data/lib/rubocop/cop/lint/empty_expression.rb +42 -0
  176. data/lib/rubocop/cop/lint/empty_interpolation.rb +16 -3
  177. data/lib/rubocop/cop/lint/empty_when.rb +38 -0
  178. data/lib/rubocop/cop/lint/end_alignment.rb +57 -39
  179. data/lib/rubocop/cop/lint/end_in_method.rb +24 -2
  180. data/lib/rubocop/cop/lint/ensure_return.rb +23 -3
  181. data/lib/rubocop/cop/lint/float_out_of_range.rb +10 -6
  182. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +67 -46
  183. data/lib/rubocop/cop/lint/handle_exceptions.rb +41 -4
  184. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +9 -5
  185. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +42 -29
  186. data/lib/rubocop/cop/lint/inherit_exception.rb +34 -23
  187. data/lib/rubocop/cop/lint/interpolation_check.rb +37 -0
  188. data/lib/rubocop/cop/lint/{literal_in_condition.rb → literal_as_condition.rb} +51 -40
  189. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +13 -8
  190. data/lib/rubocop/cop/lint/loop.rb +37 -2
  191. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +81 -0
  192. data/lib/rubocop/cop/lint/multiple_compare.rb +48 -0
  193. data/lib/rubocop/cop/lint/nested_method_definition.rb +54 -12
  194. data/lib/rubocop/cop/lint/nested_percent_literal.rb +58 -0
  195. data/lib/rubocop/cop/lint/next_without_accumulator.rb +7 -3
  196. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +32 -23
  197. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +22 -14
  198. data/lib/rubocop/cop/lint/percent_string_array.rb +42 -27
  199. data/lib/rubocop/cop/lint/percent_symbol_array.rb +28 -19
  200. data/lib/rubocop/cop/lint/rand_one.rb +17 -8
  201. data/lib/rubocop/cop/lint/redundant_with_index.rb +80 -0
  202. data/lib/rubocop/cop/lint/redundant_with_object.rb +81 -0
  203. data/lib/rubocop/cop/lint/regexp_as_condition.rb +29 -0
  204. data/lib/rubocop/cop/lint/require_parentheses.rb +24 -30
  205. data/lib/rubocop/cop/lint/rescue_exception.rb +21 -2
  206. data/lib/rubocop/cop/lint/rescue_type.rb +90 -0
  207. data/lib/rubocop/cop/lint/return_in_void_context.rb +74 -0
  208. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +70 -0
  209. data/lib/rubocop/cop/lint/script_permission.rb +49 -0
  210. data/lib/rubocop/cop/lint/shadowed_argument.rb +146 -0
  211. data/lib/rubocop/cop/lint/shadowed_exception.rb +78 -57
  212. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +25 -2
  213. data/lib/rubocop/cop/lint/string_conversion_in_interpolation.rb +18 -12
  214. data/lib/rubocop/cop/lint/syntax.rb +23 -21
  215. data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +26 -4
  216. data/lib/rubocop/cop/lint/unified_integer.rb +43 -0
  217. data/lib/rubocop/cop/lint/unneeded_disable.rb +117 -56
  218. data/lib/rubocop/cop/lint/unneeded_require_statement.rb +51 -0
  219. data/lib/rubocop/cop/lint/unneeded_splat_expansion.rb +167 -0
  220. data/lib/rubocop/cop/lint/unreachable_code.rb +72 -8
  221. data/lib/rubocop/cop/lint/unused_block_argument.rb +87 -27
  222. data/lib/rubocop/cop/lint/unused_method_argument.rb +18 -2
  223. data/lib/rubocop/cop/lint/uri_escape_unescape.rb +75 -0
  224. data/lib/rubocop/cop/lint/uri_regexp.rb +73 -0
  225. data/lib/rubocop/cop/lint/useless_access_modifier.rb +40 -18
  226. data/lib/rubocop/cop/lint/useless_assignment.rb +45 -14
  227. data/lib/rubocop/cop/lint/useless_comparison.rb +8 -10
  228. data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +16 -2
  229. data/lib/rubocop/cop/lint/useless_setter_call.rb +57 -43
  230. data/lib/rubocop/cop/lint/void.rb +83 -23
  231. data/lib/rubocop/cop/message_annotator.rb +118 -0
  232. data/lib/rubocop/cop/metrics/abc_size.rb +3 -4
  233. data/lib/rubocop/cop/metrics/block_length.rb +32 -0
  234. data/lib/rubocop/cop/metrics/block_nesting.rb +21 -10
  235. data/lib/rubocop/cop/metrics/class_length.rb +3 -2
  236. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +4 -4
  237. data/lib/rubocop/cop/metrics/line_length.rb +67 -14
  238. data/lib/rubocop/cop/metrics/method_length.rb +10 -10
  239. data/lib/rubocop/cop/metrics/module_length.rb +3 -2
  240. data/lib/rubocop/cop/metrics/parameter_lists.rb +15 -6
  241. data/lib/rubocop/cop/metrics/perceived_complexity.rb +5 -6
  242. data/lib/rubocop/cop/mixin/alignment.rb +70 -0
  243. data/lib/rubocop/cop/mixin/annotation_comment.rb +0 -1
  244. data/lib/rubocop/cop/mixin/array_hash_indentation.rb +26 -22
  245. data/lib/rubocop/cop/mixin/array_min_size.rb +59 -0
  246. data/lib/rubocop/cop/mixin/array_syntax.rb +4 -12
  247. data/lib/rubocop/cop/mixin/check_assignment.rb +6 -7
  248. data/lib/rubocop/cop/mixin/classish_length.rb +0 -1
  249. data/lib/rubocop/cop/mixin/code_length.rb +4 -3
  250. data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +21 -16
  251. data/lib/rubocop/cop/mixin/configurable_formatting.rb +48 -0
  252. data/lib/rubocop/cop/mixin/configurable_max.rb +5 -4
  253. data/lib/rubocop/cop/mixin/configurable_naming.rb +5 -35
  254. data/lib/rubocop/cop/mixin/configurable_numbering.rb +17 -0
  255. data/lib/rubocop/cop/mixin/def_node.rb +29 -0
  256. data/lib/rubocop/cop/mixin/documentation_comment.rb +46 -0
  257. data/lib/rubocop/cop/mixin/duplication.rb +46 -0
  258. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +119 -27
  259. data/lib/rubocop/cop/mixin/empty_parameter.rb +23 -0
  260. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +11 -27
  261. data/lib/rubocop/cop/mixin/enforce_superclass.rb +30 -0
  262. data/lib/rubocop/cop/mixin/first_element_line_break.rb +15 -11
  263. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +15 -13
  264. data/lib/rubocop/cop/mixin/hash_alignment.rb +116 -0
  265. data/lib/rubocop/cop/mixin/heredoc.rb +28 -0
  266. data/lib/rubocop/cop/mixin/ignored_pattern.rb +29 -0
  267. data/lib/rubocop/cop/mixin/integer_node.rb +2 -1
  268. data/lib/rubocop/cop/mixin/match_range.rb +4 -6
  269. data/lib/rubocop/cop/mixin/method_complexity.rb +33 -8
  270. data/lib/rubocop/cop/mixin/method_preference.rb +2 -1
  271. data/lib/rubocop/cop/mixin/min_body_length.rb +2 -1
  272. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +100 -66
  273. data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +49 -51
  274. data/lib/rubocop/cop/mixin/negative_conditional.rb +18 -13
  275. data/lib/rubocop/cop/mixin/on_normal_if_unless.rb +1 -25
  276. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +48 -0
  277. data/lib/rubocop/cop/mixin/parentheses.rb +2 -8
  278. data/lib/rubocop/cop/mixin/parser_diagnostic.rb +4 -2
  279. data/lib/rubocop/cop/mixin/percent_array.rb +52 -0
  280. data/lib/rubocop/cop/mixin/percent_literal.rb +69 -6
  281. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +16 -5
  282. data/lib/rubocop/cop/mixin/rescue_node.rb +23 -0
  283. data/lib/rubocop/cop/mixin/safe_assignment.rb +3 -1
  284. data/lib/rubocop/cop/mixin/safe_mode.rb +22 -0
  285. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +8 -10
  286. data/lib/rubocop/cop/mixin/space_before_punctuation.rb +10 -14
  287. data/lib/rubocop/cop/mixin/statement_modifier.rb +29 -32
  288. data/lib/rubocop/cop/mixin/string_help.rb +3 -2
  289. data/lib/rubocop/cop/mixin/string_literals_help.rb +3 -15
  290. data/lib/rubocop/cop/mixin/surrounding_space.rb +78 -9
  291. data/lib/rubocop/cop/mixin/target_rails_version.rb +16 -0
  292. data/lib/rubocop/cop/mixin/target_ruby_version.rb +16 -0
  293. data/lib/rubocop/cop/mixin/too_many_lines.rb +39 -0
  294. data/lib/rubocop/cop/mixin/trailing_comma.rb +37 -38
  295. data/lib/rubocop/cop/mixin/unused_argument.rb +6 -16
  296. data/lib/rubocop/cop/naming/accessor_method_name.rb +55 -0
  297. data/lib/rubocop/cop/{style → naming}/ascii_identifiers.rb +36 -5
  298. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +42 -0
  299. data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +33 -0
  300. data/lib/rubocop/cop/naming/constant_name.rb +58 -0
  301. data/lib/rubocop/cop/{style → naming}/file_name.rb +72 -29
  302. data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +62 -0
  303. data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +59 -0
  304. data/lib/rubocop/cop/naming/method_name.rb +40 -0
  305. data/lib/rubocop/cop/naming/predicate_name.rb +101 -0
  306. data/lib/rubocop/cop/naming/variable_name.rb +50 -0
  307. data/lib/rubocop/cop/naming/variable_number.rb +61 -0
  308. data/lib/rubocop/cop/offense.rb +9 -5
  309. data/lib/rubocop/cop/performance/caller.rb +69 -0
  310. data/lib/rubocop/cop/performance/case_when_splat.rb +65 -89
  311. data/lib/rubocop/cop/performance/casecmp.rb +37 -25
  312. data/lib/rubocop/cop/performance/compare_with_block.rb +117 -0
  313. data/lib/rubocop/cop/performance/count.rb +33 -43
  314. data/lib/rubocop/cop/performance/detect.rb +30 -31
  315. data/lib/rubocop/cop/performance/double_start_end_with.rb +55 -26
  316. data/lib/rubocop/cop/performance/end_with.rb +9 -9
  317. data/lib/rubocop/cop/performance/fixed_size.rb +21 -17
  318. data/lib/rubocop/cop/performance/flat_map.rb +30 -33
  319. data/lib/rubocop/cop/performance/hash_each_methods.rb +129 -0
  320. data/lib/rubocop/cop/performance/lstrip_rstrip.rb +14 -14
  321. data/lib/rubocop/cop/performance/range_include.rb +5 -4
  322. data/lib/rubocop/cop/performance/redundant_block_call.rb +28 -29
  323. data/lib/rubocop/cop/performance/redundant_match.rb +19 -15
  324. data/lib/rubocop/cop/performance/redundant_merge.rb +100 -52
  325. data/lib/rubocop/cop/performance/redundant_sort_by.rb +17 -14
  326. data/lib/rubocop/cop/performance/regexp_match.rb +224 -0
  327. data/lib/rubocop/cop/performance/reverse_each.rb +3 -6
  328. data/lib/rubocop/cop/performance/sample.rb +84 -83
  329. data/lib/rubocop/cop/performance/size.rb +22 -15
  330. data/lib/rubocop/cop/performance/start_with.rb +9 -9
  331. data/lib/rubocop/cop/performance/string_replacement.rb +35 -70
  332. data/lib/rubocop/cop/performance/times_map.rb +33 -24
  333. data/lib/rubocop/cop/performance/unfreeze_string.rb +50 -0
  334. data/lib/rubocop/cop/performance/uri_default_parser.rb +47 -0
  335. data/lib/rubocop/cop/rails/action_filter.rb +67 -47
  336. data/lib/rubocop/cop/rails/active_support_aliases.rb +68 -0
  337. data/lib/rubocop/cop/rails/application_job.rb +40 -0
  338. data/lib/rubocop/cop/rails/application_record.rb +40 -0
  339. data/lib/rubocop/cop/rails/blank.rb +142 -0
  340. data/lib/rubocop/cop/rails/create_table_with_timestamps.rb +82 -0
  341. data/lib/rubocop/cop/rails/date.rb +47 -42
  342. data/lib/rubocop/cop/rails/delegate.rb +55 -33
  343. data/lib/rubocop/cop/rails/delegate_allow_blank.rb +51 -0
  344. data/lib/rubocop/cop/rails/dynamic_find_by.rb +82 -0
  345. data/lib/rubocop/cop/rails/enum_uniqueness.rb +45 -0
  346. data/lib/rubocop/cop/rails/environment_comparison.rb +66 -0
  347. data/lib/rubocop/cop/rails/exit.rb +17 -11
  348. data/lib/rubocop/cop/rails/file_path.rb +72 -0
  349. data/lib/rubocop/cop/rails/find_by.rb +14 -20
  350. data/lib/rubocop/cop/rails/find_each.rb +8 -21
  351. data/lib/rubocop/cop/rails/has_and_belongs_to_many.rb +9 -2
  352. data/lib/rubocop/cop/rails/has_many_or_has_one_dependent.rb +84 -0
  353. data/lib/rubocop/cop/rails/http_positional_arguments.rb +102 -0
  354. data/lib/rubocop/cop/rails/inverse_of.rb +218 -0
  355. data/lib/rubocop/cop/rails/lexically_scoped_action_filter.rb +112 -0
  356. data/lib/rubocop/cop/rails/not_null_column.rb +67 -0
  357. data/lib/rubocop/cop/rails/output.rb +15 -13
  358. data/lib/rubocop/cop/rails/output_safety.rb +65 -17
  359. data/lib/rubocop/cop/rails/pluralization_grammar.rb +30 -29
  360. data/lib/rubocop/cop/rails/presence.rb +118 -0
  361. data/lib/rubocop/cop/rails/present.rb +143 -0
  362. data/lib/rubocop/cop/rails/read_write_attribute.rb +20 -26
  363. data/lib/rubocop/cop/rails/redundant_receiver_in_with_options.rb +133 -0
  364. data/lib/rubocop/cop/rails/relative_date_constant.rb +88 -0
  365. data/lib/rubocop/cop/rails/request_referer.rb +28 -13
  366. data/lib/rubocop/cop/rails/reversible_migration.rb +281 -0
  367. data/lib/rubocop/cop/rails/safe_navigation.rb +90 -0
  368. data/lib/rubocop/cop/rails/save_bang.rb +104 -19
  369. data/lib/rubocop/cop/rails/scope_args.rb +5 -10
  370. data/lib/rubocop/cop/rails/skips_model_validations.rb +70 -0
  371. data/lib/rubocop/cop/rails/time_zone.rb +34 -21
  372. data/lib/rubocop/cop/rails/uniq_before_pluck.rb +17 -14
  373. data/lib/rubocop/cop/rails/unknown_env.rb +63 -0
  374. data/lib/rubocop/cop/rails/validation.rb +16 -20
  375. data/lib/rubocop/cop/registry.rb +172 -0
  376. data/lib/rubocop/cop/security/eval.rb +30 -0
  377. data/lib/rubocop/cop/security/json_load.rb +46 -0
  378. data/lib/rubocop/cop/security/marshal_load.rb +39 -0
  379. data/lib/rubocop/cop/security/yaml_load.rb +37 -0
  380. data/lib/rubocop/cop/severity.rb +1 -2
  381. data/lib/rubocop/cop/style/alias.rb +54 -33
  382. data/lib/rubocop/cop/style/and_or.rb +77 -63
  383. data/lib/rubocop/cop/style/array_join.rb +13 -9
  384. data/lib/rubocop/cop/style/ascii_comments.rb +25 -7
  385. data/lib/rubocop/cop/style/attr.rb +24 -11
  386. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +21 -16
  387. data/lib/rubocop/cop/style/bare_percent_literals.rb +31 -11
  388. data/lib/rubocop/cop/style/begin_block.rb +1 -2
  389. data/lib/rubocop/cop/style/block_comments.rb +20 -11
  390. data/lib/rubocop/cop/style/block_delimiters.rb +122 -51
  391. data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +142 -54
  392. data/lib/rubocop/cop/style/case_equality.rb +15 -4
  393. data/lib/rubocop/cop/style/character_literal.rb +12 -5
  394. data/lib/rubocop/cop/style/class_and_module_children.rb +85 -6
  395. data/lib/rubocop/cop/style/class_check.rb +35 -19
  396. data/lib/rubocop/cop/style/class_methods.rb +13 -14
  397. data/lib/rubocop/cop/style/class_vars.rb +5 -5
  398. data/lib/rubocop/cop/style/collection_methods.rb +12 -13
  399. data/lib/rubocop/cop/style/colon_method_call.rb +24 -16
  400. data/lib/rubocop/cop/style/colon_method_definition.rb +36 -0
  401. data/lib/rubocop/cop/style/command_literal.rb +98 -32
  402. data/lib/rubocop/cop/style/comment_annotation.rb +41 -15
  403. data/lib/rubocop/cop/style/commented_keyword.rb +84 -0
  404. data/lib/rubocop/cop/style/conditional_assignment.rb +161 -112
  405. data/lib/rubocop/cop/style/copyright.rb +32 -34
  406. data/lib/rubocop/cop/style/date_time.rb +44 -0
  407. data/lib/rubocop/cop/style/def_with_parentheses.rb +32 -9
  408. data/lib/rubocop/cop/style/dir.rb +48 -0
  409. data/lib/rubocop/cop/style/documentation.rb +44 -58
  410. data/lib/rubocop/cop/style/documentation_method.rb +76 -0
  411. data/lib/rubocop/cop/style/double_negation.rb +3 -3
  412. data/lib/rubocop/cop/style/each_for_simple_loop.rb +14 -13
  413. data/lib/rubocop/cop/style/each_with_object.rb +28 -25
  414. data/lib/rubocop/cop/style/empty_block_parameter.rb +47 -0
  415. data/lib/rubocop/cop/style/empty_case_condition.rb +18 -30
  416. data/lib/rubocop/cop/style/empty_else.rb +82 -51
  417. data/lib/rubocop/cop/style/empty_lambda_parameter.rb +43 -0
  418. data/lib/rubocop/cop/style/empty_literal.rb +76 -48
  419. data/lib/rubocop/cop/style/empty_method.rb +112 -0
  420. data/lib/rubocop/cop/style/encoding.rb +10 -40
  421. data/lib/rubocop/cop/style/end_block.rb +1 -2
  422. data/lib/rubocop/cop/style/eval_with_location.rb +146 -0
  423. data/lib/rubocop/cop/style/even_odd.rb +25 -44
  424. data/lib/rubocop/cop/style/flip_flop.rb +13 -3
  425. data/lib/rubocop/cop/style/for.rb +19 -15
  426. data/lib/rubocop/cop/style/format_string.rb +88 -42
  427. data/lib/rubocop/cop/style/format_string_token.rb +163 -0
  428. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +90 -15
  429. data/lib/rubocop/cop/style/global_vars.rb +14 -5
  430. data/lib/rubocop/cop/style/guard_clause.rb +22 -62
  431. data/lib/rubocop/cop/style/hash_syntax.rb +109 -59
  432. data/lib/rubocop/cop/style/identical_conditional_branches.rb +73 -32
  433. data/lib/rubocop/cop/style/if_inside_else.rb +16 -20
  434. data/lib/rubocop/cop/style/if_unless_modifier.rb +48 -39
  435. data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +6 -12
  436. data/lib/rubocop/cop/style/if_with_semicolon.rb +10 -2
  437. data/lib/rubocop/cop/style/implicit_runtime_error.rb +7 -7
  438. data/lib/rubocop/cop/style/infinite_loop.rb +33 -32
  439. data/lib/rubocop/cop/style/inline_comment.rb +17 -5
  440. data/lib/rubocop/cop/style/inverse_methods.rb +149 -0
  441. data/lib/rubocop/cop/style/lambda.rb +66 -63
  442. data/lib/rubocop/cop/style/lambda_call.rb +50 -20
  443. data/lib/rubocop/cop/style/line_end_concatenation.rb +38 -17
  444. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +90 -0
  445. data/lib/rubocop/cop/style/{method_call_parentheses.rb → method_call_without_args_parentheses.rb} +32 -25
  446. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +9 -9
  447. data/lib/rubocop/cop/style/method_def_parentheses.rb +101 -29
  448. data/lib/rubocop/cop/style/method_missing.rb +14 -20
  449. data/lib/rubocop/cop/style/min_max.rb +68 -0
  450. data/lib/rubocop/cop/style/missing_else.rb +61 -21
  451. data/lib/rubocop/cop/style/mixin_grouping.rb +145 -0
  452. data/lib/rubocop/cop/style/mixin_usage.rb +82 -0
  453. data/lib/rubocop/cop/style/module_function.rb +44 -18
  454. data/lib/rubocop/cop/style/multiline_block_chain.rb +8 -15
  455. data/lib/rubocop/cop/style/multiline_if_modifier.rb +67 -0
  456. data/lib/rubocop/cop/style/multiline_if_then.rb +21 -14
  457. data/lib/rubocop/cop/style/multiline_memoization.rb +93 -0
  458. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +21 -9
  459. data/lib/rubocop/cop/style/multiple_comparison.rb +77 -0
  460. data/lib/rubocop/cop/style/mutable_constant.rb +17 -9
  461. data/lib/rubocop/cop/style/negated_if.rb +76 -25
  462. data/lib/rubocop/cop/style/negated_while.rb +4 -22
  463. data/lib/rubocop/cop/style/nested_modifier.rb +17 -47
  464. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +32 -28
  465. data/lib/rubocop/cop/style/nested_ternary_operator.rb +3 -6
  466. data/lib/rubocop/cop/style/next.rb +72 -53
  467. data/lib/rubocop/cop/style/nil_comparison.rb +10 -14
  468. data/lib/rubocop/cop/style/non_nil_check.rb +69 -62
  469. data/lib/rubocop/cop/style/not.rb +19 -13
  470. data/lib/rubocop/cop/style/numeric_literal_prefix.rb +16 -7
  471. data/lib/rubocop/cop/style/numeric_literals.rb +33 -12
  472. data/lib/rubocop/cop/style/numeric_predicate.rb +30 -32
  473. data/lib/rubocop/cop/style/one_line_conditional.rb +21 -17
  474. data/lib/rubocop/cop/style/option_hash.rb +11 -37
  475. data/lib/rubocop/cop/style/optional_arguments.rb +20 -9
  476. data/lib/rubocop/cop/style/or_assignment.rb +88 -0
  477. data/lib/rubocop/cop/style/parallel_assignment.rb +83 -64
  478. data/lib/rubocop/cop/style/parentheses_around_condition.rb +37 -19
  479. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +50 -15
  480. data/lib/rubocop/cop/style/percent_q_literals.rb +40 -17
  481. data/lib/rubocop/cop/style/perl_backrefs.rb +9 -3
  482. data/lib/rubocop/cop/style/preferred_hash_methods.rb +48 -14
  483. data/lib/rubocop/cop/style/proc.rb +13 -10
  484. data/lib/rubocop/cop/style/raise_args.rb +46 -50
  485. data/lib/rubocop/cop/style/random_with_offset.rb +160 -0
  486. data/lib/rubocop/cop/style/redundant_begin.rb +16 -6
  487. data/lib/rubocop/cop/style/redundant_conditional.rb +96 -0
  488. data/lib/rubocop/cop/style/redundant_exception.rb +4 -5
  489. data/lib/rubocop/cop/style/redundant_freeze.rb +7 -10
  490. data/lib/rubocop/cop/style/redundant_parentheses.rb +70 -31
  491. data/lib/rubocop/cop/style/redundant_return.rb +61 -23
  492. data/lib/rubocop/cop/style/redundant_self.rb +62 -60
  493. data/lib/rubocop/cop/style/regexp_literal.rb +100 -34
  494. data/lib/rubocop/cop/style/rescue_modifier.rb +15 -17
  495. data/lib/rubocop/cop/style/rescue_standard_error.rb +122 -0
  496. data/lib/rubocop/cop/style/return_nil.rb +89 -0
  497. data/lib/rubocop/cop/style/safe_navigation.rb +197 -0
  498. data/lib/rubocop/cop/style/self_assignment.rb +20 -17
  499. data/lib/rubocop/cop/style/semicolon.rb +25 -17
  500. data/lib/rubocop/cop/style/send.rb +14 -4
  501. data/lib/rubocop/cop/style/signal_exception.rb +105 -7
  502. data/lib/rubocop/cop/style/single_line_block_params.rb +27 -21
  503. data/lib/rubocop/cop/style/single_line_methods.rb +45 -31
  504. data/lib/rubocop/cop/style/special_global_vars.rb +32 -28
  505. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +24 -53
  506. data/lib/rubocop/cop/style/stderr_puts.rb +54 -0
  507. data/lib/rubocop/cop/style/string_hash_keys.rb +36 -0
  508. data/lib/rubocop/cop/style/string_literals.rb +31 -5
  509. data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +20 -2
  510. data/lib/rubocop/cop/style/string_methods.rb +22 -9
  511. data/lib/rubocop/cop/style/struct_inheritance.rb +5 -17
  512. data/lib/rubocop/cop/style/symbol_array.rb +39 -65
  513. data/lib/rubocop/cop/style/symbol_literal.rb +1 -2
  514. data/lib/rubocop/cop/style/symbol_proc.rb +35 -52
  515. data/lib/rubocop/cop/style/ternary_parentheses.rb +143 -42
  516. data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +101 -0
  517. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +31 -20
  518. data/lib/rubocop/cop/style/trailing_comma_in_literal.rb +26 -8
  519. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +95 -0
  520. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +97 -37
  521. data/lib/rubocop/cop/style/trivial_accessors.rb +72 -66
  522. data/lib/rubocop/cop/style/unless_else.rb +19 -13
  523. data/lib/rubocop/cop/style/unneeded_capital_w.rb +24 -10
  524. data/lib/rubocop/cop/style/unneeded_interpolation.rb +22 -24
  525. data/lib/rubocop/cop/style/unneeded_percent_q.rb +28 -22
  526. data/lib/rubocop/cop/style/variable_interpolation.rb +23 -10
  527. data/lib/rubocop/cop/style/when_then.rb +18 -4
  528. data/lib/rubocop/cop/style/while_until_do.rb +34 -16
  529. data/lib/rubocop/cop/style/while_until_modifier.rb +32 -12
  530. data/lib/rubocop/cop/style/word_array.rb +45 -102
  531. data/lib/rubocop/cop/style/yoda_condition.rb +107 -0
  532. data/lib/rubocop/cop/style/zero_length_predicate.rb +55 -32
  533. data/lib/rubocop/cop/team.rb +33 -35
  534. data/lib/rubocop/cop/util.rb +120 -54
  535. data/lib/rubocop/cop/variable_force/assignment.rb +5 -9
  536. data/lib/rubocop/cop/variable_force/branch.rb +318 -0
  537. data/lib/rubocop/cop/variable_force/branchable.rb +21 -0
  538. data/lib/rubocop/cop/variable_force/reference.rb +1 -2
  539. data/lib/rubocop/cop/variable_force/scope.rb +37 -26
  540. data/lib/rubocop/cop/variable_force/variable.rb +12 -12
  541. data/lib/rubocop/cop/variable_force/variable_table.rb +3 -4
  542. data/lib/rubocop/cop/variable_force.rb +72 -39
  543. data/lib/rubocop/error.rb +0 -1
  544. data/lib/rubocop/formatter/base_formatter.rb +4 -9
  545. data/lib/rubocop/formatter/clang_style_formatter.rb +2 -3
  546. data/lib/rubocop/formatter/colorizable.rb +9 -10
  547. data/lib/rubocop/formatter/disabled_config_formatter.rb +48 -35
  548. data/lib/rubocop/formatter/disabled_lines_formatter.rb +0 -1
  549. data/lib/rubocop/formatter/emacs_style_formatter.rb +0 -1
  550. data/lib/rubocop/formatter/file_list_formatter.rb +0 -1
  551. data/lib/rubocop/formatter/formatter_set.rb +16 -13
  552. data/lib/rubocop/formatter/fuubar_style_formatter.rb +6 -1
  553. data/lib/rubocop/formatter/html_formatter.rb +5 -5
  554. data/lib/rubocop/formatter/json_formatter.rb +9 -4
  555. data/lib/rubocop/formatter/offense_count_formatter.rb +2 -1
  556. data/lib/rubocop/formatter/progress_formatter.rb +0 -1
  557. data/lib/rubocop/formatter/quiet_formatter.rb +13 -0
  558. data/lib/rubocop/formatter/simple_text_formatter.rb +7 -17
  559. data/lib/rubocop/formatter/tap_formatter.rb +71 -0
  560. data/lib/rubocop/formatter/text_util.rb +0 -1
  561. data/lib/rubocop/formatter/worst_offenders_formatter.rb +6 -5
  562. data/lib/rubocop/magic_comment.rb +210 -0
  563. data/lib/rubocop/name_similarity.rb +0 -1
  564. data/lib/rubocop/node_pattern.rb +181 -118
  565. data/lib/rubocop/options.rb +154 -88
  566. data/lib/rubocop/path_util.rb +38 -4
  567. data/lib/rubocop/platform.rb +11 -0
  568. data/lib/rubocop/processed_source.rb +23 -20
  569. data/lib/rubocop/rake_task.rb +16 -24
  570. data/lib/rubocop/remote_config.rb +40 -13
  571. data/lib/rubocop/result_cache.rb +33 -24
  572. data/lib/rubocop/rspec/cop_helper.rb +21 -7
  573. data/lib/rubocop/rspec/expect_offense.rb +165 -0
  574. data/lib/rubocop/rspec/host_environment_simulation_helper.rb +1 -2
  575. data/lib/rubocop/rspec/shared_contexts.rb +24 -9
  576. data/lib/rubocop/rspec/shared_examples.rb +10 -19
  577. data/lib/rubocop/rspec/support.rb +5 -5
  578. data/lib/rubocop/runner.rb +74 -39
  579. data/lib/rubocop/string_interpreter.rb +0 -1
  580. data/lib/rubocop/string_util.rb +11 -6
  581. data/lib/rubocop/target_finder.rb +70 -8
  582. data/lib/rubocop/token.rb +79 -2
  583. data/lib/rubocop/version.rb +2 -5
  584. data/lib/rubocop/warning.rb +0 -1
  585. data/lib/rubocop.rb +569 -398
  586. metadata +301 -112
  587. data/lib/rubocop/ast_node/builder.rb +0 -31
  588. data/lib/rubocop/ast_node/sexp.rb +0 -14
  589. data/lib/rubocop/ast_node.rb +0 -623
  590. data/lib/rubocop/cop/lint/eval.rb +0 -23
  591. data/lib/rubocop/cop/lint/invalid_character_literal.rb +0 -39
  592. data/lib/rubocop/cop/lint/useless_array_splat.rb +0 -56
  593. data/lib/rubocop/cop/mixin/access_modifier_node.rb +0 -42
  594. data/lib/rubocop/cop/mixin/autocorrect_alignment.rb +0 -152
  595. data/lib/rubocop/cop/mixin/hash_node.rb +0 -15
  596. data/lib/rubocop/cop/mixin/if_node.rb +0 -37
  597. data/lib/rubocop/cop/mixin/on_method_def.rb +0 -31
  598. data/lib/rubocop/cop/mixin/space_inside.rb +0 -79
  599. data/lib/rubocop/cop/performance/hash_each.rb +0 -86
  600. data/lib/rubocop/cop/performance/push_splat.rb +0 -47
  601. data/lib/rubocop/cop/style/accessor_method_name.rb +0 -46
  602. data/lib/rubocop/cop/style/align_array.rb +0 -21
  603. data/lib/rubocop/cop/style/align_hash.rb +0 -256
  604. data/lib/rubocop/cop/style/case_indentation.rb +0 -92
  605. data/lib/rubocop/cop/style/class_and_module_camel_case.rb +0 -30
  606. data/lib/rubocop/cop/style/constant_name.rb +0 -30
  607. data/lib/rubocop/cop/style/empty_line_between_defs.rb +0 -76
  608. data/lib/rubocop/cop/style/empty_lines_around_class_body.rb +0 -40
  609. data/lib/rubocop/cop/style/end_of_line.rb +0 -31
  610. data/lib/rubocop/cop/style/initial_indentation.rb +0 -38
  611. data/lib/rubocop/cop/style/leading_comment_space.rb +0 -33
  612. data/lib/rubocop/cop/style/method_name.rb +0 -29
  613. data/lib/rubocop/cop/style/multiline_method_call_indentation.rb +0 -176
  614. data/lib/rubocop/cop/style/op_method.rb +0 -44
  615. data/lib/rubocop/cop/style/predicate_name.rb +0 -68
  616. data/lib/rubocop/cop/style/space_after_comma.rb +0 -22
  617. data/lib/rubocop/cop/style/space_after_not.rb +0 -42
  618. data/lib/rubocop/cop/style/space_around_operators.rb +0 -132
  619. data/lib/rubocop/cop/style/space_before_block_braces.rb +0 -65
  620. data/lib/rubocop/cop/style/space_before_comma.rb +0 -17
  621. data/lib/rubocop/cop/style/space_before_semicolon.rb +0 -17
  622. data/lib/rubocop/cop/style/space_inside_block_braces.rb +0 -166
  623. data/lib/rubocop/cop/style/space_inside_brackets.rb +0 -21
  624. data/lib/rubocop/cop/style/space_inside_parens.rb +0 -17
  625. data/lib/rubocop/cop/style/space_inside_string_interpolation.rb +0 -52
  626. data/lib/rubocop/cop/style/variable_name.rb +0 -40
  627. data/lib/rubocop/cop/variable_force/locatable.rb +0 -197
data/config/default.yml CHANGED
@@ -9,95 +9,128 @@ inherit_from:
9
9
  AllCops:
10
10
  # Include common Ruby source files.
11
11
  Include:
12
+ - '**/*.builder'
13
+ - '**/*.fcgi'
12
14
  - '**/*.gemspec'
13
- - '**/*.podspec'
15
+ - '**/*.god'
16
+ - '**/*.jb'
14
17
  - '**/*.jbuilder'
15
- - '**/*.rake'
18
+ - '**/*.mspec'
16
19
  - '**/*.opal'
20
+ - '**/*.pluginspec'
21
+ - '**/*.podspec'
22
+ - '**/*.rabl'
23
+ - '**/*.rake'
24
+ - '**/*.rbuild'
25
+ - '**/*.rbw'
26
+ - '**/*.rbx'
27
+ - '**/*.ru'
28
+ - '**/*.ruby'
29
+ - '**/*.spec'
30
+ - '**/*.thor'
31
+ - '**/*.watchr'
32
+ - '**/.irbrc'
33
+ - '**/.pryrc'
34
+ - '**/buildfile'
17
35
  - '**/config.ru'
18
- - '**/Gemfile'
19
- - '**/Rakefile'
36
+ - '**/Appraisals'
37
+ - '**/Berksfile'
38
+ - '**/Brewfile'
39
+ - '**/Buildfile'
20
40
  - '**/Capfile'
41
+ - '**/Cheffile'
42
+ - '**/Dangerfile'
43
+ - '**/Deliverfile'
44
+ - '**/Fastfile'
45
+ - '**/*Fastfile'
46
+ - '**/Gemfile'
21
47
  - '**/Guardfile'
48
+ - '**/Jarfile'
49
+ - '**/Mavenfile'
22
50
  - '**/Podfile'
51
+ - '**/Puppetfile'
52
+ - '**/Rakefile'
53
+ - '**/Snapfile'
23
54
  - '**/Thorfile'
24
- - '**/Vagrantfile'
25
- - '**/Berksfile'
26
- - '**/Cheffile'
27
55
  - '**/Vagabondfile'
28
- - '**/Fastfile'
29
- - '**/*Fastfile'
56
+ - '**/Vagrantfile'
30
57
  Exclude:
58
+ - 'node_modules/**/*'
31
59
  - 'vendor/**/*'
32
- # Default formatter will be used if no -f/--format option is given.
60
+ # Default formatter will be used if no `-f/--format` option is given.
33
61
  DefaultFormatter: progress
34
- # Cop names are not displayed in offense messages by default. Change behavior
35
- # by overriding DisplayCopNames, or by giving the -D/--display-cop-names
62
+ # Cop names are displayed in offense messages by default. Change behavior
63
+ # by overriding DisplayCopNames, or by giving the `--no-display-cop-names`
36
64
  # option.
37
- DisplayCopNames: false
65
+ DisplayCopNames: true
38
66
  # Style guide URLs are not displayed in offense messages by default. Change
39
- # behavior by overriding DisplayStyleGuide, or by giving the
40
- # -S/--display-style-guide option.
67
+ # behavior by overriding `DisplayStyleGuide`, or by giving the
68
+ # `-S/--display-style-guide` option.
41
69
  DisplayStyleGuide: false
70
+ # When specifying style guide URLs, any paths and/or fragments will be
71
+ # evaluated relative to the base URL.
72
+ StyleGuideBaseURL: https://github.com/bbatsov/ruby-style-guide
42
73
  # Extra details are not displayed in offense messages by default. Change
43
74
  # behavior by overriding ExtraDetails, or by giving the
44
- # -E/--extra-details option.
75
+ # `-E/--extra-details` option.
45
76
  ExtraDetails: false
46
77
  # Additional cops that do not reference a style guide rule may be enabled by
47
- # default. Change behavior by overriding StyleGuideCopsOnly, or by giving
48
- # the --only-guide-cops option.
78
+ # default. Change behavior by overriding `StyleGuideCopsOnly`, or by giving
79
+ # the `--only-guide-cops` option.
49
80
  StyleGuideCopsOnly: false
50
81
  # All cops except the ones in disabled.yml are enabled by default. Change
51
- # this behavior by overriding DisabledByDefault. When DisabledByDefault is
52
- # true, all cops in the default configuration are disabled, and and only cops
53
- # in user configuration are enabled. This makes cops opt-in instead of
54
- # opt-out. Note that when DisabledByDefault is true, cops in user
55
- # configuration will be enabled even if they don't set the Enabled parameter.
82
+ # this behavior by overriding either `DisabledByDefault` or `EnabledByDefault`.
83
+ # When `DisabledByDefault` is `true`, all cops in the default configuration
84
+ # are disabled, and only cops in user configuration are enabled. This makes
85
+ # cops opt-in instead of opt-out. Note that when `DisabledByDefault` is `true`,
86
+ # cops in user configuration will be enabled even if they don't set the
87
+ # Enabled parameter.
88
+ # When `EnabledByDefault` is `true`, all cops, even those in disabled.yml,
89
+ # are enabled by default. Cops can still be disabled in user configuration.
90
+ # Note that it is invalid to set both EnabledByDefault and DisabledByDefault
91
+ # to true in the same configuration.
92
+ EnabledByDefault: false
56
93
  DisabledByDefault: false
57
- # Enables the result cache if true. Can be overridden by the --cache command
94
+ # Enables the result cache if `true`. Can be overridden by the `--cache` command
58
95
  # line option.
59
96
  UseCache: true
60
97
  # Threshold for how many files can be stored in the result cache before some
61
98
  # of the files are automatically removed.
62
99
  MaxFilesInCache: 20000
63
- # The cache will be stored in "rubocop_cache" under this directory. The name
64
- # "/tmp" is special and will be converted to the system temporary directory,
65
- # which is "/tmp" on Unix-like systems, but could be something else on other
66
- # systems.
67
- CacheRootDirectory: /tmp
68
- # The default cache root directory is /tmp, which on most systems is
69
- # writable by any system user. This means that it is possible for a
70
- # malicious user to anticipate the location of Rubocop's cache directory,
71
- # and create a symlink in its place that could cause Rubocop to overwrite
72
- # unintended files, or read malicious input. If you are certain that your
73
- # cache location is secure from this kind of attack, and wish to use a
74
- # symlinked cache location, set this value to "true".
100
+ # The cache will be stored in "rubocop_cache" under this directory. If
101
+ # CacheRootDirectory is ~ (nil), which it is by default, the root will be
102
+ # taken from the environment variable `$XDG_CACHE_HOME` if it is set, or if
103
+ # `$XDG_CACHE_HOME` is not set, it will be `$HOME/.cache/`.
104
+ CacheRootDirectory: ~
105
+ # It is possible for a malicious user to know the location of RuboCop's cache
106
+ # directory by looking at CacheRootDirectory, and create a symlink in its
107
+ # place that could cause RuboCop to overwrite unintended files, or read
108
+ # malicious input. If you are certain that your cache location is secure from
109
+ # this kind of attack, and wish to use a symlinked cache location, set this
110
+ # value to "true".
75
111
  AllowSymlinksInCacheRootDirectory: false
76
112
  # What MRI version of the Ruby interpreter is the inspected code intended to
77
113
  # run on? (If there is more than one, set this to the lowest version.)
78
114
  # If a value is specified for TargetRubyVersion then it is used.
79
115
  # Else if .ruby-version exists and it contains an MRI version it is used.
80
- # Otherwise we fallback to the oldest officially supported Ruby version (2.0).
116
+ # Otherwise we fallback to the oldest officially supported Ruby version (2.1).
81
117
  TargetRubyVersion: ~
118
+ TargetRailsVersion: 5.0
119
+
120
+ #################### Layout ###########################
82
121
 
83
122
  # Indent private/protected/public as deep as method definitions
84
- Style/AccessModifierIndentation:
123
+ Layout/AccessModifierIndentation:
85
124
  EnforcedStyle: indent
86
125
  SupportedStyles:
87
126
  - outdent
88
127
  - indent
89
- # By default, the indentation width from Style/IndentationWidth is used
128
+ # By default, the indentation width from Layout/IndentationWidth is used
90
129
  # But it can be overridden by setting this parameter
91
130
  IndentationWidth: ~
92
131
 
93
- Style/Alias:
94
- EnforcedStyle: prefer_alias
95
- SupportedStyles:
96
- - prefer_alias
97
- - prefer_alias_method
98
-
99
132
  # Align the elements of a hash literal if they span more than one line.
100
- Style/AlignHash:
133
+ Layout/AlignHash:
101
134
  # Alignment of entries using hash rocket as separator. Valid values are:
102
135
  #
103
136
  # key - left alignment of keys
@@ -110,6 +143,10 @@ Style/AlignHash:
110
143
  # 'a' => 2
111
144
  # 'bb' => 3
112
145
  EnforcedHashRocketStyle: key
146
+ SupportedHashRocketStyles:
147
+ - key
148
+ - separator
149
+ - table
113
150
  # Alignment of entries using colon as separator. Valid values are:
114
151
  #
115
152
  # key - left alignment of keys
@@ -122,6 +159,10 @@ Style/AlignHash:
122
159
  # a: 0
123
160
  # bb: 1
124
161
  EnforcedColonStyle: key
162
+ SupportedColonStyles:
163
+ - key
164
+ - separator
165
+ - table
125
166
  # Select whether hashes that are the last argument in a method call should be
126
167
  # inspected? Valid values are:
127
168
  #
@@ -160,7 +201,7 @@ Style/AlignHash:
160
201
  - ignore_implicit
161
202
  - ignore_explicit
162
203
 
163
- Style/AlignParameters:
204
+ Layout/AlignParameters:
164
205
  # Alignment of parameters in multi-line method calls.
165
206
  #
166
207
  # The `with_first_parameter` style aligns the following lines along the same
@@ -178,10 +219,490 @@ Style/AlignParameters:
178
219
  SupportedStyles:
179
220
  - with_first_parameter
180
221
  - with_fixed_indentation
181
- # By default, the indentation width from Style/IndentationWidth is used
222
+ # By default, the indentation width from Layout/IndentationWidth is used
223
+ # But it can be overridden by setting this parameter
224
+ IndentationWidth: ~
225
+
226
+ # Indentation of `when`.
227
+ Layout/CaseIndentation:
228
+ EnforcedStyle: case
229
+ SupportedStyles:
230
+ - case
231
+ - end
232
+ IndentOneStep: false
233
+ # By default, the indentation width from `Layout/IndentationWidth` is used.
234
+ # But it can be overridden by setting this parameter.
235
+ # This only matters if `IndentOneStep` is `true`
236
+ IndentationWidth: ~
237
+
238
+ # Multi-line method chaining should be done with leading dots.
239
+ Layout/DotPosition:
240
+ EnforcedStyle: leading
241
+ SupportedStyles:
242
+ - leading
243
+ - trailing
244
+
245
+ # Use empty lines between defs.
246
+ Layout/EmptyLineBetweenDefs:
247
+ # If `true`, this parameter means that single line method definitions don't
248
+ # need an empty line between them.
249
+ AllowAdjacentOneLineDefs: false
250
+ # Can be array to specify minimum and maximum number of empty lines, e.g. [1, 2]
251
+ NumberOfEmptyLines: 1
252
+
253
+ Layout/EmptyLinesAroundBlockBody:
254
+ EnforcedStyle: no_empty_lines
255
+ SupportedStyles:
256
+ - empty_lines
257
+ - no_empty_lines
258
+
259
+ Layout/EmptyLinesAroundClassBody:
260
+ EnforcedStyle: no_empty_lines
261
+ SupportedStyles:
262
+ - empty_lines
263
+ - empty_lines_except_namespace
264
+ - empty_lines_special
265
+ - no_empty_lines
266
+
267
+ Layout/EmptyLinesAroundModuleBody:
268
+ EnforcedStyle: no_empty_lines
269
+ SupportedStyles:
270
+ - empty_lines
271
+ - empty_lines_except_namespace
272
+ - empty_lines_special
273
+ - no_empty_lines
274
+
275
+ Layout/EndOfLine:
276
+ # The `native` style means that CR+LF (Carriage Return + Line Feed) is
277
+ # enforced on Windows, and LF is enforced on other platforms. The other styles
278
+ # mean LF and CR+LF, respectively.
279
+ EnforcedStyle: native
280
+ SupportedStyles:
281
+ - native
282
+ - lf
283
+ - crlf
284
+
285
+ Layout/ExtraSpacing:
286
+ # When true, allows most uses of extra spacing if the intent is to align
287
+ # things with the previous or next line, not counting empty lines or comment
288
+ # lines.
289
+ AllowForAlignment: true
290
+ # When true, forces the alignment of `=` in assignments on consecutive lines.
291
+ ForceEqualSignAlignment: false
292
+
293
+ Layout/FirstParameterIndentation:
294
+ EnforcedStyle: special_for_inner_method_call_in_parentheses
295
+ SupportedStyles:
296
+ # The first parameter should always be indented one step more than the
297
+ # preceding line.
298
+ - consistent
299
+ # The first parameter should normally be indented one step more than the
300
+ # preceding line, but if it's a parameter for a method call that is itself
301
+ # a parameter in a method call, then the inner parameter should be indented
302
+ # relative to the inner method.
303
+ - special_for_inner_method_call
304
+ # Same as `special_for_inner_method_call` except that the special rule only
305
+ # applies if the outer method call encloses its arguments in parentheses.
306
+ - special_for_inner_method_call_in_parentheses
307
+ # By default, the indentation width from `Layout/IndentationWidth` is used
308
+ # But it can be overridden by setting this parameter
309
+ IndentationWidth: ~
310
+
311
+ Layout/IndentationConsistency:
312
+ # The difference between `rails` and `normal` is that the `rails` style
313
+ # prescribes that in classes and modules the `protected` and `private`
314
+ # modifier keywords shall be indented the same as public methods and that
315
+ # protected and private members shall be indented one step more than the
316
+ # modifiers. Other than that, both styles mean that entities on the same
317
+ # logical depth shall have the same indentation.
318
+ EnforcedStyle: normal
319
+ SupportedStyles:
320
+ - normal
321
+ - rails
322
+
323
+ Layout/IndentationWidth:
324
+ # Number of spaces for each indentation level.
325
+ Width: 2
326
+ IgnoredPatterns: []
327
+
328
+ # Checks the indentation of the first element in an array literal.
329
+ Layout/IndentArray:
330
+ # The value `special_inside_parentheses` means that array literals with
331
+ # brackets that have their opening bracket on the same line as a surrounding
332
+ # opening round parenthesis, shall have their first element indented relative
333
+ # to the first position inside the parenthesis.
334
+ #
335
+ # The value `consistent` means that the indentation of the first element shall
336
+ # always be relative to the first position of the line where the opening
337
+ # bracket is.
338
+ #
339
+ # The value `align_brackets` means that the indentation of the first element
340
+ # shall always be relative to the position of the opening bracket.
341
+ EnforcedStyle: special_inside_parentheses
342
+ SupportedStyles:
343
+ - special_inside_parentheses
344
+ - consistent
345
+ - align_brackets
346
+ # By default, the indentation width from `Layout/IndentationWidth` is used
347
+ # But it can be overridden by setting this parameter
348
+ IndentationWidth: ~
349
+
350
+ # Checks the indentation of assignment RHS, when on a different line from LHS
351
+ Layout/IndentAssignment:
352
+ # By default, the indentation width from `Layout/IndentationWidth` is used
353
+ # But it can be overridden by setting this parameter
354
+ IndentationWidth: ~
355
+
356
+ # Checks the indentation of the first key in a hash literal.
357
+ Layout/IndentHash:
358
+ # The value `special_inside_parentheses` means that hash literals with braces
359
+ # that have their opening brace on the same line as a surrounding opening
360
+ # round parenthesis, shall have their first key indented relative to the
361
+ # first position inside the parenthesis.
362
+ #
363
+ # The value `consistent` means that the indentation of the first key shall
364
+ # always be relative to the first position of the line where the opening
365
+ # brace is.
366
+ #
367
+ # The value `align_braces` means that the indentation of the first key shall
368
+ # always be relative to the position of the opening brace.
369
+ EnforcedStyle: special_inside_parentheses
370
+ SupportedStyles:
371
+ - special_inside_parentheses
372
+ - consistent
373
+ - align_braces
374
+ # By default, the indentation width from `Layout/IndentationWidth` is used
375
+ # But it can be overridden by setting this parameter
376
+ IndentationWidth: ~
377
+
378
+ Layout/IndentHeredoc:
379
+ EnforcedStyle: auto_detection
380
+ SupportedStyles:
381
+ - auto_detection
382
+ - squiggly
383
+ - active_support
384
+ - powerpack
385
+ - unindent
386
+
387
+ Layout/SpaceInLambdaLiteral:
388
+ EnforcedStyle: require_no_space
389
+ SupportedStyles:
390
+ - require_no_space
391
+ - require_space
392
+
393
+ Layout/MultilineArrayBraceLayout:
394
+ EnforcedStyle: symmetrical
395
+ SupportedStyles:
396
+ # symmetrical: closing brace is positioned in same way as opening brace
397
+ # new_line: closing brace is always on a new line
398
+ # same_line: closing brace is always on the same line as last element
399
+ - symmetrical
400
+ - new_line
401
+ - same_line
402
+
403
+ Layout/MultilineAssignmentLayout:
404
+ # The types of assignments which are subject to this rule.
405
+ SupportedTypes:
406
+ - block
407
+ - case
408
+ - class
409
+ - if
410
+ - kwbegin
411
+ - module
412
+ EnforcedStyle: new_line
413
+ SupportedStyles:
414
+ # Ensures that the assignment operator and the rhs are on the same line for
415
+ # the set of supported types.
416
+ - same_line
417
+ # Ensures that the assignment operator and the rhs are on separate lines
418
+ # for the set of supported types.
419
+ - new_line
420
+
421
+ Layout/MultilineHashBraceLayout:
422
+ EnforcedStyle: symmetrical
423
+ SupportedStyles:
424
+ # symmetrical: closing brace is positioned in same way as opening brace
425
+ # new_line: closing brace is always on a new line
426
+ # same_line: closing brace is always on same line as last element
427
+ - symmetrical
428
+ - new_line
429
+ - same_line
430
+
431
+ Layout/MultilineMethodCallBraceLayout:
432
+ EnforcedStyle: symmetrical
433
+ SupportedStyles:
434
+ # symmetrical: closing brace is positioned in same way as opening brace
435
+ # new_line: closing brace is always on a new line
436
+ # same_line: closing brace is always on the same line as last argument
437
+ - symmetrical
438
+ - new_line
439
+ - same_line
440
+
441
+ Layout/MultilineMethodCallIndentation:
442
+ EnforcedStyle: aligned
443
+ SupportedStyles:
444
+ - aligned
445
+ - indented
446
+ - indented_relative_to_receiver
447
+ # By default, the indentation width from Layout/IndentationWidth is used
448
+ # But it can be overridden by setting this parameter
449
+ IndentationWidth: ~
450
+
451
+ Layout/MultilineMethodDefinitionBraceLayout:
452
+ EnforcedStyle: symmetrical
453
+ SupportedStyles:
454
+ # symmetrical: closing brace is positioned in same way as opening brace
455
+ # new_line: closing brace is always on a new line
456
+ # same_line: closing brace is always on the same line as last parameter
457
+ - symmetrical
458
+ - new_line
459
+ - same_line
460
+
461
+ Layout/MultilineOperationIndentation:
462
+ EnforcedStyle: aligned
463
+ SupportedStyles:
464
+ - aligned
465
+ - indented
466
+ # By default, the indentation width from `Layout/IndentationWidth` is used
467
+ # But it can be overridden by setting this parameter
468
+ IndentationWidth: ~
469
+
470
+ Layout/SpaceAroundBlockParameters:
471
+ EnforcedStyleInsidePipes: no_space
472
+ SupportedStylesInsidePipes:
473
+ - space
474
+ - no_space
475
+
476
+ Layout/SpaceAroundEqualsInParameterDefault:
477
+ EnforcedStyle: space
478
+ SupportedStyles:
479
+ - space
480
+ - no_space
481
+
482
+ Layout/SpaceAroundOperators:
483
+ # When `true`, allows most uses of extra spacing if the intent is to align
484
+ # with an operator on the previous or next line, not counting empty lines
485
+ # or comment lines.
486
+ AllowForAlignment: true
487
+
488
+ Layout/SpaceBeforeBlockBraces:
489
+ EnforcedStyle: space
490
+ SupportedStyles:
491
+ - space
492
+ - no_space
493
+ EnforcedStyleForEmptyBraces: space
494
+ SupportedStylesForEmptyBraces:
495
+ - space
496
+ - no_space
497
+
498
+ Layout/SpaceBeforeFirstArg:
499
+ # When `true`, allows most uses of extra spacing if the intent is to align
500
+ # things with the previous or next line, not counting empty lines or comment
501
+ # lines.
502
+ AllowForAlignment: true
503
+
504
+ Layout/SpaceInsideArrayLiteralBrackets:
505
+ EnforcedStyle: no_space
506
+ SupportedStyles:
507
+ - space
508
+ - no_space
509
+ # 'compact' normally requires a space inside the brackets, with the exception
510
+ # that successive left brackets or right brackets are collapsed together
511
+ - compact
512
+ EnforcedStyleForEmptyBrackets: no_space
513
+ SupportedStylesForEmptyBrackets:
514
+ - space
515
+ - no_space
516
+
517
+ Layout/SpaceInsideBlockBraces:
518
+ EnforcedStyle: space
519
+ SupportedStyles:
520
+ - space
521
+ - no_space
522
+ EnforcedStyleForEmptyBraces: no_space
523
+ SupportedStylesForEmptyBraces:
524
+ - space
525
+ - no_space
526
+ # Space between `{` and `|`. Overrides `EnforcedStyle` if there is a conflict.
527
+ SpaceBeforeBlockParameters: true
528
+
529
+ Layout/SpaceInsideHashLiteralBraces:
530
+ EnforcedStyle: space
531
+ SupportedStyles:
532
+ - space
533
+ - no_space
534
+ # 'compact' normally requires a space inside hash braces, with the exception
535
+ # that successive left braces or right braces are collapsed together
536
+ - compact
537
+ EnforcedStyleForEmptyBraces: no_space
538
+ SupportedStylesForEmptyBraces:
539
+ - space
540
+ - no_space
541
+
542
+ Layout/SpaceInsideReferenceBrackets:
543
+ EnforcedStyle: no_space
544
+ SupportedStyles:
545
+ - space
546
+ - no_space
547
+
548
+ Layout/SpaceInsideStringInterpolation:
549
+ EnforcedStyle: no_space
550
+ SupportedStyles:
551
+ - space
552
+ - no_space
553
+
554
+ Layout/ClassStructure:
555
+ Categories:
556
+ module_inclusion:
557
+ - include
558
+ - prepend
559
+ - extend
560
+ ExpectedOrder:
561
+ - module_inclusion
562
+ - constants
563
+ - public_class_methods
564
+ - initializer
565
+ - public_methods
566
+ - protected_methods
567
+ - private_methods
568
+
569
+ Layout/Tab:
570
+ # By default, the indentation width from Layout/IndentationWidth is used
182
571
  # But it can be overridden by setting this parameter
572
+ # It is used during auto-correction to determine how many spaces should
573
+ # replace each tab.
183
574
  IndentationWidth: ~
184
575
 
576
+ Layout/TrailingBlankLines:
577
+ EnforcedStyle: final_newline
578
+ SupportedStyles:
579
+ - final_newline
580
+ - final_blank_line
581
+
582
+ #################### Naming ##########################
583
+
584
+ Naming/FileName:
585
+ # File names listed in `AllCops:Include` are excluded by default. Add extra
586
+ # excludes here.
587
+ Exclude: []
588
+ # When `true`, requires that each source file should define a class or module
589
+ # with a name which matches the file name (converted to ... case).
590
+ # It further expects it to be nested inside modules which match the names
591
+ # of subdirectories in its path.
592
+ ExpectMatchingDefinition: false
593
+ # If non-`nil`, expect all source file names to match the following regex.
594
+ # Only the file name itself is matched, not the entire file path.
595
+ # Use anchors as necessary if you want to match the entire name rather than
596
+ # just a part of it.
597
+ Regex: ~
598
+ # With `IgnoreExecutableScripts` set to `true`, this cop does not
599
+ # report offending filenames for executable scripts (i.e. source
600
+ # files with a shebang in the first line).
601
+ IgnoreExecutableScripts: true
602
+ AllowedAcronyms:
603
+ - CLI
604
+ - DSL
605
+ - ACL
606
+ - API
607
+ - ASCII
608
+ - CPU
609
+ - CSS
610
+ - DNS
611
+ - EOF
612
+ - GUID
613
+ - HTML
614
+ - HTTP
615
+ - HTTPS
616
+ - ID
617
+ - IP
618
+ - JSON
619
+ - LHS
620
+ - QPS
621
+ - RAM
622
+ - RHS
623
+ - RPC
624
+ - SLA
625
+ - SMTP
626
+ - SQL
627
+ - SSH
628
+ - TCP
629
+ - TLS
630
+ - TTL
631
+ - UDP
632
+ - UI
633
+ - UID
634
+ - UUID
635
+ - URI
636
+ - URL
637
+ - UTF8
638
+ - VM
639
+ - XML
640
+ - XMPP
641
+ - XSRF
642
+ - XSS
643
+
644
+ Naming/HeredocDelimiterNaming:
645
+ Blacklist:
646
+ - END
647
+ - !ruby/regexp '/EO[A-Z]{1}/'
648
+
649
+ Naming/HeredocDelimiterCase:
650
+ EnforcedStyle: uppercase
651
+ SupportedStyles:
652
+ - lowercase
653
+ - uppercase
654
+
655
+ Naming/MethodName:
656
+ EnforcedStyle: snake_case
657
+ SupportedStyles:
658
+ - snake_case
659
+ - camelCase
660
+
661
+ Naming/PredicateName:
662
+ # Predicate name prefixes.
663
+ NamePrefix:
664
+ - is_
665
+ - has_
666
+ - have_
667
+ # Predicate name prefixes that should be removed.
668
+ NamePrefixBlacklist:
669
+ - is_
670
+ - has_
671
+ - have_
672
+ # Predicate names which, despite having a blacklisted prefix, or no `?`,
673
+ # should still be accepted
674
+ NameWhitelist:
675
+ - is_a?
676
+ # Method definition macros for dynamically generated methods.
677
+ MethodDefinitionMacros:
678
+ - define_method
679
+ - define_singleton_method
680
+ # Exclude Rspec specs because there is a strong convention to write spec
681
+ # helpers in the form of `have_something` or `be_something`.
682
+ Exclude:
683
+ - 'spec/**/*'
684
+
685
+ Naming/VariableName:
686
+ EnforcedStyle: snake_case
687
+ SupportedStyles:
688
+ - snake_case
689
+ - camelCase
690
+
691
+ Naming/VariableNumber:
692
+ EnforcedStyle: normalcase
693
+ SupportedStyles:
694
+ - snake_case
695
+ - normalcase
696
+ - non_integer
697
+
698
+ #################### Style ###########################
699
+
700
+ Style/Alias:
701
+ EnforcedStyle: prefer_alias
702
+ SupportedStyles:
703
+ - prefer_alias
704
+ - prefer_alias_method
705
+
185
706
  Style/AndOr:
186
707
  # Whether `and` and `or` are banned only in conditionals (conditionals)
187
708
  # or completely (always).
@@ -190,8 +711,10 @@ Style/AndOr:
190
711
  - always
191
712
  - conditionals
192
713
 
714
+ Style/AsciiComments:
715
+ AllowedChars: []
193
716
 
194
- # Checks if usage of %() or %Q() matches configuration.
717
+ # Checks if usage of `%()` or `%Q()` matches configuration.
195
718
  Style/BarePercentLiterals:
196
719
  EnforcedStyle: bare_percent
197
720
  SupportedStyles:
@@ -283,18 +806,6 @@ Style/BracesAroundHashParameters:
283
806
  # also a hash literal.
284
807
  - context_dependent
285
808
 
286
- # Indentation of `when`.
287
- Style/CaseIndentation:
288
- IndentWhenRelativeTo: case
289
- SupportedStyles:
290
- - case
291
- - end
292
- IndentOneStep: false
293
- # By default, the indentation width from Style/IndentationWidth is used
294
- # But it can be overridden by setting this parameter
295
- # This only matters if IndentOneStep is true
296
- IndentationWidth: ~
297
-
298
809
  Style/ClassAndModuleChildren:
299
810
  # Checks the style of children definitions at classes and modules.
300
811
  #
@@ -310,7 +821,7 @@ Style/ClassAndModuleChildren:
310
821
  # class Foo::Bar
311
822
  # end
312
823
  #
313
- # The compact style is only forced, for classes / modules with one child.
824
+ # The compact style is only forced, for classes or modules with one child.
314
825
  EnforcedStyle: nested
315
826
  SupportedStyles:
316
827
  - nested
@@ -337,17 +848,17 @@ Style/CollectionMethods:
337
848
  detect: 'find'
338
849
  find_all: 'select'
339
850
 
340
- # Use ` or %x around command literals.
851
+ # Use '`' or '%x' around command literals.
341
852
  Style/CommandLiteral:
342
853
  EnforcedStyle: backticks
343
854
  # backticks: Always use backticks.
344
- # percent_x: Always use %x.
345
- # mixed: Use backticks on single-line commands, and %x on multi-line commands.
855
+ # percent_x: Always use `%x`.
856
+ # mixed: Use backticks on single-line commands, and `%x` on multi-line commands.
346
857
  SupportedStyles:
347
858
  - backticks
348
859
  - percent_x
349
860
  - mixed
350
- # If false, the cop will always recommend using %x if one or more backticks
861
+ # If `false`, the cop will always recommend using `%x` if one or more backticks
351
862
  # are found in the command string.
352
863
  AllowInnerBackticks: false
353
864
 
@@ -372,14 +883,15 @@ Style/ConditionalAssignment:
372
883
  # will only register an offense for assignment to a condition that has
373
884
  # at least one multiline branch.
374
885
  SingleLineConditionsOnly: true
886
+ IncludeTernaryExpressions: true
375
887
 
376
888
  # Checks that you have put a copyright in a comment before any code.
377
889
  #
378
890
  # You can override the default Notice in your .rubocop.yml file.
379
891
  #
380
892
  # In order to use autocorrect, you must supply a value for the
381
- # AutocorrectNotice key that matches the regexp Notice. A blank
382
- # AutocorrectNotice will cause an error during autocorrect.
893
+ # `AutocorrectNotice` key that matches the regexp Notice. A blank
894
+ # `AutocorrectNotice` will cause an error during autocorrect.
383
895
  #
384
896
  # Autocorrect will add a copyright notice in a comment at the top
385
897
  # of the file immediately after any shebang or encoding comments.
@@ -395,17 +907,13 @@ Style/Copyright:
395
907
  Notice: '^Copyright (\(c\) )?2[0-9]{3} .+'
396
908
  AutocorrectNotice: ''
397
909
 
398
- # Multi-line method chaining should be done with leading dots.
399
- Style/DotPosition:
400
- EnforcedStyle: leading
401
- SupportedStyles:
402
- - leading
403
- - trailing
910
+ Style/DocumentationMethod:
911
+ RequireForNonPublicMethods: false
404
912
 
405
913
  # Warn on empty else statements
406
- # empty - warn only on empty else
407
- # nil - warn on else with nil in it
408
- # both - warn on empty else and else with nil in it
914
+ # empty - warn only on empty `else`
915
+ # nil - warn on `else` with nil in it
916
+ # both - warn on empty `else` and `else` with `nil` in it
409
917
  Style/EmptyElse:
410
918
  EnforcedStyle: both
411
919
  SupportedStyles:
@@ -413,85 +921,11 @@ Style/EmptyElse:
413
921
  - nil
414
922
  - both
415
923
 
416
- # Use empty lines between defs.
417
- Style/EmptyLineBetweenDefs:
418
- # If true, this parameter means that single line method definitions don't
419
- # need an empty line between them.
420
- AllowAdjacentOneLineDefs: false
421
-
422
- Style/EmptyLinesAroundBlockBody:
423
- EnforcedStyle: no_empty_lines
424
- SupportedStyles:
425
- - empty_lines
426
- - no_empty_lines
427
-
428
- Style/EmptyLinesAroundClassBody:
429
- EnforcedStyle: no_empty_lines
430
- SupportedStyles:
431
- - empty_lines
432
- - no_empty_lines
433
-
434
- Style/EmptyLinesAroundModuleBody:
435
- EnforcedStyle: no_empty_lines
924
+ Style/EmptyMethod:
925
+ EnforcedStyle: compact
436
926
  SupportedStyles:
437
- - empty_lines
438
- - no_empty_lines
439
-
440
- # Checks whether the source file has a utf-8 encoding comment or not
441
- # AutoCorrectEncodingComment must match the regex
442
- # /#.*coding\s?[:=]\s?(?:UTF|utf)-8/
443
- Style/Encoding:
444
- EnforcedStyle: never
445
- SupportedStyles:
446
- - when_needed
447
- - always
448
- - never
449
- AutoCorrectEncodingComment: '# encoding: utf-8'
450
-
451
- Style/ExtraSpacing:
452
- # When true, allows most uses of extra spacing if the intent is to align
453
- # things with the previous or next line, not counting empty lines or comment
454
- # lines.
455
- AllowForAlignment: true
456
- # When true, forces the alignment of = in assignments on consecutive lines.
457
- ForceEqualSignAlignment: false
458
-
459
- Style/FileName:
460
- # File names listed in AllCops:Include are excluded by default. Add extra
461
- # excludes here.
462
- Exclude: []
463
- # When true, requires that each source file should define a class or module
464
- # with a name which matches the file name (converted to ... case).
465
- # It further expects it to be nested inside modules which match the names
466
- # of subdirectories in its path.
467
- ExpectMatchingDefinition: false
468
- # If non-nil, expect all source file names to match the following regex.
469
- # Only the file name itself is matched, not the entire file path.
470
- # Use anchors as necessary if you want to match the entire name rather than
471
- # just a part of it.
472
- Regex: ~
473
- # With `IgnoreExecutableScripts` set to `true`, this cop does not
474
- # report offending filenames for executable scripts (i.e. source
475
- # files with a shebang in the first line).
476
- IgnoreExecutableScripts: true
477
-
478
- Style/FirstParameterIndentation:
479
- EnforcedStyle: special_for_inner_method_call_in_parentheses
480
- SupportedStyles:
481
- # The first parameter should always be indented one step more than the
482
- # preceding line.
483
- - consistent
484
- # The first parameter should normally be indented one step more than the
485
- # preceding line, but if it's a parameter for a method call that is itself
486
- # a parameter in a method call, then the inner parameter should be indented
487
- # relative to the inner method.
488
- - special_for_inner_method_call
489
- # Same as special_for_inner_method_call except that the special rule only
490
- # applies if the outer method call encloses its arguments in parentheses.
491
- - special_for_inner_method_call_in_parentheses
492
- # By default, the indentation width from Style/IndentationWidth is used
493
- # But it can be overridden by setting this parameter
494
- IndentationWidth: ~
927
+ - compact
928
+ - expanded
495
929
 
496
930
  # Checks use of for or each in multiline loops.
497
931
  Style/For:
@@ -508,6 +942,17 @@ Style/FormatString:
508
942
  - sprintf
509
943
  - percent
510
944
 
945
+ # Enforce using either `%<token>s` or `%{token}`
946
+ Style/FormatStringToken:
947
+ EnforcedStyle: annotated
948
+ SupportedStyles:
949
+ # Prefer tokens which contain a sprintf like type annotation like
950
+ # `%<name>s`, `%<age>d`, `%<score>f`
951
+ - annotated
952
+ # Prefer simple looking "template" style tokens like `%{name}`, `%{age}`
953
+ - template
954
+ - unannotated
955
+
511
956
  Style/FrozenStringLiteralComment:
512
957
  EnforcedStyle: when_needed
513
958
  SupportedStyles:
@@ -519,12 +964,15 @@ Style/FrozenStringLiteralComment:
519
964
  # string literal. If you run code against multiple versions of Ruby, it is
520
965
  # possible that this will create errors in Ruby 2.3.0+.
521
966
  - always
967
+ # `never` will enforce that the frozen string literal comment does not
968
+ # exist in a file.
969
+ - never
522
970
 
523
971
  # Built-in global variables are allowed by default.
524
972
  Style/GlobalVars:
525
973
  AllowedVariables: []
526
974
 
527
- # `MinBodyLength` defines the number of lines of the a body of an if / unless
975
+ # `MinBodyLength` defines the number of lines of the a body of an `if` or `unless`
528
976
  # needs to have to trigger this cop
529
977
  Style/GuardClause:
530
978
  MinBodyLength: 1
@@ -532,122 +980,56 @@ Style/GuardClause:
532
980
  Style/HashSyntax:
533
981
  EnforcedStyle: ruby19
534
982
  SupportedStyles:
983
+ # checks for 1.9 syntax (e.g. {a: 1}) for all symbol keys
535
984
  - ruby19
536
- - ruby19_no_mixed_keys
985
+ # checks for hash rocket syntax for all hashes
537
986
  - hash_rockets
987
+ # forbids mixed key syntaxes (e.g. {a: 1, :b => 2})
988
+ - no_mixed_keys
989
+ # enforces both ruby19 and no_mixed_keys styles
990
+ - ruby19_no_mixed_keys
538
991
  # Force hashes that have a symbol value to use hash rockets
539
992
  UseHashRocketsWithSymbolValues: false
540
993
  # Do not suggest { a?: 1 } over { :a? => 1 } in ruby19 style
541
994
  PreferHashRocketsForNonAlnumEndingSymbols: false
542
995
 
543
- Style/IfUnlessModifier:
544
- MaxLineLength: 80
545
-
546
- Style/IndentationConsistency:
547
- # The difference between `rails` and `normal` is that the `rails` style
548
- # prescribes that in classes and modules the `protected` and `private`
549
- # modifier keywords shall be indented the same as public methods and that
550
- # protected and private members shall be indented one step more than the
551
- # modifiers. Other than that, both styles mean that entities on the same
552
- # logical depth shall have the same indentation.
553
- EnforcedStyle: normal
554
- SupportedStyles:
555
- - normal
556
- - rails
557
-
558
- Style/IndentationWidth:
559
- # Number of spaces for each indentation level.
560
- Width: 2
561
-
562
- # Checks the indentation of the first element in an array literal.
563
- Style/IndentArray:
564
- # The value `special_inside_parentheses` means that array literals with
565
- # brackets that have their opening bracket on the same line as a surrounding
566
- # opening round parenthesis, shall have their first element indented relative
567
- # to the first position inside the parenthesis.
568
- #
569
- # The value `consistent` means that the indentation of the first element shall
570
- # always be relative to the first position of the line where the opening
571
- # bracket is.
572
- #
573
- # The value `align_brackets` means that the indentation of the first element
574
- # shall always be relative to the position of the opening bracket.
575
- EnforcedStyle: special_inside_parentheses
576
- SupportedStyles:
577
- - special_inside_parentheses
578
- - consistent
579
- - align_brackets
580
- # By default, the indentation width from Style/IndentationWidth is used
581
- # But it can be overridden by setting this parameter
582
- IndentationWidth: ~
583
-
584
- # Checks the indentation of assignment RHS, when on a different line from LHS
585
- Style/IndentAssignment:
586
- # By default, the indentation width from Style/IndentationWidth is used
587
- # But it can be overridden by setting this parameter
588
- IndentationWidth: ~
589
-
590
- # Checks the indentation of the first key in a hash literal.
591
- Style/IndentHash:
592
- # The value `special_inside_parentheses` means that hash literals with braces
593
- # that have their opening brace on the same line as a surrounding opening
594
- # round parenthesis, shall have their first key indented relative to the
595
- # first position inside the parenthesis.
596
- #
597
- # The value `consistent` means that the indentation of the first key shall
598
- # always be relative to the first position of the line where the opening
599
- # brace is.
600
- #
601
- # The value `align_braces` means that the indentation of the first key shall
602
- # always be relative to the position of the opening brace.
603
- EnforcedStyle: special_inside_parentheses
604
- SupportedStyles:
605
- - special_inside_parentheses
606
- - consistent
607
- - align_braces
608
- # By default, the indentation width from Style/IndentationWidth is used
609
- # But it can be overridden by setting this parameter
610
- IndentationWidth: ~
611
-
612
- Style/Lambda:
613
- EnforcedStyle: line_count_dependent
614
- SupportedStyles:
615
- - line_count_dependent
616
- - lambda
617
- - literal
618
-
619
- Style/LambdaCall:
620
- EnforcedStyle: call
621
- SupportedStyles:
622
- - call
623
- - braces
624
-
625
- Style/Next:
626
- # With `always` all conditions at the end of an iteration needs to be
627
- # replaced by next - with `skip_modifier_ifs` the modifier if like this one
628
- # are ignored: [1, 2].each { |a| return 'yes' if a == 1 }
629
- EnforcedStyle: skip_modifier_ifs
630
- # `MinBodyLength` defines the number of lines of the a body of an if / unless
631
- # needs to have to trigger this cop
632
- MinBodyLength: 3
633
- SupportedStyles:
634
- - skip_modifier_ifs
635
- - always
636
-
637
- Style/NonNilCheck:
638
- # With `IncludeSemanticChanges` set to `true`, this cop reports offenses for
639
- # `!x.nil?` and autocorrects that and `x != nil` to solely `x`, which is
640
- # **usually** OK, but might change behavior.
641
- #
642
- # With `IncludeSemanticChanges` set to `false`, this cop does not report
643
- # offenses for `!x.nil?` and does no changes that might change behavior.
644
- IncludeSemanticChanges: false
645
-
646
- Style/NumericPredicate:
647
- EnforcedStyle: predicate
996
+ Style/InverseMethods:
997
+ # `InverseMethods` are methods that can be inverted by a not (`not` or `!`)
998
+ # The relationship of inverse methods only needs to be defined in one direction.
999
+ # Keys and values both need to be defined as symbols.
1000
+ InverseMethods:
1001
+ :any?: :none?
1002
+ :even?: :odd?
1003
+ :==: :!=
1004
+ :=~: :!~
1005
+ :<: :>=
1006
+ :>: :<=
1007
+ # `ActiveSupport` defines some common inverse methods. They are listed below,
1008
+ # and not enabled by default.
1009
+ #:present?: :blank?,
1010
+ #:include?: :exclude?
1011
+ # `InverseBlocks` are methods that are inverted by inverting the return
1012
+ # of the block that is passed to the method
1013
+ InverseBlocks:
1014
+ :select: :reject
1015
+ :select!: :reject!
1016
+
1017
+ Style/Lambda:
1018
+ EnforcedStyle: line_count_dependent
648
1019
  SupportedStyles:
649
- - predicate
650
- - comparison
1020
+ - line_count_dependent
1021
+ - lambda
1022
+ - literal
1023
+
1024
+ Style/LambdaCall:
1025
+ EnforcedStyle: call
1026
+ SupportedStyles:
1027
+ - call
1028
+ - braces
1029
+
1030
+ Style/MethodCallWithArgsParentheses:
1031
+ IgnoreMacros: true
1032
+ IgnoredMethods: []
651
1033
 
652
1034
  Style/MethodDefParentheses:
653
1035
  EnforcedStyle: require_parentheses
@@ -656,11 +1038,15 @@ Style/MethodDefParentheses:
656
1038
  - require_no_parentheses
657
1039
  - require_no_parentheses_except_multiline
658
1040
 
659
- Style/MethodName:
660
- EnforcedStyle: snake_case
1041
+ # Checks the grouping of mixins (`include`, `extend`, `prepend`) in `class` and
1042
+ # `module` bodies.
1043
+ Style/MixinGrouping:
1044
+ EnforcedStyle: separated
661
1045
  SupportedStyles:
662
- - snake_case
663
- - camelCase
1046
+ # separated: each mixed in module goes in a separate statement.
1047
+ # grouped: mixed in modules are grouped into a single statement.
1048
+ - separated
1049
+ - grouped
664
1050
 
665
1051
  Style/ModuleFunction:
666
1052
  EnforcedStyle: module_function
@@ -668,85 +1054,66 @@ Style/ModuleFunction:
668
1054
  - module_function
669
1055
  - extend_self
670
1056
 
671
- Style/MultilineArrayBraceLayout:
672
- EnforcedStyle: symmetrical
673
- SupportedStyles:
674
- # symmetrical: closing brace is positioned in same way as opening brace
675
- # new_line: closing brace is always on a new line
676
- # same_line: closing brace is always on the same line as last element
677
- - symmetrical
678
- - new_line
679
- - same_line
680
-
681
- Style/MultilineAssignmentLayout:
682
- # The types of assignments which are subject to this rule.
683
- SupportedTypes:
684
- - block
685
- - case
686
- - class
687
- - if
688
- - kwbegin
689
- - module
690
- EnforcedStyle: new_line
691
- SupportedStyles:
692
- # Ensures that the assignment operator and the rhs are on the same line for
693
- # the set of supported types.
694
- - same_line
695
- # Ensures that the assignment operator and the rhs are on separate lines
696
- # for the set of supported types.
697
- - new_line
698
-
699
- Style/MultilineHashBraceLayout:
700
- EnforcedStyle: symmetrical
1057
+ Style/MultilineMemoization:
1058
+ EnforcedStyle: keyword
701
1059
  SupportedStyles:
702
- # symmetrical: closing brace is positioned in same way as opening brace
703
- # new_line: closing brace is always on a new line
704
- # same_line: closing brace is always on same line as last element
705
- - symmetrical
706
- - new_line
707
- - same_line
1060
+ - keyword
1061
+ - braces
708
1062
 
709
- Style/MultilineMethodCallBraceLayout:
710
- EnforcedStyle: symmetrical
1063
+ Style/NegatedIf:
1064
+ EnforcedStyle: both
711
1065
  SupportedStyles:
712
- # symmetrical: closing brace is positioned in same way as opening brace
713
- # new_line: closing brace is always on a new line
714
- # same_line: closing brace is always on the same line as last argument
715
- - symmetrical
716
- - new_line
717
- - same_line
1066
+ # both: prefix and postfix negated `if` should both use `unless`
1067
+ # prefix: only use `unless` for negated `if` statements positioned before the body of the statement
1068
+ # postfix: only use `unless` for negated `if` statements positioned after the body of the statement
1069
+ - both
1070
+ - prefix
1071
+ - postfix
718
1072
 
719
- Style/MultilineMethodCallIndentation:
720
- EnforcedStyle: aligned
721
- SupportedStyles:
722
- - aligned
723
- - indented
724
- - indented_relative_to_receiver
725
- # By default, the indentation width from Style/IndentationWidth is used
726
- # But it can be overridden by setting this parameter
727
- IndentationWidth: ~
1073
+ Style/NestedParenthesizedCalls:
1074
+ Whitelist:
1075
+ - be
1076
+ - be_a
1077
+ - be_an
1078
+ - be_between
1079
+ - be_falsey
1080
+ - be_kind_of
1081
+ - be_instance_of
1082
+ - be_truthy
1083
+ - be_within
1084
+ - eq
1085
+ - eql
1086
+ - end_with
1087
+ - include
1088
+ - match
1089
+ - raise_error
1090
+ - respond_to
1091
+ - start_with
728
1092
 
729
- Style/MultilineMethodDefinitionBraceLayout:
730
- EnforcedStyle: symmetrical
1093
+ Style/Next:
1094
+ # With `always` all conditions at the end of an iteration needs to be
1095
+ # replaced by next - with `skip_modifier_ifs` the modifier if like this one
1096
+ # are ignored: [1, 2].each { |a| return 'yes' if a == 1 }
1097
+ EnforcedStyle: skip_modifier_ifs
1098
+ # `MinBodyLength` defines the number of lines of the a body of an `if` or `unless`
1099
+ # needs to have to trigger this cop
1100
+ MinBodyLength: 3
731
1101
  SupportedStyles:
732
- # symmetrical: closing brace is positioned in same way as opening brace
733
- # new_line: closing brace is always on a new line
734
- # same_line: closing brace is always on the same line as last parameter
735
- - symmetrical
736
- - new_line
737
- - same_line
1102
+ - skip_modifier_ifs
1103
+ - always
738
1104
 
739
- Style/MultilineOperationIndentation:
740
- EnforcedStyle: aligned
741
- SupportedStyles:
742
- - aligned
743
- - indented
744
- # By default, the indentation width from Style/IndentationWidth is used
745
- # But it can be overridden by setting this parameter
746
- IndentationWidth: ~
1105
+ Style/NonNilCheck:
1106
+ # With `IncludeSemanticChanges` set to `true`, this cop reports offenses for
1107
+ # `!x.nil?` and autocorrects that and `x != nil` to solely `x`, which is
1108
+ # **usually** OK, but might change behavior.
1109
+ #
1110
+ # With `IncludeSemanticChanges` set to `false`, this cop does not report
1111
+ # offenses for `!x.nil?` and does no changes that might change behavior.
1112
+ IncludeSemanticChanges: false
747
1113
 
748
1114
  Style/NumericLiterals:
749
1115
  MinDigits: 5
1116
+ Strict: false
750
1117
 
751
1118
  Style/NumericLiteralPrefix:
752
1119
  EnforcedOctalStyle: zero_with_o
@@ -754,6 +1121,16 @@ Style/NumericLiteralPrefix:
754
1121
  - zero_with_o
755
1122
  - zero_only
756
1123
 
1124
+ Style/NumericPredicate:
1125
+ EnforcedStyle: predicate
1126
+ SupportedStyles:
1127
+ - predicate
1128
+ - comparison
1129
+ # Exclude RSpec specs because assertions like `expect(1).to be > 0` cause
1130
+ # false positives.
1131
+ Exclude:
1132
+ - 'spec/**/*'
1133
+
757
1134
  Style/OptionHash:
758
1135
  # A list of parameter names that will be flagged by this cop.
759
1136
  SuspiciousParamNames:
@@ -768,42 +1145,28 @@ Style/ParenthesesAroundCondition:
768
1145
  AllowSafeAssignment: true
769
1146
 
770
1147
  Style/PercentLiteralDelimiters:
1148
+ # Specify the default preferred delimiter for all types with the 'default' key
1149
+ # Override individual delimiters (even with default specified) by specifying
1150
+ # an individual key
771
1151
  PreferredDelimiters:
772
- '%': ()
773
- '%i': ()
774
- '%q': ()
775
- '%Q': ()
1152
+ default: ()
1153
+ '%i': '[]'
1154
+ '%I': '[]'
776
1155
  '%r': '{}'
777
- '%s': ()
778
- '%w': ()
779
- '%W': ()
780
- '%x': ()
1156
+ '%w': '[]'
1157
+ '%W': '[]'
781
1158
 
782
1159
  Style/PercentQLiterals:
783
1160
  EnforcedStyle: lower_case_q
784
1161
  SupportedStyles:
785
- - lower_case_q # Use %q when possible, %Q when necessary
786
- - upper_case_q # Always use %Q
1162
+ - lower_case_q # Use `%q` when possible, `%Q` when necessary
1163
+ - upper_case_q # Always use `%Q`
787
1164
 
788
- Style/PredicateName:
789
- # Predicate name prefixes.
790
- NamePrefix:
791
- - is_
792
- - has_
793
- - have_
794
- # Predicate name prefixes that should be removed.
795
- NamePrefixBlacklist:
796
- - is_
797
- - has_
798
- - have_
799
- # Predicate names which, despite having a blacklisted prefix, or no ?,
800
- # should still be accepted
801
- NameWhitelist:
802
- - is_a?
803
- # Exclude Rspec specs because there is a strong convetion to write spec
804
- # helpers in the form of `have_something` or `be_something`.
805
- Exclude:
806
- - 'spec/**/*'
1165
+ Style/PreferredHashMethods:
1166
+ EnforcedStyle: short
1167
+ SupportedStyles:
1168
+ - short
1169
+ - verbose
807
1170
 
808
1171
  Style/RaiseArgs:
809
1172
  EnforcedStyle: exploded
@@ -812,25 +1175,44 @@ Style/RaiseArgs:
812
1175
  - exploded # raise Exception, msg
813
1176
 
814
1177
  Style/RedundantReturn:
815
- # When true allows code like `return x, y`.
1178
+ # When `true` allows code like `return x, y`.
816
1179
  AllowMultipleReturnValues: false
817
1180
 
818
- # Use / or %r around regular expressions.
1181
+ # Use `/` or `%r` around regular expressions.
819
1182
  Style/RegexpLiteral:
820
1183
  EnforcedStyle: slashes
821
1184
  # slashes: Always use slashes.
822
- # percent_r: Always use %r.
823
- # mixed: Use slashes on single-line regexes, and %r on multi-line regexes.
1185
+ # percent_r: Always use `%r`.
1186
+ # mixed: Use slashes on single-line regexes, and `%r` on multi-line regexes.
824
1187
  SupportedStyles:
825
1188
  - slashes
826
1189
  - percent_r
827
1190
  - mixed
828
- # If false, the cop will always recommend using %r if one or more slashes
1191
+ # If `false`, the cop will always recommend using `%r` if one or more slashes
829
1192
  # are found in the regexp string.
830
1193
  AllowInnerSlashes: false
831
1194
 
1195
+ Style/RescueStandardError:
1196
+ EnforcedStyle: explicit
1197
+ # implicit: Do not include the error class, `rescue`
1198
+ # explicit: Require an error class `rescue StandardError`
1199
+ SupportedStyles:
1200
+ - implicit
1201
+ - explicit
1202
+
1203
+ Style/ReturnNil:
1204
+ EnforcedStyle: return
1205
+ SupportedStyles:
1206
+ - return
1207
+ - return_nil
1208
+
1209
+ Style/SafeNavigation:
1210
+ # Safe navigation may cause a statement to start returning `nil` in addition
1211
+ # to whatever it used to return.
1212
+ ConvertCodeThatCanStartToReturnNil: false
1213
+
832
1214
  Style/Semicolon:
833
- # Allow ; to separate several expressions on the same line.
1215
+ # Allow `;` to separate several expressions on the same line.
834
1216
  AllowAsExpressionSeparator: false
835
1217
 
836
1218
  Style/SignalException:
@@ -843,21 +1225,15 @@ Style/SignalException:
843
1225
  Style/SingleLineBlockParams:
844
1226
  Methods:
845
1227
  - reduce:
846
- - a
847
- - e
1228
+ - acc
1229
+ - elem
848
1230
  - inject:
849
- - a
850
- - e
1231
+ - acc
1232
+ - elem
851
1233
 
852
1234
  Style/SingleLineMethods:
853
1235
  AllowIfMethodIsEmpty: true
854
1236
 
855
- Style/SpaceBeforeFirstArg:
856
- # When true, allows most uses of extra spacing if the intent is to align
857
- # things with the previous or next line, not counting empty lines or comment
858
- # lines.
859
- AllowForAlignment: true
860
-
861
1237
  Style/SpecialGlobalVars:
862
1238
  EnforcedStyle: use_english_names
863
1239
  SupportedStyles:
@@ -875,7 +1251,7 @@ Style/StringLiterals:
875
1251
  SupportedStyles:
876
1252
  - single_quotes
877
1253
  - double_quotes
878
- # If true, strings which span multiple lines using \ for continuation must
1254
+ # If `true`, strings which span multiple lines using `\` for continuation must
879
1255
  # use the same type of quotes on each line.
880
1256
  ConsistentQuotesInMultiline: false
881
1257
 
@@ -895,58 +1271,9 @@ Style/StringMethods:
895
1271
  PreferredMethods:
896
1272
  intern: to_sym
897
1273
 
898
- Style/SpaceAroundBlockParameters:
899
- EnforcedStyleInsidePipes: no_space
900
- SupportedStyles:
901
- - space
902
- - no_space
903
-
904
- Style/SpaceAroundEqualsInParameterDefault:
905
- EnforcedStyle: space
906
- SupportedStyles:
907
- - space
908
- - no_space
909
-
910
- Style/SpaceAroundOperators:
911
- # When true, allows most uses of extra spacing if the intent is to align
912
- # with an operator on the previous or next line, not counting empty lines
913
- # or comment lines.
914
- AllowForAlignment: true
915
-
916
- Style/SpaceBeforeBlockBraces:
917
- EnforcedStyle: space
918
- SupportedStyles:
919
- - space
920
- - no_space
921
-
922
- Style/SpaceInsideBlockBraces:
923
- EnforcedStyle: space
924
- SupportedStyles:
925
- - space
926
- - no_space
927
- # Valid values are: space, no_space
928
- EnforcedStyleForEmptyBraces: no_space
929
- # Space between { and |. Overrides EnforcedStyle if there is a conflict.
930
- SpaceBeforeBlockParameters: true
931
-
932
- Style/SpaceInsideHashLiteralBraces:
933
- EnforcedStyle: space
934
- EnforcedStyleForEmptyBraces: no_space
935
- SupportedStyles:
936
- - space
937
- - no_space
938
- # 'compact' normally requires a space inside hash braces, with the exception
939
- # that successive left braces or right braces are collapsed together
940
- - compact
941
-
942
- Style/SpaceInsideStringInterpolation:
943
- EnforcedStyle: no_space
944
- SupportedStyles:
945
- - space
946
- - no_space
947
-
948
1274
  Style/SymbolArray:
949
1275
  EnforcedStyle: percent
1276
+ MinSize: 0
950
1277
  SupportedStyles:
951
1278
  - percent
952
1279
  - brackets
@@ -963,21 +1290,16 @@ Style/TernaryParentheses:
963
1290
  SupportedStyles:
964
1291
  - require_parentheses
965
1292
  - require_no_parentheses
1293
+ - require_parentheses_when_complex
966
1294
  AllowSafeAssignment: true
967
1295
 
968
- Style/TrailingBlankLines:
969
- EnforcedStyle: final_newline
970
- SupportedStyles:
971
- - final_newline
972
- - final_blank_line
973
-
974
1296
  Style/TrailingCommaInArguments:
975
1297
  # If `comma`, the cop requires a comma after the last argument, but only for
976
1298
  # parenthesized method calls where each argument is on its own line.
977
1299
  # If `consistent_comma`, the cop requires a comma after the last argument,
978
1300
  # for all parenthesized method calls with arguments.
979
1301
  EnforcedStyleForMultiline: no_comma
980
- SupportedStyles:
1302
+ SupportedStylesForMultiline:
981
1303
  - comma
982
1304
  - consistent_comma
983
1305
  - no_comma
@@ -988,15 +1310,15 @@ Style/TrailingCommaInLiteral:
988
1310
  # If `consistent_comma`, the cop requires a comma after the last item of all
989
1311
  # non-empty array and hash literals.
990
1312
  EnforcedStyleForMultiline: no_comma
991
- SupportedStyles:
1313
+ SupportedStylesForMultiline:
992
1314
  - comma
993
1315
  - consistent_comma
994
1316
  - no_comma
995
1317
 
996
- # TrivialAccessors requires exact name matches and doesn't allow
1318
+ # `TrivialAccessors` requires exact name matches and doesn't allow
997
1319
  # predicated methods by default.
998
1320
  Style/TrivialAccessors:
999
- # When set to false the cop will suggest the use of accessor methods
1321
+ # When set to `false` the cop will suggest the use of accessor methods
1000
1322
  # in situations like:
1001
1323
  #
1002
1324
  # def name
@@ -1035,16 +1357,7 @@ Style/TrivialAccessors:
1035
1357
  - to_s
1036
1358
  - to_sym
1037
1359
 
1038
- Style/VariableName:
1039
- EnforcedStyle: snake_case
1040
- SupportedStyles:
1041
- - snake_case
1042
- - camelCase
1043
-
1044
- Style/WhileUntilModifier:
1045
- MaxLineLength: 80
1046
-
1047
- # WordArray enforces how array literals of word-like strings should be expressed.
1360
+ # `WordArray` enforces how array literals of word-like strings should be expressed.
1048
1361
  Style/WordArray:
1049
1362
  EnforcedStyle: percent
1050
1363
  SupportedStyles:
@@ -1052,31 +1365,41 @@ Style/WordArray:
1052
1365
  - percent
1053
1366
  # bracket style: ['word1', 'word2']
1054
1367
  - brackets
1055
- # The MinSize option causes the WordArray rule to be ignored for arrays
1368
+ # The `MinSize` option causes the `WordArray` rule to be ignored for arrays
1056
1369
  # smaller than a certain size. The rule is only applied to arrays
1057
- # whose element count is greater than or equal to MinSize.
1370
+ # whose element count is greater than or equal to `MinSize`.
1058
1371
  MinSize: 0
1059
- # The regular expression WordRegex decides what is considered a word.
1372
+ # The regular expression `WordRegex` decides what is considered a word.
1060
1373
  WordRegex: !ruby/regexp '/\A[\p{Word}\n\t]+\z/'
1061
1374
 
1062
- ##################### Metrics ##################################
1375
+ Style/YodaCondition:
1376
+ EnforcedStyle: all_comparison_operators
1377
+ SupportedStyles:
1378
+ # check all comparison operators
1379
+ - all_comparison_operators
1380
+ # check only equality operators: `!=` and `==`
1381
+ - equality_operators_only
1382
+
1383
+ #################### Metrics ###############################
1063
1384
 
1064
1385
  Metrics/AbcSize:
1065
- # The ABC size is a calculated magnitude, so this number can be a Fixnum or
1386
+ # The ABC size is a calculated magnitude, so this number can be an Integer or
1066
1387
  # a Float.
1067
1388
  Max: 15
1068
1389
 
1390
+ Metrics/BlockLength:
1391
+ CountComments: false # count full line comments?
1392
+ Max: 25
1393
+ ExcludedMethods: []
1394
+
1069
1395
  Metrics/BlockNesting:
1396
+ CountBlocks: false
1070
1397
  Max: 3
1071
1398
 
1072
1399
  Metrics/ClassLength:
1073
1400
  CountComments: false # count full line comments?
1074
1401
  Max: 100
1075
1402
 
1076
- Metrics/ModuleLength:
1077
- CountComments: false # count full line comments?
1078
- Max: 100
1079
-
1080
1403
  # Avoid complex methods.
1081
1404
  Metrics/CyclomaticComplexity:
1082
1405
  Max: 6
@@ -1090,11 +1413,22 @@ Metrics/LineLength:
1090
1413
  URISchemes:
1091
1414
  - http
1092
1415
  - https
1416
+ # The IgnoreCopDirectives option causes the LineLength rule to ignore cop
1417
+ # directives like '# rubocop: enable ...' when calculating a line's length.
1418
+ IgnoreCopDirectives: false
1419
+ # The IgnoredPatterns option is a list of !ruby/regexp and/or string
1420
+ # elements. Strings will be converted to Regexp objects. A line that matches
1421
+ # any regular expression listed in this option will be ignored by LineLength.
1422
+ IgnoredPatterns: []
1093
1423
 
1094
1424
  Metrics/MethodLength:
1095
1425
  CountComments: false # count full line comments?
1096
1426
  Max: 10
1097
1427
 
1428
+ Metrics/ModuleLength:
1429
+ CountComments: false # count full line comments?
1430
+ Max: 100
1431
+
1098
1432
  Metrics/ParameterLists:
1099
1433
  Max: 5
1100
1434
  CountKeywordArgs: true
@@ -1102,7 +1436,7 @@ Metrics/ParameterLists:
1102
1436
  Metrics/PerceivedComplexity:
1103
1437
  Max: 7
1104
1438
 
1105
- ##################### Lint ##################################
1439
+ #################### Lint ##################################
1106
1440
 
1107
1441
  # Allow safe assignment in conditions.
1108
1442
  Lint/AssignmentInCondition:
@@ -1115,39 +1449,39 @@ Lint/BlockAlignment:
1115
1449
  # The value `start_of_line` means it should be aligned with the whole
1116
1450
  # expression's starting line.
1117
1451
  # The value `either` means both are allowed.
1118
- AlignWith: either
1119
- SupportedStyles:
1452
+ EnforcedStyleAlignWith: either
1453
+ SupportedStylesAlignWith:
1120
1454
  - either
1121
1455
  - start_of_block
1122
1456
  - start_of_line
1123
1457
 
1458
+ Lint/DefEndAlignment:
1459
+ # The value `def` means that `end` should be aligned with the def keyword.
1460
+ # The value `start_of_line` means that `end` should be aligned with method
1461
+ # calls like `private`, `public`, etc, if present in front of the `def`
1462
+ # keyword on the same line.
1463
+ EnforcedStyleAlignWith: start_of_line
1464
+ SupportedStylesAlignWith:
1465
+ - start_of_line
1466
+ - def
1467
+ AutoCorrect: false
1468
+
1124
1469
  # Align ends correctly.
1125
1470
  Lint/EndAlignment:
1126
1471
  # The value `keyword` means that `end` should be aligned with the matching
1127
- # keyword (if, while, etc.).
1472
+ # keyword (`if`, `while`, etc.).
1128
1473
  # The value `variable` means that in assignments, `end` should be aligned
1129
1474
  # with the start of the variable on the left hand side of `=`. In all other
1130
1475
  # situations, `end` should still be aligned with the keyword.
1131
1476
  # The value `start_of_line` means that `end` should be aligned with the start
1132
1477
  # of the line which the matching keyword appears on.
1133
- AlignWith: keyword
1134
- SupportedStyles:
1478
+ EnforcedStyleAlignWith: keyword
1479
+ SupportedStylesAlignWith:
1135
1480
  - keyword
1136
1481
  - variable
1137
1482
  - start_of_line
1138
1483
  AutoCorrect: false
1139
1484
 
1140
- Lint/DefEndAlignment:
1141
- # The value `def` means that `end` should be aligned with the def keyword.
1142
- # The value `start_of_line` means that `end` should be aligned with method
1143
- # calls like `private`, `public`, etc, if present in front of the `def`
1144
- # keyword on the same line.
1145
- AlignWith: start_of_line
1146
- SupportedStyles:
1147
- - start_of_line
1148
- - def
1149
- AutoCorrect: false
1150
-
1151
1485
  Lint/InheritException:
1152
1486
  # The default base class in favour of `Exception`.
1153
1487
  EnforcedStyle: runtime_error
@@ -1155,6 +1489,27 @@ Lint/InheritException:
1155
1489
  - runtime_error
1156
1490
  - standard_error
1157
1491
 
1492
+ Lint/MissingCopEnableDirective:
1493
+ # Maximum number of consecutive lines the cop can be disabled for.
1494
+ # 0 allows only single-line disables
1495
+ # 1 would mean the maximum allowed is the following:
1496
+ # # rubocop:disable SomeCop
1497
+ # a = 1
1498
+ # # rubocop:enable SomeCop
1499
+ # .inf for any size
1500
+ MaximumRangeSize: .inf
1501
+
1502
+ Lint/SafeNavigationChain:
1503
+ Whitelist:
1504
+ - present?
1505
+ - blank?
1506
+ - presence
1507
+ - try
1508
+
1509
+ # Checks for shadowed arguments
1510
+ Lint/ShadowedArgument:
1511
+ IgnoreImplicitReferences: false
1512
+
1158
1513
  # Checks for unused block arguments
1159
1514
  Lint/UnusedBlockArgument:
1160
1515
  IgnoreEmptyBlocks: true
@@ -1165,13 +1520,18 @@ Lint/UnusedMethodArgument:
1165
1520
  AllowUnusedKeywordArguments: false
1166
1521
  IgnoreEmptyMethods: true
1167
1522
 
1168
- ##################### Performance ############################
1523
+ #################### Performance ###########################
1524
+
1525
+ Performance/DoubleStartEndWith:
1526
+ # Used to check for `starts_with?` and `ends_with?`.
1527
+ # These methods are defined by `ActiveSupport`.
1528
+ IncludeActiveSupportAliases: false
1169
1529
 
1170
1530
  Performance/RedundantMerge:
1171
1531
  # Max number of key-value pairs to consider an offense
1172
1532
  MaxKeyValuePairs: 2
1173
1533
 
1174
- ##################### Rails ##################################
1534
+ #################### Rails #################################
1175
1535
 
1176
1536
  Rails/ActionFilter:
1177
1537
  EnforcedStyle: action
@@ -1181,6 +1541,10 @@ Rails/ActionFilter:
1181
1541
  Include:
1182
1542
  - app/controllers/**/*.rb
1183
1543
 
1544
+ Rails/CreateTableWithTimestamps:
1545
+ Include:
1546
+ - db/migrate/*.rb
1547
+
1184
1548
  Rails/Date:
1185
1549
  # The value `strict` disallows usage of `Date.today`, `Date.current`,
1186
1550
  # `Date#to_time` etc.
@@ -1192,6 +1556,20 @@ Rails/Date:
1192
1556
  - strict
1193
1557
  - flexible
1194
1558
 
1559
+ Rails/Delegate:
1560
+ # When set to true, using the target object as a prefix of the
1561
+ # method name without using the `delegate` method will be a
1562
+ # violation. When set to false, this case is legal.
1563
+ EnforceForPrefixed: true
1564
+
1565
+ Rails/DynamicFindBy:
1566
+ Whitelist:
1567
+ - find_by_sql
1568
+
1569
+ Rails/EnumUniqueness:
1570
+ Include:
1571
+ - app/models/**/*.rb
1572
+
1195
1573
  Rails/Exit:
1196
1574
  Include:
1197
1575
  - app/**/*.rb
@@ -1212,6 +1590,22 @@ Rails/HasAndBelongsToMany:
1212
1590
  Include:
1213
1591
  - app/models/**/*.rb
1214
1592
 
1593
+ Rails/HasManyOrHasOneDependent:
1594
+ Include:
1595
+ - app/models/**/*.rb
1596
+
1597
+ Rails/InverseOf:
1598
+ Include:
1599
+ - app/models/**/*.rb
1600
+
1601
+ Rails/LexicallyScopedActionFilter:
1602
+ Include:
1603
+ - app/controllers/**/*.rb
1604
+
1605
+ Rails/NotNullColumn:
1606
+ Include:
1607
+ - db/migrate/*.rb
1608
+
1215
1609
  Rails/Output:
1216
1610
  Include:
1217
1611
  - app/**/*.rb
@@ -1229,6 +1623,17 @@ Rails/RequestReferer:
1229
1623
  - referer
1230
1624
  - referrer
1231
1625
 
1626
+ Rails/ReversibleMigration:
1627
+ Include:
1628
+ - db/migrate/*.rb
1629
+
1630
+ Rails/SafeNavigation:
1631
+ # This will convert usages of `try` to use safe navigation as well as `try!`.
1632
+ # `try` and `try!` work slightly differently. `try!` and safe navigation will
1633
+ # both raise a `NoMethodError` if the receiver of the method call does not
1634
+ # implement the intended method. `try` will not raise an exception for this.
1635
+ ConvertTry: false
1636
+
1232
1637
  Rails/ScopeArgs:
1233
1638
  Include:
1234
1639
  - app/models/**/*.rb
@@ -1242,12 +1647,38 @@ Rails/TimeZone:
1242
1647
  - flexible
1243
1648
 
1244
1649
  Rails/UniqBeforePluck:
1245
- EnforcedMode: conservative
1246
- SupportedModes:
1650
+ EnforcedStyle: conservative
1651
+ SupportedStyles:
1247
1652
  - conservative
1248
1653
  - aggressive
1249
1654
  AutoCorrect: false
1250
1655
 
1656
+ Rails/UnknownEnv:
1657
+ Environments:
1658
+ - development
1659
+ - test
1660
+ - production
1661
+
1662
+ Rails/SkipsModelValidations:
1663
+ Blacklist:
1664
+ - decrement!
1665
+ - decrement_counter
1666
+ - increment!
1667
+ - increment_counter
1668
+ - toggle!
1669
+ - touch
1670
+ - update_all
1671
+ - update_attribute
1672
+ - update_column
1673
+ - update_columns
1674
+ - update_counters
1675
+
1251
1676
  Rails/Validation:
1252
1677
  Include:
1253
1678
  - app/models/**/*.rb
1679
+
1680
+ Bundler/OrderedGems:
1681
+ TreatCommentsAsGroupSeparators: true
1682
+
1683
+ Gemspec/OrderedDependencies:
1684
+ TreatCommentsAsGroupSeparators: true