rubocop 0.51.0 → 0.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (360) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -2
  3. data/config/default.yml +86 -10
  4. data/config/disabled.yml +9 -4
  5. data/config/enabled.yml +1105 -1006
  6. data/lib/rubocop.rb +30 -3
  7. data/lib/rubocop/ast/builder.rb +2 -0
  8. data/lib/rubocop/ast/node.rb +24 -2
  9. data/lib/rubocop/ast/node/args_node.rb +17 -0
  10. data/lib/rubocop/ast/node/array_node.rb +1 -1
  11. data/lib/rubocop/ast/node/mixin/basic_literal_node.rb +16 -0
  12. data/lib/rubocop/ast/node/send_node.rb +20 -0
  13. data/lib/rubocop/ast/node/str_node.rb +14 -0
  14. data/lib/rubocop/ast/node/symbol_node.rb +20 -0
  15. data/lib/rubocop/ast/traversal.rb +4 -4
  16. data/lib/rubocop/cli.rb +45 -4
  17. data/lib/rubocop/comment_config.rb +2 -5
  18. data/lib/rubocop/config.rb +42 -8
  19. data/lib/rubocop/config_loader.rb +39 -100
  20. data/lib/rubocop/config_loader_resolver.rb +99 -2
  21. data/lib/rubocop/cop/autocorrect_logic.rb +1 -1
  22. data/lib/rubocop/cop/bundler/duplicated_gem.rb +7 -7
  23. data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +4 -3
  24. data/lib/rubocop/cop/bundler/ordered_gems.rb +2 -2
  25. data/lib/rubocop/cop/cop.rb +16 -46
  26. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +102 -0
  27. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +3 -2
  28. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +87 -0
  29. data/lib/rubocop/cop/generator.rb +23 -4
  30. data/lib/rubocop/cop/internal_affairs.rb +1 -1
  31. data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +46 -0
  32. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +2 -2
  33. data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +9 -8
  34. data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +1 -1
  35. data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +1 -1
  36. data/lib/rubocop/cop/layout/access_modifier_indentation.rb +4 -7
  37. data/lib/rubocop/cop/layout/align_hash.rb +16 -16
  38. data/lib/rubocop/cop/layout/align_parameters.rb +6 -12
  39. data/lib/rubocop/cop/layout/block_end_newline.rb +19 -5
  40. data/lib/rubocop/cop/layout/case_indentation.rb +14 -17
  41. data/lib/rubocop/cop/layout/class_structure.rb +306 -0
  42. data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +1 -0
  43. data/lib/rubocop/cop/layout/comment_indentation.rb +39 -2
  44. data/lib/rubocop/cop/layout/dot_position.rb +22 -13
  45. data/lib/rubocop/cop/layout/else_alignment.rb +6 -6
  46. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +17 -17
  47. data/lib/rubocop/cop/layout/empty_lines.rb +15 -1
  48. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +3 -2
  49. data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +89 -0
  50. data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +2 -2
  51. data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +4 -8
  52. data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +30 -5
  53. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +7 -3
  54. data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +2 -2
  55. data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +22 -7
  56. data/lib/rubocop/cop/layout/end_of_line.rb +1 -1
  57. data/lib/rubocop/cop/layout/extra_spacing.rb +21 -24
  58. data/lib/rubocop/cop/layout/first_parameter_indentation.rb +4 -1
  59. data/lib/rubocop/cop/layout/indent_array.rb +67 -20
  60. data/lib/rubocop/cop/layout/indent_hash.rb +70 -25
  61. data/lib/rubocop/cop/layout/indent_heredoc.rb +51 -11
  62. data/lib/rubocop/cop/layout/indentation_width.rb +24 -17
  63. data/lib/rubocop/cop/layout/initial_indentation.rb +7 -5
  64. data/lib/rubocop/cop/layout/leading_comment_space.rb +2 -2
  65. data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +47 -14
  66. data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +10 -9
  67. data/lib/rubocop/cop/layout/multiline_block_layout.rb +19 -16
  68. data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +46 -13
  69. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +9 -10
  70. data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +4 -0
  71. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +9 -3
  72. data/lib/rubocop/cop/layout/space_after_colon.rb +4 -4
  73. data/lib/rubocop/cop/layout/space_after_comma.rb +3 -3
  74. data/lib/rubocop/cop/layout/space_after_method_name.rb +4 -4
  75. data/lib/rubocop/cop/layout/space_after_semicolon.rb +8 -1
  76. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +16 -19
  77. data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +27 -16
  78. data/lib/rubocop/cop/layout/space_around_keyword.rb +13 -11
  79. data/lib/rubocop/cop/layout/space_around_operators.rb +26 -13
  80. data/lib/rubocop/cop/layout/space_before_block_braces.rb +10 -10
  81. data/lib/rubocop/cop/layout/space_before_comma.rb +12 -1
  82. data/lib/rubocop/cop/layout/space_before_comment.rb +2 -4
  83. data/lib/rubocop/cop/layout/space_before_first_arg.rb +4 -3
  84. data/lib/rubocop/cop/layout/space_before_semicolon.rb +1 -1
  85. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +6 -12
  86. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +235 -0
  87. data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +3 -3
  88. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +87 -16
  89. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +57 -34
  90. data/lib/rubocop/cop/layout/space_inside_parens.rb +31 -3
  91. data/lib/rubocop/cop/layout/space_inside_range_literal.rb +15 -15
  92. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +81 -0
  93. data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +24 -13
  94. data/lib/rubocop/cop/layout/tab.rb +2 -2
  95. data/lib/rubocop/cop/layout/trailing_blank_lines.rb +7 -7
  96. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +11 -20
  97. data/lib/rubocop/cop/lint/block_alignment.rb +26 -23
  98. data/lib/rubocop/cop/lint/boolean_symbol.rb +1 -1
  99. data/lib/rubocop/cop/lint/def_end_alignment.rb +5 -10
  100. data/lib/rubocop/cop/lint/else_layout.rb +2 -2
  101. data/lib/rubocop/cop/lint/end_alignment.rb +13 -14
  102. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +3 -4
  103. data/lib/rubocop/cop/lint/inherit_exception.rb +10 -14
  104. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +81 -0
  105. data/lib/rubocop/cop/lint/nested_percent_literal.rb +58 -0
  106. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +2 -2
  107. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +1 -1
  108. data/lib/rubocop/cop/lint/percent_string_array.rb +14 -14
  109. data/lib/rubocop/cop/lint/percent_symbol_array.rb +11 -11
  110. data/lib/rubocop/cop/lint/redundant_with_index.rb +6 -3
  111. data/lib/rubocop/cop/lint/redundant_with_object.rb +1 -1
  112. data/lib/rubocop/cop/lint/require_parentheses.rb +3 -1
  113. data/lib/rubocop/cop/lint/rescue_type.rb +3 -3
  114. data/lib/rubocop/cop/lint/script_permission.rb +1 -0
  115. data/lib/rubocop/cop/lint/shadowed_argument.rb +146 -0
  116. data/lib/rubocop/cop/lint/string_conversion_in_interpolation.rb +6 -6
  117. data/lib/rubocop/cop/lint/unneeded_disable.rb +29 -11
  118. data/lib/rubocop/cop/lint/unneeded_require_statement.rb +2 -1
  119. data/lib/rubocop/cop/lint/unneeded_splat_expansion.rb +43 -17
  120. data/lib/rubocop/cop/message_annotator.rb +4 -2
  121. data/lib/rubocop/cop/metrics/abc_size.rb +2 -2
  122. data/lib/rubocop/cop/metrics/class_length.rb +3 -1
  123. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +2 -1
  124. data/lib/rubocop/cop/metrics/line_length.rb +2 -2
  125. data/lib/rubocop/cop/metrics/module_length.rb +3 -1
  126. data/lib/rubocop/cop/metrics/parameter_lists.rb +9 -2
  127. data/lib/rubocop/cop/metrics/perceived_complexity.rb +2 -1
  128. data/lib/rubocop/cop/mixin/documentation_comment.rb +1 -1
  129. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +7 -5
  130. data/lib/rubocop/cop/mixin/empty_parameter.rb +23 -0
  131. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +7 -3
  132. data/lib/rubocop/cop/mixin/heredoc.rb +19 -19
  133. data/lib/rubocop/cop/mixin/method_complexity.rb +32 -8
  134. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +7 -3
  135. data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +6 -4
  136. data/lib/rubocop/cop/mixin/negative_conditional.rb +3 -0
  137. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +16 -12
  138. data/lib/rubocop/cop/mixin/parentheses.rb +12 -0
  139. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +8 -8
  140. data/lib/rubocop/cop/mixin/space_before_punctuation.rb +10 -10
  141. data/lib/rubocop/cop/mixin/statement_modifier.rb +7 -17
  142. data/lib/rubocop/cop/mixin/surrounding_space.rb +95 -8
  143. data/lib/rubocop/cop/mixin/too_many_lines.rb +2 -2
  144. data/lib/rubocop/cop/mixin/trailing_comma.rb +22 -14
  145. data/lib/rubocop/cop/mixin/unused_argument.rb +3 -40
  146. data/lib/rubocop/cop/naming/accessor_method_name.rb +20 -10
  147. data/lib/rubocop/cop/naming/ascii_identifiers.rb +33 -0
  148. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +5 -4
  149. data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +16 -12
  150. data/lib/rubocop/cop/naming/constant_name.rb +32 -3
  151. data/lib/rubocop/cop/naming/file_name.rb +19 -8
  152. data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +10 -16
  153. data/lib/rubocop/cop/naming/method_name.rb +20 -14
  154. data/lib/rubocop/cop/naming/predicate_name.rb +7 -3
  155. data/lib/rubocop/cop/naming/variable_name.rb +17 -2
  156. data/lib/rubocop/cop/naming/variable_number.rb +10 -27
  157. data/lib/rubocop/cop/offense.rb +6 -1
  158. data/lib/rubocop/cop/performance/case_when_splat.rb +2 -6
  159. data/lib/rubocop/cop/performance/casecmp.rb +5 -4
  160. data/lib/rubocop/cop/performance/compare_with_block.rb +13 -7
  161. data/lib/rubocop/cop/performance/count.rb +5 -4
  162. data/lib/rubocop/cop/performance/detect.rb +7 -4
  163. data/lib/rubocop/cop/performance/double_start_end_with.rb +2 -7
  164. data/lib/rubocop/cop/performance/end_with.rb +2 -2
  165. data/lib/rubocop/cop/performance/flat_map.rb +3 -2
  166. data/lib/rubocop/cop/performance/hash_each_methods.rb +41 -40
  167. data/lib/rubocop/cop/performance/lstrip_rstrip.rb +5 -4
  168. data/lib/rubocop/cop/performance/redundant_block_call.rb +22 -22
  169. data/lib/rubocop/cop/performance/redundant_match.rb +2 -2
  170. data/lib/rubocop/cop/performance/redundant_merge.rb +6 -4
  171. data/lib/rubocop/cop/performance/redundant_sort_by.rb +4 -4
  172. data/lib/rubocop/cop/performance/regexp_match.rb +3 -2
  173. data/lib/rubocop/cop/performance/size.rb +2 -2
  174. data/lib/rubocop/cop/performance/start_with.rb +2 -2
  175. data/lib/rubocop/cop/performance/string_replacement.rb +4 -4
  176. data/lib/rubocop/cop/performance/times_map.rb +14 -15
  177. data/lib/rubocop/cop/performance/uri_default_parser.rb +3 -3
  178. data/lib/rubocop/cop/rails/action_filter.rb +22 -0
  179. data/lib/rubocop/cop/rails/active_support_aliases.rb +2 -2
  180. data/lib/rubocop/cop/rails/application_job.rb +4 -2
  181. data/lib/rubocop/cop/rails/application_record.rb +4 -2
  182. data/lib/rubocop/cop/rails/create_table_with_timestamps.rb +82 -0
  183. data/lib/rubocop/cop/rails/delegate.rb +20 -25
  184. data/lib/rubocop/cop/rails/delegate_allow_blank.rb +2 -2
  185. data/lib/rubocop/cop/rails/environment_comparison.rb +66 -0
  186. data/lib/rubocop/cop/rails/exit.rb +7 -0
  187. data/lib/rubocop/cop/rails/has_and_belongs_to_many.rb +7 -0
  188. data/lib/rubocop/cop/rails/has_many_or_has_one_dependent.rb +6 -2
  189. data/lib/rubocop/cop/rails/http_positional_arguments.rb +36 -41
  190. data/lib/rubocop/cop/rails/inverse_of.rb +96 -0
  191. data/lib/rubocop/cop/rails/lexically_scoped_action_filter.rb +112 -0
  192. data/lib/rubocop/cop/rails/output.rb +9 -0
  193. data/lib/rubocop/cop/rails/output_safety.rb +14 -20
  194. data/lib/rubocop/cop/rails/pluralization_grammar.rb +8 -8
  195. data/lib/rubocop/cop/rails/presence.rb +105 -0
  196. data/lib/rubocop/cop/rails/read_write_attribute.rb +10 -10
  197. data/lib/rubocop/cop/rails/redundant_receiver_in_with_options.rb +91 -0
  198. data/lib/rubocop/cop/rails/relative_date_constant.rb +9 -9
  199. data/lib/rubocop/cop/rails/reversible_migration.rb +3 -4
  200. data/lib/rubocop/cop/rails/safe_navigation.rb +5 -6
  201. data/lib/rubocop/cop/rails/save_bang.rb +2 -2
  202. data/lib/rubocop/cop/rails/uniq_before_pluck.rb +1 -1
  203. data/lib/rubocop/cop/rails/validation.rb +7 -7
  204. data/lib/rubocop/cop/security/json_load.rb +4 -2
  205. data/lib/rubocop/cop/security/marshal_load.rb +4 -2
  206. data/lib/rubocop/cop/style/alias.rb +24 -26
  207. data/lib/rubocop/cop/style/and_or.rb +34 -28
  208. data/lib/rubocop/cop/style/array_join.rb +9 -0
  209. data/lib/rubocop/cop/style/ascii_comments.rb +24 -4
  210. data/lib/rubocop/cop/style/attr.rb +14 -4
  211. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +5 -3
  212. data/lib/rubocop/cop/style/bare_percent_literals.rb +31 -10
  213. data/lib/rubocop/cop/style/block_comments.rb +14 -2
  214. data/lib/rubocop/cop/style/block_delimiters.rb +80 -15
  215. data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +81 -48
  216. data/lib/rubocop/cop/style/case_equality.rb +12 -0
  217. data/lib/rubocop/cop/style/character_literal.rb +10 -0
  218. data/lib/rubocop/cop/style/class_and_module_children.rb +6 -2
  219. data/lib/rubocop/cop/style/class_check.rb +28 -9
  220. data/lib/rubocop/cop/style/class_methods.rb +8 -8
  221. data/lib/rubocop/cop/style/class_vars.rb +4 -3
  222. data/lib/rubocop/cop/style/collection_methods.rb +4 -2
  223. data/lib/rubocop/cop/style/colon_method_call.rb +16 -0
  224. data/lib/rubocop/cop/style/colon_method_definition.rb +36 -0
  225. data/lib/rubocop/cop/style/command_literal.rb +70 -21
  226. data/lib/rubocop/cop/style/comment_annotation.rb +35 -10
  227. data/lib/rubocop/cop/style/commented_keyword.rb +12 -9
  228. data/lib/rubocop/cop/style/conditional_assignment.rb +10 -12
  229. data/lib/rubocop/cop/style/copyright.rb +19 -20
  230. data/lib/rubocop/cop/style/date_time.rb +2 -2
  231. data/lib/rubocop/cop/style/def_with_parentheses.rb +27 -2
  232. data/lib/rubocop/cop/style/dir.rb +2 -2
  233. data/lib/rubocop/cop/style/documentation.rb +17 -2
  234. data/lib/rubocop/cop/style/each_for_simple_loop.rb +7 -7
  235. data/lib/rubocop/cop/style/each_with_object.rb +5 -5
  236. data/lib/rubocop/cop/style/empty_block_parameter.rb +47 -0
  237. data/lib/rubocop/cop/style/empty_case_condition.rb +2 -2
  238. data/lib/rubocop/cop/style/empty_else.rb +52 -22
  239. data/lib/rubocop/cop/style/empty_lambda_parameter.rb +43 -0
  240. data/lib/rubocop/cop/style/empty_literal.rb +17 -5
  241. data/lib/rubocop/cop/style/empty_method.rb +4 -10
  242. data/lib/rubocop/cop/style/encoding.rb +2 -1
  243. data/lib/rubocop/cop/style/eval_with_location.rb +146 -0
  244. data/lib/rubocop/cop/style/even_odd.rb +4 -2
  245. data/lib/rubocop/cop/style/extend_self.rb +92 -0
  246. data/lib/rubocop/cop/style/flip_flop.rb +11 -0
  247. data/lib/rubocop/cop/style/format_string.rb +29 -2
  248. data/lib/rubocop/cop/style/format_string_token.rb +15 -14
  249. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +4 -3
  250. data/lib/rubocop/cop/style/global_vars.rb +11 -1
  251. data/lib/rubocop/cop/style/hash_syntax.rb +44 -43
  252. data/lib/rubocop/cop/style/identical_conditional_branches.rb +8 -8
  253. data/lib/rubocop/cop/style/if_inside_else.rb +10 -10
  254. data/lib/rubocop/cop/style/if_unless_modifier.rb +7 -7
  255. data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +2 -2
  256. data/lib/rubocop/cop/style/if_with_semicolon.rb +9 -0
  257. data/lib/rubocop/cop/style/implicit_runtime_error.rb +5 -5
  258. data/lib/rubocop/cop/style/infinite_loop.rb +2 -2
  259. data/lib/rubocop/cop/style/lambda.rb +23 -31
  260. data/lib/rubocop/cop/style/lambda_call.rb +15 -9
  261. data/lib/rubocop/cop/style/line_end_concatenation.rb +4 -4
  262. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +2 -2
  263. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +2 -2
  264. data/lib/rubocop/cop/style/method_def_parentheses.rb +4 -3
  265. data/lib/rubocop/cop/style/method_missing.rb +8 -8
  266. data/lib/rubocop/cop/style/min_max.rb +12 -12
  267. data/lib/rubocop/cop/style/missing_else.rb +5 -4
  268. data/lib/rubocop/cop/style/mixin_grouping.rb +29 -19
  269. data/lib/rubocop/cop/style/mixin_usage.rb +8 -10
  270. data/lib/rubocop/cop/style/module_function.rb +17 -5
  271. data/lib/rubocop/cop/style/multiline_if_modifier.rb +4 -4
  272. data/lib/rubocop/cop/style/multiline_if_then.rb +14 -13
  273. data/lib/rubocop/cop/style/multiline_memoization.rb +8 -14
  274. data/lib/rubocop/cop/style/mutable_constant.rb +12 -12
  275. data/lib/rubocop/cop/style/negated_if.rb +22 -30
  276. data/lib/rubocop/cop/style/negated_while.rb +1 -5
  277. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +18 -17
  278. data/lib/rubocop/cop/style/next.rb +39 -11
  279. data/lib/rubocop/cop/style/nil_comparison.rb +6 -6
  280. data/lib/rubocop/cop/style/non_nil_check.rb +25 -22
  281. data/lib/rubocop/cop/style/not.rb +14 -4
  282. data/lib/rubocop/cop/style/numeric_literal_prefix.rb +6 -6
  283. data/lib/rubocop/cop/style/numeric_literals.rb +7 -7
  284. data/lib/rubocop/cop/style/numeric_predicate.rb +14 -18
  285. data/lib/rubocop/cop/style/one_line_conditional.rb +4 -4
  286. data/lib/rubocop/cop/style/option_hash.rb +11 -14
  287. data/lib/rubocop/cop/style/or_assignment.rb +2 -2
  288. data/lib/rubocop/cop/style/parallel_assignment.rb +13 -13
  289. data/lib/rubocop/cop/style/parentheses_around_condition.rb +19 -3
  290. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +24 -3
  291. data/lib/rubocop/cop/style/percent_q_literals.rb +27 -6
  292. data/lib/rubocop/cop/style/perl_backrefs.rb +7 -0
  293. data/lib/rubocop/cop/style/preferred_hash_methods.rb +6 -10
  294. data/lib/rubocop/cop/style/proc.rb +8 -0
  295. data/lib/rubocop/cop/style/raise_args.rb +8 -14
  296. data/lib/rubocop/cop/style/random_with_offset.rb +160 -0
  297. data/lib/rubocop/cop/style/redundant_begin.rb +14 -4
  298. data/lib/rubocop/cop/style/redundant_conditional.rb +9 -8
  299. data/lib/rubocop/cop/style/redundant_return.rb +5 -4
  300. data/lib/rubocop/cop/style/redundant_self.rb +25 -26
  301. data/lib/rubocop/cop/style/regexp_literal.rb +74 -21
  302. data/lib/rubocop/cop/style/rescue_modifier.rb +11 -0
  303. data/lib/rubocop/cop/style/rescue_standard_error.rb +122 -0
  304. data/lib/rubocop/cop/style/return_nil.rb +4 -8
  305. data/lib/rubocop/cop/style/safe_navigation.rb +20 -2
  306. data/lib/rubocop/cop/style/self_assignment.rb +13 -13
  307. data/lib/rubocop/cop/style/semicolon.rb +18 -8
  308. data/lib/rubocop/cop/style/send.rb +9 -0
  309. data/lib/rubocop/cop/style/signal_exception.rb +100 -0
  310. data/lib/rubocop/cop/style/single_line_block_params.rb +2 -2
  311. data/lib/rubocop/cop/style/single_line_methods.rb +20 -8
  312. data/lib/rubocop/cop/style/special_global_vars.rb +16 -11
  313. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +7 -12
  314. data/lib/rubocop/cop/style/stderr_puts.rb +5 -3
  315. data/lib/rubocop/cop/style/string_hash_keys.rb +36 -0
  316. data/lib/rubocop/cop/style/string_literals.rb +22 -0
  317. data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +2 -8
  318. data/lib/rubocop/cop/style/string_methods.rb +18 -7
  319. data/lib/rubocop/cop/style/symbol_array.rb +5 -9
  320. data/lib/rubocop/cop/style/symbol_proc.rb +5 -4
  321. data/lib/rubocop/cop/style/ternary_parentheses.rb +31 -40
  322. data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +101 -0
  323. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +20 -6
  324. data/lib/rubocop/cop/style/trailing_comma_in_literal.rb +22 -7
  325. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +95 -0
  326. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +8 -4
  327. data/lib/rubocop/cop/style/trivial_accessors.rb +32 -10
  328. data/lib/rubocop/cop/style/unless_else.rb +15 -0
  329. data/lib/rubocop/cop/style/unneeded_capital_w.rb +17 -7
  330. data/lib/rubocop/cop/style/unneeded_interpolation.rb +14 -18
  331. data/lib/rubocop/cop/style/unneeded_percent_q.rb +13 -12
  332. data/lib/rubocop/cop/style/variable_interpolation.rb +20 -9
  333. data/lib/rubocop/cop/style/when_then.rb +13 -0
  334. data/lib/rubocop/cop/style/while_until_do.rb +26 -4
  335. data/lib/rubocop/cop/style/while_until_modifier.rb +25 -6
  336. data/lib/rubocop/cop/style/word_array.rb +4 -8
  337. data/lib/rubocop/cop/style/yoda_condition.rb +10 -16
  338. data/lib/rubocop/cop/style/zero_length_predicate.rb +23 -15
  339. data/lib/rubocop/cop/util.rb +42 -33
  340. data/lib/rubocop/cop/variable_force.rb +1 -1
  341. data/lib/rubocop/cop/variable_force/assignment.rb +4 -2
  342. data/lib/rubocop/cop/variable_force/scope.rb +1 -5
  343. data/lib/rubocop/cop/variable_force/variable.rb +1 -1
  344. data/lib/rubocop/formatter/disabled_config_formatter.rb +2 -3
  345. data/lib/rubocop/formatter/formatter_set.rb +2 -1
  346. data/lib/rubocop/formatter/json_formatter.rb +9 -3
  347. data/lib/rubocop/formatter/quiet_formatter.rb +13 -0
  348. data/lib/rubocop/node_pattern.rb +2 -3
  349. data/lib/rubocop/options.rb +8 -8
  350. data/lib/rubocop/path_util.rb +15 -3
  351. data/lib/rubocop/processed_source.rb +5 -2
  352. data/lib/rubocop/rspec/shared_contexts.rb +4 -0
  353. data/lib/rubocop/runner.rb +1 -1
  354. data/lib/rubocop/token.rb +74 -0
  355. data/lib/rubocop/version.rb +1 -1
  356. metadata +37 -10
  357. data/lib/rubocop/cop/internal_affairs/deprecated_positional_arguments.rb +0 -81
  358. data/lib/rubocop/cop/layout/space_inside_brackets.rb +0 -20
  359. data/lib/rubocop/cop/lint/rescue_without_error_class.rb +0 -41
  360. data/lib/rubocop/cop/mixin/space_inside.rb +0 -76
