rubocop 0.89.1 → 0.90.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (256) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/config/default.yml +79 -11
  4. data/lib/rubocop.rb +13 -0
  5. data/lib/rubocop/cached_data.rb +1 -0
  6. data/lib/rubocop/cli/command.rb +1 -0
  7. data/lib/rubocop/cli/command/auto_genenerate_config.rb +1 -0
  8. data/lib/rubocop/cli/command/base.rb +1 -0
  9. data/lib/rubocop/cli/command/execute_runner.rb +1 -0
  10. data/lib/rubocop/cli/command/init_dotfile.rb +1 -0
  11. data/lib/rubocop/cli/command/show_cops.rb +1 -0
  12. data/lib/rubocop/cli/command/version.rb +1 -0
  13. data/lib/rubocop/cli/environment.rb +1 -0
  14. data/lib/rubocop/comment_config.rb +5 -0
  15. data/lib/rubocop/config_loader.rb +17 -6
  16. data/lib/rubocop/config_loader_resolver.rb +1 -0
  17. data/lib/rubocop/config_obsoletion.rb +1 -0
  18. data/lib/rubocop/config_validator.rb +3 -0
  19. data/lib/rubocop/cop/base.rb +23 -0
  20. data/lib/rubocop/cop/bundler/gem_comment.rb +7 -3
  21. data/lib/rubocop/cop/commissioner.rb +47 -7
  22. data/lib/rubocop/cop/correctors/alignment_corrector.rb +4 -4
  23. data/lib/rubocop/cop/correctors/condition_corrector.rb +3 -5
  24. data/lib/rubocop/cop/correctors/empty_line_corrector.rb +9 -10
  25. data/lib/rubocop/cop/correctors/line_break_corrector.rb +2 -2
  26. data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +8 -3
  27. data/lib/rubocop/cop/correctors/parentheses_corrector.rb +5 -8
  28. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +4 -9
  29. data/lib/rubocop/cop/correctors/punctuation_corrector.rb +8 -10
  30. data/lib/rubocop/cop/documentation.rb +22 -0
  31. data/lib/rubocop/cop/generator.rb +1 -0
  32. data/lib/rubocop/cop/layout/block_alignment.rb +23 -19
  33. data/lib/rubocop/cop/layout/class_structure.rb +10 -9
  34. data/lib/rubocop/cop/layout/closing_heredoc_indentation.rb +4 -6
  35. data/lib/rubocop/cop/layout/condition_position.rb +13 -15
  36. data/lib/rubocop/cop/layout/def_end_alignment.rb +7 -4
  37. data/lib/rubocop/cop/layout/dot_position.rb +21 -17
  38. data/lib/rubocop/cop/layout/empty_comment.rb +30 -23
  39. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +19 -16
  40. data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +13 -13
  41. data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +144 -0
  42. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +21 -23
  43. data/lib/rubocop/cop/layout/empty_lines.rb +6 -7
  44. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +4 -6
  45. data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +7 -8
  46. data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +3 -6
  47. data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +2 -5
  48. data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +2 -5
  49. data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +2 -5
  50. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +2 -5
  51. data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +2 -5
  52. data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +2 -5
  53. data/lib/rubocop/cop/layout/end_alignment.rb +6 -7
  54. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +2 -5
  55. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +2 -5
  56. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +4 -8
  57. data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +2 -5
  58. data/lib/rubocop/cop/layout/hash_alignment.rb +17 -20
  59. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +15 -14
  60. data/lib/rubocop/cop/layout/heredoc_indentation.rb +14 -11
  61. data/lib/rubocop/cop/layout/initial_indentation.rb +6 -7
  62. data/lib/rubocop/cop/layout/leading_comment_space.rb +11 -9
  63. data/lib/rubocop/cop/layout/leading_empty_lines.rb +6 -11
  64. data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +2 -5
  65. data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +2 -5
  66. data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +10 -14
  67. data/lib/rubocop/cop/layout/multiline_block_layout.rb +21 -19
  68. data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +2 -5
  69. data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +2 -5
  70. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +5 -9
  71. data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +2 -5
  72. data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +2 -5
  73. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +18 -21
  74. data/lib/rubocop/cop/layout/space_after_colon.rb +11 -7
  75. data/lib/rubocop/cop/layout/space_after_comma.rb +2 -5
  76. data/lib/rubocop/cop/layout/space_after_method_name.rb +5 -6
  77. data/lib/rubocop/cop/layout/space_after_not.rb +9 -11
  78. data/lib/rubocop/cop/layout/space_after_semicolon.rb +2 -5
  79. data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +20 -15
  80. data/lib/rubocop/cop/layout/space_around_keyword.rb +17 -18
  81. data/lib/rubocop/cop/layout/space_around_operators.rb +17 -16
  82. data/lib/rubocop/cop/layout/space_before_block_braces.rb +23 -22
  83. data/lib/rubocop/cop/layout/space_before_comma.rb +3 -5
  84. data/lib/rubocop/cop/layout/space_before_comment.rb +10 -7
  85. data/lib/rubocop/cop/layout/space_before_first_arg.rb +7 -7
  86. data/lib/rubocop/cop/layout/space_before_semicolon.rb +2 -5
  87. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +9 -17
  88. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +13 -16
  89. data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +3 -8
  90. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +17 -16
  91. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +16 -19
  92. data/lib/rubocop/cop/layout/space_inside_parens.rb +9 -14
  93. data/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb +5 -10
  94. data/lib/rubocop/cop/layout/space_inside_range_literal.rb +8 -17
  95. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +13 -16
  96. data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +10 -11
  97. data/lib/rubocop/cop/layout/trailing_empty_lines.rb +10 -15
  98. data/lib/rubocop/cop/layout/trailing_whitespace.rb +11 -11
  99. data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +1 -1
  100. data/lib/rubocop/cop/lint/constant_resolution.rb +1 -1
  101. data/lib/rubocop/cop/lint/duplicate_require.rb +41 -0
  102. data/lib/rubocop/cop/lint/duplicate_rescue_exception.rb +0 -11
  103. data/lib/rubocop/cop/lint/empty_file.rb +53 -0
  104. data/lib/rubocop/cop/lint/missing_super.rb +2 -2
  105. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +2 -35
  106. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +9 -19
  107. data/lib/rubocop/cop/lint/percent_string_array.rb +8 -12
  108. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +4 -4
  109. data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +1 -1
  110. data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +57 -0
  111. data/lib/rubocop/cop/lint/useless_method_definition.rb +77 -0
  112. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +2 -0
  113. data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +1 -0
  114. data/lib/rubocop/cop/mixin/alignment.rb +3 -0
  115. data/lib/rubocop/cop/mixin/allowed_methods.rb +2 -0
  116. data/lib/rubocop/cop/mixin/annotation_comment.rb +5 -0
  117. data/lib/rubocop/cop/mixin/check_line_breakable.rb +16 -7
  118. data/lib/rubocop/cop/mixin/comments_help.rb +54 -0
  119. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +8 -7
  120. data/lib/rubocop/cop/mixin/empty_parameter.rb +3 -1
  121. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +3 -1
  122. data/lib/rubocop/cop/mixin/first_element_line_break.rb +3 -1
  123. data/lib/rubocop/cop/mixin/hash_transform_method.rb +17 -0
  124. data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +3 -1
  125. data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +12 -10
  126. data/lib/rubocop/cop/mixin/negative_conditional.rb +2 -2
  127. data/lib/rubocop/cop/mixin/percent_array.rb +14 -3
  128. data/lib/rubocop/cop/mixin/regexp_literal_help.rb +1 -1
  129. data/lib/rubocop/cop/mixin/rescue_node.rb +10 -1
  130. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +4 -3
  131. data/lib/rubocop/cop/mixin/space_before_punctuation.rb +4 -3
  132. data/lib/rubocop/cop/mixin/surrounding_space.rb +8 -4
  133. data/lib/rubocop/cop/mixin/trailing_comma.rb +7 -7
  134. data/lib/rubocop/cop/offense.rb +1 -0
  135. data/lib/rubocop/cop/severity.rb +0 -8
  136. data/lib/rubocop/cop/style/case_equality.rb +8 -3
  137. data/lib/rubocop/cop/style/case_like_if.rb +20 -4
  138. data/lib/rubocop/cop/style/class_methods_definitions.rb +131 -0
  139. data/lib/rubocop/cop/style/combinable_loops.rb +89 -0
  140. data/lib/rubocop/cop/style/empty_block_parameter.rb +9 -10
  141. data/lib/rubocop/cop/style/empty_lambda_parameter.rb +9 -10
  142. data/lib/rubocop/cop/style/guard_clause.rb +1 -0
  143. data/lib/rubocop/cop/style/hash_syntax.rb +6 -5
  144. data/lib/rubocop/cop/style/hash_transform_keys.rb +14 -1
  145. data/lib/rubocop/cop/style/hash_transform_values.rb +14 -1
  146. data/lib/rubocop/cop/style/if_unless_modifier.rb +2 -2
  147. data/lib/rubocop/cop/style/keyword_parameters_order.rb +58 -0
  148. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +10 -1
  149. data/lib/rubocop/cop/style/multiline_when_then.rb +2 -2
  150. data/lib/rubocop/cop/style/negated_if.rb +6 -6
  151. data/lib/rubocop/cop/style/negated_unless.rb +6 -6
  152. data/lib/rubocop/cop/style/negated_while.rb +7 -15
  153. data/lib/rubocop/cop/style/nested_modifier.rb +10 -13
  154. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +11 -11
  155. data/lib/rubocop/cop/style/nested_ternary_operator.rb +14 -16
  156. data/lib/rubocop/cop/style/next.rb +10 -14
  157. data/lib/rubocop/cop/style/nil_comparison.rb +11 -11
  158. data/lib/rubocop/cop/style/non_nil_check.rb +32 -26
  159. data/lib/rubocop/cop/style/not.rb +19 -26
  160. data/lib/rubocop/cop/style/numeric_literal_prefix.rb +4 -9
  161. data/lib/rubocop/cop/style/numeric_predicate.rb +4 -11
  162. data/lib/rubocop/cop/style/one_line_conditional.rb +71 -23
  163. data/lib/rubocop/cop/style/option_hash.rb +1 -1
  164. data/lib/rubocop/cop/style/optional_arguments.rb +1 -1
  165. data/lib/rubocop/cop/style/or_assignment.rb +13 -10
  166. data/lib/rubocop/cop/style/parallel_assignment.rb +14 -14
  167. data/lib/rubocop/cop/style/parentheses_around_condition.rb +6 -6
  168. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +13 -19
  169. data/lib/rubocop/cop/style/percent_q_literals.rb +8 -10
  170. data/lib/rubocop/cop/style/perl_backrefs.rb +8 -10
  171. data/lib/rubocop/cop/style/preferred_hash_methods.rb +9 -14
  172. data/lib/rubocop/cop/style/proc.rb +6 -6
  173. data/lib/rubocop/cop/style/raise_args.rb +13 -24
  174. data/lib/rubocop/cop/style/random_with_offset.rb +15 -16
  175. data/lib/rubocop/cop/style/redundant_assignment.rb +8 -10
  176. data/lib/rubocop/cop/style/redundant_begin.rb +7 -9
  177. data/lib/rubocop/cop/style/redundant_capital_w.rb +6 -9
  178. data/lib/rubocop/cop/style/redundant_condition.rb +5 -6
  179. data/lib/rubocop/cop/style/redundant_fetch_block.rb +3 -12
  180. data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +8 -8
  181. data/lib/rubocop/cop/style/redundant_freeze.rb +3 -6
  182. data/lib/rubocop/cop/style/redundant_interpolation.rb +25 -24
  183. data/lib/rubocop/cop/style/redundant_parentheses.rb +7 -9
  184. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +6 -13
  185. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +5 -14
  186. data/lib/rubocop/cop/style/redundant_self.rb +2 -2
  187. data/lib/rubocop/cop/style/redundant_self_assignment.rb +116 -0
  188. data/lib/rubocop/cop/style/regexp_literal.rb +10 -21
  189. data/lib/rubocop/cop/style/rescue_modifier.rb +29 -9
  190. data/lib/rubocop/cop/style/return_nil.rb +5 -5
  191. data/lib/rubocop/cop/style/safe_navigation.rb +13 -12
  192. data/lib/rubocop/cop/style/sample.rb +10 -13
  193. data/lib/rubocop/cop/style/self_assignment.rb +26 -22
  194. data/lib/rubocop/cop/style/semicolon.rb +6 -9
  195. data/lib/rubocop/cop/style/send.rb +2 -2
  196. data/lib/rubocop/cop/style/signal_exception.rb +21 -19
  197. data/lib/rubocop/cop/style/single_line_block_params.rb +4 -2
  198. data/lib/rubocop/cop/style/single_line_methods.rb +17 -16
  199. data/lib/rubocop/cop/style/slicing_with_range.rb +4 -7
  200. data/lib/rubocop/cop/style/sole_nested_conditional.rb +66 -0
  201. data/lib/rubocop/cop/style/special_global_vars.rb +10 -15
  202. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +17 -21
  203. data/lib/rubocop/cop/style/stderr_puts.rb +4 -6
  204. data/lib/rubocop/cop/style/string_hash_keys.rb +6 -7
  205. data/lib/rubocop/cop/style/string_methods.rb +7 -17
  206. data/lib/rubocop/cop/style/strip.rb +8 -14
  207. data/lib/rubocop/cop/style/struct_inheritance.rb +3 -6
  208. data/lib/rubocop/cop/style/symbol_array.rb +5 -16
  209. data/lib/rubocop/cop/style/symbol_literal.rb +4 -6
  210. data/lib/rubocop/cop/style/symbol_proc.rb +14 -18
  211. data/lib/rubocop/cop/style/ternary_parentheses.rb +21 -20
  212. data/lib/rubocop/cop/style/trailing_body_on_class.rb +3 -6
  213. data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +4 -7
  214. data/lib/rubocop/cop/style/trailing_body_on_module.rb +3 -6
  215. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +2 -5
  216. data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +2 -5
  217. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +7 -6
  218. data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +2 -5
  219. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +8 -17
  220. data/lib/rubocop/cop/style/trivial_accessors.rb +26 -30
  221. data/lib/rubocop/cop/style/unless_else.rb +5 -8
  222. data/lib/rubocop/cop/style/unpack_first.rb +4 -8
  223. data/lib/rubocop/cop/style/variable_interpolation.rb +7 -10
  224. data/lib/rubocop/cop/style/when_then.rb +4 -6
  225. data/lib/rubocop/cop/style/while_until_do.rb +6 -16
  226. data/lib/rubocop/cop/style/while_until_modifier.rb +6 -20
  227. data/lib/rubocop/cop/style/word_array.rb +5 -23
  228. data/lib/rubocop/cop/style/yoda_condition.rb +4 -15
  229. data/lib/rubocop/cop/style/zero_length_predicate.rb +11 -13
  230. data/lib/rubocop/cop/team.rb +1 -0
  231. data/lib/rubocop/cop/util.rb +1 -1
  232. data/lib/rubocop/cop/utils/format_string.rb +3 -5
  233. data/lib/rubocop/cop/variable_force.rb +2 -0
  234. data/lib/rubocop/cops_documentation_generator.rb +4 -2
  235. data/lib/rubocop/core_ext/string.rb +1 -1
  236. data/lib/rubocop/ext/regexp_node.rb +46 -0
  237. data/lib/rubocop/file_finder.rb +1 -0
  238. data/lib/rubocop/formatter/auto_gen_config_formatter.rb +2 -1
  239. data/lib/rubocop/formatter/html_formatter.rb +2 -0
  240. data/lib/rubocop/formatter/progress_formatter.rb +2 -1
  241. data/lib/rubocop/formatter/quiet_formatter.rb +1 -1
  242. data/lib/rubocop/formatter/simple_text_formatter.rb +36 -6
  243. data/lib/rubocop/name_similarity.rb +1 -0
  244. data/lib/rubocop/options.rb +3 -0
  245. data/lib/rubocop/remote_config.rb +1 -0
  246. data/lib/rubocop/result_cache.rb +1 -0
  247. data/lib/rubocop/rspec/cop_helper.rb +4 -1
  248. data/lib/rubocop/rspec/expect_offense.rb +10 -5
  249. data/lib/rubocop/rspec/shared_contexts.rb +12 -0
  250. data/lib/rubocop/runner.rb +1 -0
  251. data/lib/rubocop/string_interpreter.rb +3 -0
  252. data/lib/rubocop/target_finder.rb +1 -0
  253. data/lib/rubocop/target_ruby.rb +6 -0
  254. data/lib/rubocop/version.rb +2 -1
  255. data/lib/rubocop/yaml_duplication_checker.rb +1 -0
  256. metadata +15 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3201b273ee3a04b13a9f41d768d230a5be311881c7fd0b39f24aa0d99a8a16ad
4
- data.tar.gz: 794ba4bfcadcee6a8a9aae92f88c167dc1f75122e69f4bee08baa8f22976c1bf
3
+ metadata.gz: 39db2826fa916853dc6641e30da24937e009a06b843daf1a7cdb2eca458dfaad
4
+ data.tar.gz: 9a4ffd95ff0401aeee427555d1baf51517e06580becfa9243dac9c75305998aa
5
5
  SHA512:
6
- metadata.gz: c2ea28c0fbfaa2f37ef651b91f38e3084fda1d8c829ebc1aaa839c793f0b759deb692bc70482d863797ab33799af9e083ab7f274f4faa905b956b4b53fbab96b
7
- data.tar.gz: 2ac4b6b2e1852c4ca1df725c6de4f6d34442633cb7dea00f27499ebae6e24ad006110dd0b473c781961d6e44819039a5e5748ac0de6ec0a1b2cbceb950c3fcf2
6
+ metadata.gz: 7e502aeecd9ceaeec36624190f4e9b72d075eed552f2e6204e2e842db1a77758f5fd11336f01f400af45bb36b27f13885a27847b17b84595aeef90df6b0db63b
7
+ data.tar.gz: e7ecf12bfc331ef99870f03e034a5154765ceb93c159fdde0fdf8802609c81fa3459250eb3bf6aa7ee140d5c80958783614f5da81585ba75ad9e252afdb8fc50
data/README.md CHANGED
@@ -49,7 +49,7 @@ haven't reached version 1.0 yet). To prevent an unwanted RuboCop update you
49
49
  might want to use a conservative version lock in your `Gemfile`:
50
50
 
51
51
  ```rb
52
- gem 'rubocop', '~> 0.89.1', require: false
52
+ gem 'rubocop', '~> 0.90.0', require: false
53
53
  ```
54
54
 
55
55
  ## Quickstart
@@ -399,7 +399,6 @@ Layout/DefEndAlignment:
399
399
  SupportedStylesAlignWith:
400
400
  - start_of_line
401
401
  - def
402
- AutoCorrect: false
403
402
  Severity: warning
404
403
 
405
404
  Layout/DotPosition:
@@ -436,6 +435,14 @@ Layout/EmptyLineAfterMagicComment:
436
435
  Enabled: true
437
436
  VersionAdded: '0.49'
438
437
 
438
+ Layout/EmptyLineAfterMultilineCondition:
439
+ Description: 'Enforces empty line after multiline condition.'
440
+ # This is disabled, because this style is not very common in practice.
441
+ Enabled: false
442
+ VersionAdded: '0.90'
443
+ Reference:
444
+ - https://github.com/airbnb/ruby#multiline-if-newline
445
+
439
446
  Layout/EmptyLineBetweenDefs:
440
447
  Description: 'Use empty lines between defs.'
441
448
  StyleGuide: '#empty-lines-between-methods'
@@ -555,7 +562,6 @@ Layout/EndAlignment:
555
562
  - keyword