@@ -18,8 +18,7 @@ module RuboCop
18
18
  # `either` (which is the default) : the `end` is allowed to be in either
19
19
  # location. The autofixer will default to `start_of_line`.
20
20
  #
21
- # @example
22
- #
21
+ # @example EnforcedStyleAlignWith: either (default)
23
22
  # # bad
24
23
  #
25
24
  # foo.bar
@@ -27,19 +26,19 @@ module RuboCop
27
26
  # baz
28
27
  # end
29
28
  #
30
- # @example
31
- #
32
- # # EnforcedStyleAlignWith: either (default)
33
- #
34
29
  # # good
35
30
  #
36
31
  # variable = lambda do |i|
37
32
  # i
38
33
  # end
39
34
  #
40
- # @example
35
+ # @example EnforcedStyleAlignWith: start_of_block
36
+ # # bad
41
37
  #
42
- # # EnforcedStyleAlignWith: start_of_block
38
+ # foo.bar
39
+ # .each do
40
+ # baz
41
+ # end
43
42
  #
44
43
  # # good
45
44
  #
@@ -48,9 +47,13 @@ module RuboCop
48
47
  # baz
49
48
  # end
50
49
  #
51
- # @example
50
+ # @example EnforcedStyleAlignWith: start_of_line
51
+ # # bad
52
52
  #