556
563
  - variable
557
564
  - start_of_line
558
- AutoCorrect: false
559
565
  Severity: warning
560
566
 
561
567
  Layout/EndOfLine:
@@ -1427,6 +1433,11 @@ Lint/DuplicateMethods:
1427
1433
  Enabled: true
1428
1434
  VersionAdded: '0.29'
1429
1435
 
1436
+ Lint/DuplicateRequire:
1437
+ Description: 'Check for duplicate `require`s and `require_relative`s.'
1438
+ Enabled: pending
1439
+ VersionAdded: '0.90'
1440
+
1430
1441
  Lint/DuplicateRescueException:
1431
1442
  Description: 'Checks that there are no repeated exceptions used in `rescue` expressions.'
1432
1443
  Enabled: pending
@@ -1453,13 +1464,18 @@ Lint/EmptyEnsure:
1453
1464
  Enabled: true
1454
1465
  VersionAdded: '0.10'
1455
1466
  VersionChanged: '0.48'
1456
- AutoCorrect: false
1457
1467
 
1458
1468
  Lint/EmptyExpression:
1459
1469
  Description: 'Checks for empty expressions.'
1460
1470
  Enabled: true
1461
1471
  VersionAdded: '0.45'
1462
1472
 
1473
+ Lint/EmptyFile:
1474
+ Description: 'Enforces that Ruby source files are not empty.'
1475
+ Enabled: pending
1476
+ AllowComments: true
1477
+ VersionAdded: '0.90'
1478
+
1463
1479
  Lint/EmptyInterpolation:
1464
1480
  Description: 'Checks for empty string interpolation.'
1465
1481
  Enabled: true
@@ -1856,6 +1872,11 @@ Lint/TopLevelReturnWithArgument:
1856
1872
  Enabled: 'pending'
1857
1873
  VersionAdded: '0.89'
1858
1874
 
1875
+ Lint/TrailingCommaInAttributeDeclaration:
1876
+ Description: 'This cop checks for trailing commas in attribute declarations.'
1877
+ Enabled: pending
1878
+ VersionAdded: '0.90'
1879
+
1859
1880
  Lint/UnderscorePrefixedVariableName:
1860
1881
  Description: 'Do not use prefix `_` for a variable that is used.'
1861
1882
  Enabled: true
@@ -1931,6 +1952,13 @@ Lint/UselessElseWithoutRescue:
1931
1952
  Enabled: true
1932
1953
  VersionAdded: '0.17'
1933
1954
 
1955
+ Lint/UselessMethodDefinition:
1956
+ Description: 'Checks for useless method definitions.'
1957
+ Enabled: pending
1958
+ VersionAdded: '0.90'
1959
+ Safe: false
1960
+ AllowComments: true
1961
+
1934
1962
  Lint/UselessSetterCall:
1935
1963
  Description: 'Checks for useless setter call to a local variable.'
1936
1964
  Enabled: true
@@ -2591,6 +2619,7 @@ Style/CaseLikeIf:
2591
2619
  Description: 'This cop identifies places where `if-elsif` constructions can be replaced with `case-when`.'
2592
2620
  StyleGuide: '#case-vs-if-else'
2593
2621
  Enabled: 'pending'
2622
+ Safe: false
2594
2623
  VersionAdded: '0.88'
2595
2624
 
2596
2625
  Style/CharacterLiteral:
@@ -2608,7 +2637,6 @@ Style/ClassAndModuleChildren:
2608
2637
  # have the knowledge to perform either operation safely and thus requires
2609
2638
  # manual oversight.
2610
2639
  SafeAutoCorrect: false
2611
- AutoCorrect: false
2612
2640
  Enabled: true
2613
2641
  VersionAdded: '0.19'
2614
2642
  #
@@ -2647,6 +2675,16 @@ Style/ClassMethods:
2647
2675
  VersionAdded: '0.9'
2648
2676
  VersionChanged: '0.20'
2649
2677
 
2678
+ Style/ClassMethodsDefinitions:
2679
+ Description: 'Enforces using `def self.method_name` or `class << self` to define class methods.'
2680
+ StyleGuide: '#def-self-class-methods'
2681
+ Enabled: false
2682
+ VersionAdded: '0.89'
2683
+ EnforcedStyle: def_self
2684
+ SupportedStyles:
2685
+ - def_self
2686
+ - self_class
2687
+
2650
2688
  Style/ClassVars:
2651
2689
  Description: 'Avoid the use of class variables.'
2652
2690
  StyleGuide: '#no-class-vars'
@@ -2687,6 +2725,14 @@ Style/ColonMethodDefinition:
2687
2725
  Enabled: true
2688
2726
  VersionAdded: '0.52'
2689
2727
 
2728
+ Style/CombinableLoops:
2729
+ Description: >-
2730
+ Checks for places where multiple consecutive loops over the same data
2731
+ can be combined into a single loop.
2732
+ Enabled: pending
2733
+ Safe: false
2734
+ VersionAdded: '0.90'
2735
+
2690
2736
  Style/CommandLiteral:
2691
2737
  Description: 'Use `` or %x around command literals.'
2692
2738
  StyleGuide: '#percent-x'
@@ -3021,7 +3067,7 @@ Style/FrozenStringLiteralComment:
3021
3067
  # `never` will enforce that the frozen string literal comment does not
3022
3068
  # exist in a file.
3023
3069
  - never
3024
- Safe: false
3070
+ SafeAutoCorrect: false
3025
3071
 
3026
3072
  Style/GlobalStdStream:
3027
3073
  Description: 'Enforces the use of `$stdout/$stderr/$stdin` instead of `STDOUT/STDERR/STDIN`.'
@@ -3101,15 +3147,17 @@ Style/HashSyntax:
3101
3147
  PreferHashRocketsForNonAlnumEndingSymbols: false
3102
3148
 
3103
3149
  Style/HashTransformKeys:
3104
- Description: 'Prefer `transform_keys` over `each_with_object` and `map`.'
3150
+ Description: 'Prefer `transform_keys` over `each_with_object`, `map`, or `to_h`.'
3105
3151
  Enabled: 'pending'
3106
3152
  VersionAdded: '0.80'
3153
+ VersionChanged: '0.90'
3107
3154
  Safe: false
3108
3155
 