53
- # # EnforcedStyleAlignWith: start_of_line
53
+ # foo.bar
54
+ # .each do
55
+ # baz
56
+ # end
54
57
  #
55
58
  # # good
56
59
  #
@@ -80,6 +83,19 @@ module RuboCop
80
83
  'EnforcedStyleAlignWith'
81
84
  end
82
85
 
86
+ def autocorrect(node)
87
+ ancestor_node = start_for_block_node(node)
88
+ start_col = compute_start_col(ancestor_node, node)
89
+ loc_end = node.loc.end
90
+ delta = start_col - loc_end.column
91
+
92
+ if delta > 0
93
+ add_space_before(loc_end, delta)
94
+ elsif delta < 0
95
+ remove_space_before(loc_end.begin_pos, -delta)
96
+ end
97
+ end
98
+
83
99
  private
84
100
 
85
101
  def start_for_block_node(block_node)
@@ -211,19 +227,6 @@ module RuboCop
211
227
  (ancestor_node || node).source_range.column
212
228
  end
213
229
 
214
- def autocorrect(node)
215
- ancestor_node = start_for_block_node(node)
216
- start_col = compute_start_col(ancestor_node, node)
217
- loc_end = node.loc.end
218
- delta = start_col - loc_end.column
219
-
220
- if delta > 0
221
- add_space_before(loc_end, delta)
222
- elsif delta < 0
223
- remove_space_before(loc_end.begin_pos, -delta)
224
- end
225
- end
226
-
227
230
  def add_space_before(loc, delta)
228
231
  ->(corrector) { corrector.insert_before(loc, ' ' * delta) }
229
232
  end
@@ -30,7 +30,7 @@ module RuboCop
30
30
  def on_sym(node)
31
31
  return unless boolean_symbol?(node)
32
32
 
33
- add_offense(node, message: format(MSG, node.to_a.first))
33
+ add_offense(node, message: format(MSG, node.value))
34
34
  end
35
35
  end
36
36
  end
@@ -12,25 +12,22 @@ module RuboCop
12
12
  # keyword is. If it's set to `def`, the `end` shall be aligned with the
13
13
  # `def` keyword.
14
14
  #
15
- # @example
16
- #
15
+ # @example EnforcedStyleAlignWith: start_of_line (default)
17
16
  # # bad
18
17
  #
19
18
  # private def foo
20
19
  # end
21
20
  #
22
- # @example
23
- #
24
- # # EnforcedStyleAlignWith: start_of_line (default)
25
- #
26
21
  # # good
27
22
  #
28
23
  # private def foo
29
24
  # end
30
25
  #
31
- # @example
26
+ # @example EnforcedStyleAlignWith: def
27
+ # # bad
32
28
  #
33
- # # EnforcedStyleAlignWith: def
29
+ # private def foo
30
+ # end
34
31
  #