3109
3156
  Style/HashTransformValues:
3110
- Description: 'Prefer `transform_values` over `each_with_object` and `map`.'
3157
+ Description: 'Prefer `transform_values` over `each_with_object`, `map`, or `to_h`.'
3111
3158
  Enabled: 'pending'
3112
3159
  VersionAdded: '0.80'
3160
+ VersionChanged: '0.90'
3113
3161
  Safe: false
3114
3162
 
3115
3163
  Style/IdenticalConditionalBranches:
@@ -3206,6 +3254,12 @@ Style/IpAddresses:
3206
3254
  - "::"
3207
3255
  # :: is a valid IPv6 address, but could potentially be legitimately in code
3208
3256
 
3257
+ Style/KeywordParametersOrder:
3258
+ Description: 'Enforces that optional keyword parameters are placed at the end of the parameters list.'
3259
+ StyleGuide: '#keyword-parameters-order'
3260
+ Enabled: pending
3261
+ VersionAdded: '0.90'
3262
+
3209
3263
  Style/Lambda:
3210
3264
  Description: 'Use the new lambda literal syntax for single-line blocks.'
3211
3265
  StyleGuide: '#lambda-multi-line'
@@ -3579,7 +3633,6 @@ Style/NumericPredicate:
3579
3633
  # object. Switching these methods has to be done with knowledge of the types
3580
3634
  # of the variables which rubocop doesn't have.
3581
3635
  SafeAutoCorrect: false
3582
- AutoCorrect: false
3583
3636
  Enabled: true
3584
3637
  VersionAdded: '0.42'
3585
3638
  VersionChanged: '0.59'
@@ -3595,12 +3648,13 @@ Style/NumericPredicate:
3595
3648
 
3596
3649
  Style/OneLineConditional:
3597
3650
  Description: >-
3598
- Favor the ternary operator(?:) over
3599
- if/then/else/end constructs.
3651
+ Favor the ternary operator (?:) or multi-line constructs over
3652
+ single-line if/then/else/end constructs.
3600
3653
  StyleGuide: '#ternary-operator'
3601
3654
  Enabled: true
3655
+ AlwaysCorrectToMultiline: false
3602
3656
  VersionAdded: '0.9'
3603
- VersionChanged: '0.38'
3657
+ VersionChanged: '0.90'
3604
3658
 
3605
3659
  Style/OptionHash:
3606
3660
  Description: "Don't use option hashes when you can use keyword arguments."
@@ -3831,6 +3885,12 @@ Style/RedundantSelf:
3831
3885
  VersionAdded: '0.10'
3832
3886
  VersionChanged: '0.13'
3833
3887
 
3888
+ Style/RedundantSelfAssignment:
3889
+ Description: 'Checks for places where redundant assignments are made for in place modification methods.'
3890
+ Enabled: pending
3891
+ Safe: false
3892
+ VersionAdded: '0.90'
3893
+
3834
3894
  Style/RedundantSort:
3835
3895
  Description: >-
3836
3896
  Use `min` instead of `sort.first`,
@@ -3983,6 +4043,14 @@ Style/SlicingWithRange:
3983
4043
  VersionAdded: '0.83'
3984
4044
  Safe: false
3985
4045
 
4046
+ Style/SoleNestedConditional:
4047
+ Description: >-
4048
+ Finds sole nested conditional nodes
4049
+ which can be merged into outer conditional node.
4050
+ Enabled: pending
4051
+ VersionAdded: '0.89'
4052
+ AllowModifier: false
4053
+
3986
4054
  Style/SpecialGlobalVars:
3987
4055
  Description: 'Avoid Perl-style global variables.'
3988
4056
  StyleGuide: '#no-cryptic-perlisms'
@@ -9,6 +9,7 @@ require 'regexp_parser'
9
9
  require 'unicode/display_width/no_string_ext'
10
10
  require 'rubocop-ast'
11
11
  require_relative 'rubocop/ast_aliases'
12
+ require_relative 'rubocop/ext/regexp_node'
12
13
 
13
14
  require_relative 'rubocop/version'
14
15
 
@@ -34,6 +35,7 @@ require_relative 'rubocop/cop/registry'
34
35
  require_relative 'rubocop/cop/base'
35
36
  require_relative 'rubocop/cop/cop'
36
37
  require_relative 'rubocop/cop/commissioner'
38
+ require_relative 'rubocop/cop/documentation'
37
39
  require_relative 'rubocop/cop/corrector'
38
40
  require_relative 'rubocop/cop/force'
39
41
  require_relative 'rubocop/cop/severity'
@@ -116,6 +118,7 @@ require_relative 'rubocop/cop/mixin/trailing_comma'
116
118
  require_relative 'rubocop/cop/mixin/uncommunicative_name'
117
119
  require_relative 'rubocop/cop/mixin/unused_argument'
118
120
  require_relative 'rubocop/cop/mixin/visibility_help'
121
+ require_relative 'rubocop/cop/mixin/comments_help' # relies on visibility_help
119
122
 
120
123
  require_relative 'rubocop/cop/utils/format_string'
121
124
 
@@ -165,6 +168,7 @@ require_relative 'rubocop/cop/layout/else_alignment'
165
168
  require_relative 'rubocop/cop/layout/empty_comment'
166
169
  require_relative 'rubocop/cop/layout/empty_line_after_guard_clause'