35
32
  # # good
36
33
  #
@@ -63,8 +60,6 @@ module RuboCop
63
60
  ignore_node(method_def) # Don't check the same `end` again.
64
61
  end
65
62
 
66
- private
67
-
68
63
  def autocorrect(node)
69
64
  if style == :start_of_line && node.parent && node.parent.send_type?
70
65
  align(node, node.parent)
@@ -12,7 +12,7 @@ module RuboCop
12
12
  # # bad
13
13
  #
14
14
  # if something
15
- # ...
15
+ # # ...
16
16
  # else do_this
17
17
  # do_that
18
18
  # end
@@ -22,7 +22,7 @@ module RuboCop
22
22
  # # good
23
23
  #
24
24
  # if something
25
- # ...
25
+ # # ...
26
26
  # else
27
27
  # do_this
28
28
  # do_that
@@ -17,34 +17,33 @@ module RuboCop
17
17
  # If it's set to `start_of_line`, the `end` shall be aligned with the
18
18
  # start of the line where the matching keyword appears.
19
19
  #
20
- # @example
21
- #
20
+ # @example EnforcedStyleAlignWith: keyword (default)
22
21
  # # bad
23
22
  #
24
23
  # variable = if true
25
24
  # end
26
25
  #
27
- # @example
28
- #
29
- # # EnforcedStyleAlignWith: keyword (default)
30
- #
31
26
  # # good
32
27
  #
33
28
  # variable = if true
34
29
  # end
35
30
  #
36
- # @example
31
+ # @example EnforcedStyleAlignWith: variable
32
+ # # bad
37
33
  #
38
- # # EnforcedStyleAlignWith: variable
34
+ # variable = if true
35
+ # end
39
36
  #
40
37
  # # good
41
38
  #
42
39
  # variable = if true
43
40
  # end
44
41
  #
45
- # @example
42
+ # @example EnforcedStyleAlignWith: start_of_line
43
+ # # bad
46
44
  #
47
- # # EnforcedStyleAlignWith: start_of_line
45
+ # variable = if true
46
+ # end
48
47
  #
49
48
  # # good
50
49
  #
@@ -82,6 +81,10 @@ module RuboCop
82
81
  end
83
82
  end
84
83
 
84
+ def autocorrect(node)
85
+ align(node, alignment_node(node))
86
+ end
87
+
85
88
  private
86
89
 
87
90
  def check_assignment(node, rhs)
@@ -125,10 +128,6 @@ module RuboCop
125
128
  check_end_kw_alignment(node, align_with)
126
129
  end
127
130
 
128
- def autocorrect(node)
129
- align(node, alignment_node(node))
130
- end
131
-
132
131
  def alignment_node(node)