167
170
  require_relative 'rubocop/cop/layout/empty_line_after_magic_comment'
171
+ require_relative 'rubocop/cop/layout/empty_line_after_multiline_condition'
168
172
  require_relative 'rubocop/cop/layout/empty_line_between_defs'
169
173
  require_relative 'rubocop/cop/layout/empty_lines_around_access_modifier'
170
174
  require_relative 'rubocop/cop/layout/empty_lines_around_arguments'
@@ -255,12 +259,14 @@ require_relative 'rubocop/cop/lint/duplicate_case_condition'
255
259
  require_relative 'rubocop/cop/lint/duplicate_elsif_condition'
256
260
  require_relative 'rubocop/cop/lint/duplicate_hash_key'
257
261
  require_relative 'rubocop/cop/lint/duplicate_methods'
262
+ require_relative 'rubocop/cop/lint/duplicate_require'
258
263
  require_relative 'rubocop/cop/lint/duplicate_rescue_exception'
259
264
  require_relative 'rubocop/cop/lint/each_with_object_argument'
260
265
  require_relative 'rubocop/cop/lint/else_layout'
261
266
  require_relative 'rubocop/cop/lint/empty_conditional_body'
262
267
  require_relative 'rubocop/cop/lint/empty_ensure'
263
268
  require_relative 'rubocop/cop/lint/empty_expression'
269
+ require_relative 'rubocop/cop/lint/empty_file'
264
270
  require_relative 'rubocop/cop/lint/empty_interpolation'
265
271
  require_relative 'rubocop/cop/lint/empty_when'
266
272
  require_relative 'rubocop/cop/lint/ensure_return'
@@ -320,6 +326,7 @@ require_relative 'rubocop/cop/lint/suppressed_exception'
320
326
  require_relative 'rubocop/cop/lint/syntax'
321
327
  require_relative 'rubocop/cop/lint/to_json'
322
328
  require_relative 'rubocop/cop/lint/top_level_return_with_argument'
329
+ require_relative 'rubocop/cop/lint/trailing_comma_in_attribute_declaration'
323
330
  require_relative 'rubocop/cop/lint/underscore_prefixed_variable_name'
324
331
  require_relative 'rubocop/cop/lint/unified_integer'
325
332
  require_relative 'rubocop/cop/lint/unreachable_code'
@@ -331,6 +338,7 @@ require_relative 'rubocop/cop/lint/uri_regexp'
331
338
  require_relative 'rubocop/cop/lint/useless_access_modifier'
332
339
  require_relative 'rubocop/cop/lint/useless_assignment'
333
340
  require_relative 'rubocop/cop/lint/useless_else_without_rescue'
341
+ require_relative 'rubocop/cop/lint/useless_method_definition'
334
342
  require_relative 'rubocop/cop/lint/useless_setter_call'
335
343
  require_relative 'rubocop/cop/lint/void'
336
344
 
@@ -385,10 +393,12 @@ require_relative 'rubocop/cop/style/character_literal'
385
393
  require_relative 'rubocop/cop/style/class_and_module_children'
386
394
  require_relative 'rubocop/cop/style/class_check'
387
395
  require_relative 'rubocop/cop/style/class_methods'
396
+ require_relative 'rubocop/cop/style/class_methods_definitions'
388
397
  require_relative 'rubocop/cop/style/class_vars'
389
398
  require_relative 'rubocop/cop/style/collection_methods'
390
399
  require_relative 'rubocop/cop/style/colon_method_call'
391
400
  require_relative 'rubocop/cop/style/colon_method_definition'
401
+ require_relative 'rubocop/cop/style/combinable_loops'
392
402
  require_relative 'rubocop/cop/style/command_literal'
393
403
  require_relative 'rubocop/cop/style/comment_annotation'
394
404
  require_relative 'rubocop/cop/style/commented_keyword'
@@ -442,6 +452,7 @@ require_relative 'rubocop/cop/style/infinite_loop'
442
452
  require_relative 'rubocop/cop/style/inverse_methods'
443
453
  require_relative 'rubocop/cop/style/inline_comment'
444
454
  require_relative 'rubocop/cop/style/ip_addresses'
455
+ require_relative 'rubocop/cop/style/keyword_parameters_order'
445
456
  require_relative 'rubocop/cop/style/lambda'
446
457
  require_relative 'rubocop/cop/style/lambda_call'
447
458
  require_relative 'rubocop/cop/style/line_end_concatenation'
@@ -450,6 +461,8 @@ require_relative 'rubocop/cop/style/method_call_with_args_parentheses'
450
461
  require_relative 'rubocop/cop/style/redundant_assignment'
451
462
  require_relative 'rubocop/cop/style/redundant_fetch_block'
452
463
  require_relative 'rubocop/cop/style/redundant_file_extension_in_require'
464
+ require_relative 'rubocop/cop/style/redundant_self_assignment'
465
+ require_relative 'rubocop/cop/style/sole_nested_conditional'
453
466
  require_relative 'rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses'
454
467
  require_relative 'rubocop/cop/style/method_call_with_args_parentheses/require_parentheses'
455
468
  require_relative 'rubocop/cop/style/method_called_on_do_end_block'
@@ -4,6 +4,7 @@ require 'json'
4
4
 