133
132
  if style == :keyword
134
133
  node
@@ -96,7 +96,7 @@ module RuboCop
96
96
  end
97
97
 
98
98
  def check_scope(node, cur_vis = :public)
99
- node.children.reduce(cur_vis) do |visibility, child|
99
+ node.each_child_node.reduce(cur_vis) do |visibility, child|
100
100
  check_child_scope(child, visibility)
101
101
  end
102
102
  end
@@ -133,14 +133,13 @@ module RuboCop
133
133
  end
134
134
 
135
135
  def mark_method_as_useless(node, cur_vis)
136
- _, method_name, = *node
137
- @useless[method_name] = [node, cur_vis, @last_access_modifier]
136
+ @useless[node.method_name] = [node, cur_vis, @last_access_modifier]
138
137
  end
139
138
 
140
139
  def revert_method_uselessness(methods)
141
140
  methods.each do |sym|
142
141
  next unless sym.sym_type?
143
- @useless.delete(sym.children[0])
142
+ @useless.delete(sym.value)
144
143
  end
145
144
  end
146
145
  end
@@ -8,23 +8,19 @@ module RuboCop
8
8
  # `StandardError`. It is configurable to suggest using either
9
9
  # `RuntimeError` (default) or `StandardError` instead.
10
10
  #
11
- # @example
12
- #
11
+ # @example EnforcedStyle: runtime_error (default)
13
12
  # # bad
14
13
  #
15
14
  # class C < Exception; end
16
15
  #
17
- # @example
18
- #
19
- # # EnforcedStyle: runtime_error (default)
20
- #
21
16
  # # good
22
17
  #
23
18
  # class C < RuntimeError; end
24
19
  #
25
- # @example
20
+ # @example EnforcedStyle: standard_error
21
+ # # bad
26
22
  #
27
- # # EnforcedStyle: standard_error
23
+ # class C < Exception; end
28
24
  #
29
25
  # # good
30
26
  #
@@ -59,18 +55,18 @@ module RuboCop
59
55
  add_offense(base_class)
60
56
  end
61
57
 
62
- private
63
-
64
- def message(node)
65
- format(MSG, preferred_base_class, node.const_name)
66
- end
67
-
68
58
  def autocorrect(node)
69
59
  lambda do |corrector|
70
60
  corrector.replace(node.loc.expression, preferred_base_class)
71
61
  end
72
62
  end
73
63
 
64
+ private
65
+
66
+ def message(node)
67
+ format(MSG, preferred_base_class, node.const_name)
68
+ end
69
+
74
70
  def illegal_class_name?(class_node)
75
71
  ILLEGAL_CLASSES.include?(class_node.const_name)
76
72
  end
@@ -0,0 +1,81 @@
1
+ # frozen_string_literal: true
2
+
3
+ # rubocop:disable Lint/UnneededDisable
4
+ module RuboCop
5
+ module Cop
6
+ module Lint
7
+ # This cop checks that there is an `# rubocop:enable ...` statement
8
+ # after a `# rubocop:disable ...` statement. This will prevent leaving
9
+ # cop disables on wide ranges of code, that latter contributors to
10
+ # a file wouldn't be aware of.
11
+ #
12
+ # @example
13
+ # # Lint/MissingCopEnableDirective:
14
+ # # MaximumRangeSize: .inf
15
+ #
16
+ # # good
17
+ # # rubocop:disable Layout/SpaceAroundOperators
18
+ # x= 0
19
+ # # rubocop:enable Layout/SpaceAroundOperators
20
+ # # y = 1
21
+ # # EOF
22
+ #
23
+ # # bad
24
+ # # rubocop:disable Layout/SpaceAroundOperators
25
+ # x= 0
26
+ # # EOF
27
+ #
28
+ # @example
29
+ # # Lint/MissingCopEnableDirective:
30
+ # # MaximumRangeSize: 2
31
+ #
32
+ # # good
33
+ # # rubocop:disable Layout/SpaceAroundOperators
34
+ # x= 0
35
+ # # With the previous, there are 2 lines on which cop is disabled.
36
+ # # rubocop:enable Layout/SpaceAroundOperators
37
+ #
38
+ # # bad
39
+ # # rubocop:disable Layout/SpaceAroundOperators
40
+ # x= 0
41
+ # x += 1
42
+ # # Including this, that's 3 lines on which the cop is disabled.
43
+ # # rubocop:enable Layout/SpaceAroundOperators
44
+ #
45
+ class MissingCopEnableDirective < Cop
46
+ MSG = 'Re-enable %{cop} cop with `# rubocop:enable` after disabling it.'
47
+ .freeze
48
+ MSG_BOUND = 'Re-enable %{cop} cop within %{max_range} lines after ' \
49
+ 'disabling it.'.freeze
50
+
51
+ def investigate(processed_source)
52
+ max_range = cop_config['MaximumRangeSize']
53
+ processed_source.disabled_line_ranges.each do |cop, line_ranges|
54
+ line_ranges.each do |line_range|
55
+ # This has to remain a strict inequality to handle
56
+ # the case when max_range is Float::INFINITY
57
+ next if line_range.max - line_range.min < max_range + 2
58
+ range = source_range(processed_source.buffer,
59
+ line_range.min,
60
+ (0..0))
61
+ add_offense(range,
62
+ location: range,
63
+ message: message(max_range: max_range, cop: cop))
64
+ end
65
+ end
66
+ end
67
+
68
+ private
69
+
70
+ def message(max_range:, cop:)
71
+ if max_range == Float::INFINITY
72
+ format(MSG, cop: cop)
73
+ else
74
+ format(MSG_BOUND, cop: cop, max_range: max_range)
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
81
+ # rubocop:enable Lint/UnneededDisable, Layout/SpaceAroundOperators
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Lint
6
+ # This cop checks for nested percent literals.
7
+ #
8
+ # @example
9
+ #
10
+ # # bad
11
+ #
12
+ # # The percent literal for nested_attributes is parsed as four tokens,
13
+ # # yielding the array [:name, :content, :"%i[incorrectly", :"nested]"].
14
+ # attributes = {
15
+ # valid_attributes: %i[name content],
16
+ # nested_attributes: %i[name content %i[incorrectly nested]]
17
+ # }
18
+ class NestedPercentLiteral < Cop
19
+ include PercentLiteral
20
+
21
+ MSG = 'Within percent literals, nested percent literals do not ' \
22
+ 'function and may be unwanted in the result.'.freeze
23
+
24
+ # The array of regular expressions representing percent literals that,
25
+ # if found within a percent literal expression, will cause a
26
+ # NestedPercentLiteral violation to be emitted.
27
+ REGEXES = PercentLiteral::PERCENT_LITERAL_TYPES.map do |percent_literal|
28
+ /#{percent_literal}\W/
29
+ end.freeze
30
+
31
+ def on_array(node)
32
+ process(node, *PercentLiteral::PERCENT_LITERAL_TYPES)
33
+ end
34
+
35
+ def on_percent_literal(node)
36
+ add_offense(node) if contains_percent_literals?(node)
37
+ end
38
+
39
+ private
40
+
41
+ def str_content(node)
42
+ if node.str_type?
43
+ node.children[0]
44
+ else
45
+ node.children.map { |c| str_content(c) }.join
46
+ end
47
+ end
48
+
49
+ def contains_percent_literals?(node)
50
+ node.each_child_node.any? do |child|
51
+ literal = child.children.first.to_s.scrub
52
+ REGEXES.any? { |regex| literal.match(regex) }
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -18,13 +18,13 @@ module RuboCop
18
18
  #
19
19
  # class ItemApi
20
20
  # rescue_from ValidationError do |e| # non-iteration block with arg
21
- # return message: 'validation error' unless e.errors # allowed
21
+ # return { message: 'validation error' } unless e.errors # allowed
22
22
  # error_array = e.errors.map do |error| # block with method chain
23
23
  # return if error.suppress? # warned
24
24
  # return "#{error.param}: invalid" unless error.message # allowed
25
25
  # "#{error.param}: #{error.message}"
26
26
  # end
27
- # message: 'validation error', errors: error_array
27
+ # { message: 'validation error', errors: error_array }
28
28
  # end
29
29
  #
30
30
  # def update_items