5
5
  module RuboCop
6
6
  # Converts RuboCop objects to and from the serialization format JSON.
7
+ # @api private
7
8
  class CachedData
8
9
  def initialize(filename)
9
10
  @filename = filename
@@ -3,6 +3,7 @@
3
3
  module RuboCop
4
4
  class CLI
5
5
  # Home of subcommands in the CLI.
6
+ # @api private
6
7
  module Command
7
8
  class << self
8
9
  # Find the command with a given name and run it in an environment.
@@ -4,6 +4,7 @@ module RuboCop
4
4
  class CLI
5
5
  module Command
6
6
  # Generate a configuration file acting as a TODO list.
7
+ # @api private
7
8
  class AutoGenerateConfig < Base
8
9
  self.command_name = :auto_gen_config
9
10
 
@@ -4,6 +4,7 @@ module RuboCop
4
4
  class CLI
5
5
  module Command
6
6
  # A subcommand in the CLI.
7
+ # @api private
7
8
  class Base
8
9
  attr_reader :env
9
10
 
@@ -4,6 +4,7 @@ module RuboCop
4
4
  class CLI
5
5
  module Command
6
6
  # Run all the selected cops and report the result.
7
+ # @api private
7
8
  class ExecuteRunner < Base
8
9
  include Formatter::TextUtil
9
10
 
@@ -4,6 +4,7 @@ module RuboCop
4
4
  class CLI
5
5
  module Command
6
6
  # Generate a .rubocop.yml file in the current directory.
7
+ # @api private
7
8
  class InitDotfile < Base
8
9
  DOTFILE = ConfigLoader::DOTFILE
9
10
 
@@ -5,6 +5,7 @@ module RuboCop
5
5
  module Command
6
6
  # Shows the given cops, or all cops by default, and their configurations
7
7
  # for the current directory.
8
+ # @api private
8
9
  class ShowCops < Base
9
10
  self.command_name = :show_cops
10
11
 
@@ -4,6 +4,7 @@ module RuboCop
4
4
  class CLI
5
5
  module Command
6
6
  # Display version.
7
+ # @api private
7
8
  class Version < Base
8
9
  self.command_name = :version
9
10
 
@@ -3,6 +3,7 @@
3
3
  module RuboCop
4
4
  class CLI
5
5
  # Execution environment for a CLI command.
6
+ # @api private
6
7
  class Environment
7
8
  attr_reader :options, :config_store, :paths
8
9
 
@@ -4,12 +4,17 @@ module RuboCop
4
4
  # This class parses the special `rubocop:disable` comments in a source
5
5
  # and provides a way to check if each cop is enabled at arbitrary line.
6
6
  class CommentConfig
7
+ # @api private
7
8
  REDUNDANT_DISABLE = 'Lint/RedundantCopDisableDirective'
8
9
 
10
+ # @api private
9
11
  COP_NAME_PATTERN = '([A-Z]\w+/)?(?:[A-Z]\w+)'
12
+ # @api private
10
13
  COP_NAMES_PATTERN = "(?:#{COP_NAME_PATTERN} , )*#{COP_NAME_PATTERN}"
14
+ # @api private
11
15
  COPS_PATTERN = "(all|#{COP_NAMES_PATTERN})"
12
16
 
17
+ # @api private
13
18
  COMMENT_DIRECTIVE_REGEXP = Regexp.new(
14
19
  "# rubocop : ((?:disable|enable|todo))\\b #{COPS_PATTERN}"
15
20
  .gsub(' ', '\s*')
@@ -140,22 +140,33 @@ module RuboCop
140
140
  @project_root ||= find_project_root
141
141
  end
142
142
 
143
+ PENDING_BANNER = <<~BANNER
144
+ The following cops were added to RuboCop, but are not configured. Please set Enabled to either `true` or `false` in your `.rubocop.yml` file.
145
+
146
+ Please also note that can also opt-in to new cops by default by adding this to your config:
147
+ AllCops:
148
+ NewCops: enable
149
+ BANNER
150
+
143
151
  def warn_on_pending_cops(pending_cops)
144
152
  return if pending_cops.empty?
145
153
 
146
- warn Rainbow('The following cops were added to RuboCop, but are not ' \
147
- 'configured. Please set Enabled to either `true` or ' \
148
- '`false` in your `.rubocop.yml` file:').yellow
154
+ warn Rainbow(PENDING_BANNER).yellow
149
155
 
150
156
  pending_cops.each do |cop|
151
- version = cop.metadata['VersionAdded'] || 'N/A'
152
-
153
- warn Rainbow(" - #{cop.name} (#{version})").yellow
157
+ warn_pending_cop cop
154
158
  end
155
159
 
156
160
  warn Rainbow('For more information: https://docs.rubocop.org/rubocop/versioning.html').yellow
157
161
  end
158
162
 
163
+ def warn_pending_cop(cop)
164
+ version = cop.metadata['VersionAdded'] || 'N/A'
165
+
166
+ warn Rainbow("#{cop.name}: # (new in #{version})").yellow
167
+ warn Rainbow(' Enabled: true').yellow
168
+ end
169
+
159
170
  # Merges the given configuration with the default one.
160
171
  def merge_with_default(config, config_file, unset_nil: true)
161
172
  resolver.merge_with_default(config, config_file, unset_nil: unset_nil)