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
@@ -5,6 +5,16 @@ module RuboCop
5
5
  module Style
6
6
  # This cop checks for multiple expressions placed on the same line.
7
7
  # It also checks for lines terminated with a semicolon.
8
+ #
9
+ # @example
10
+ # # bad
11
+ # foo = 1; bar = 2;
12
+ # baz = 3;
13
+ #
14
+ # # good
15
+ # foo = 1
16
+ # bar = 2
17
+ # baz = 3
8
18
  class Semicolon < Cop
9
19
  MSG = 'Do not use semicolons to terminate expressions.'.freeze
10
20
 
@@ -36,6 +46,11 @@ module RuboCop
36
46
  end
37
47
  end
38
48
 
49
+ def autocorrect(range)
50
+ return unless range
51
+ ->(corrector) { corrector.remove(range) }
52
+ end
53
+
39
54
  private
40
55
 
41
56
  def check_for_line_terminator_or_opener
@@ -44,13 +59,13 @@ module RuboCop
44
59
 
45
60
  def each_semicolon
46
61
  tokens_for_lines.each do |line, tokens|
47
- yield line, tokens.last.pos.column if tokens.last.type == :tSEMI
48
- yield line, tokens.first.pos.column if tokens.first.type == :tSEMI
62
+ yield line, tokens.last.column if tokens.last.semicolon?
63
+ yield line, tokens.first.column if tokens.first.semicolon?
49
64
  end
50
65
  end
51
66
 
52
67
  def tokens_for_lines
53
- @processed_source.tokens.group_by { |token| token.pos.line }
68
+ @processed_source.tokens.group_by(&:line)
54
69
  end
55
70
 
56
71
  def convention_on(line, column, autocorrect)
@@ -59,11 +74,6 @@ module RuboCop
59
74
  # on the same line
60
75
  add_offense(autocorrect ? range : nil, location: range)
61
76
  end
62
-
63
- def autocorrect(range)
64
- return unless range
65
- ->(corrector) { corrector.remove(range) }
66
- end
67
77
  end
68
78
  end
69
79
  end
@@ -4,6 +4,15 @@ module RuboCop
4
4
  module Cop
5
5
  module Style
6
6
  # This cop checks for the use of the send method.
7
+ #
8
+ # @example
9
+ # # bad
10
+ # Foo.send(:bar)
11
+ # quuz.send(:fred)
12
+ #
13
+ # # good
14
+ # Foo.__send__(:bar)
15
+ # quuz.public_send(:fred)
7
16
  class Send < Cop
8
17
  MSG = 'Prefer `Object#__send__` or `Object#public_send` to ' \
9
18
  '`send`.'.freeze
@@ -4,6 +4,106 @@ module RuboCop
4
4
  module Cop
5
5
  module Style
6
6
  # This cop checks for uses of `fail` and `raise`.
7
+ #
8
+ # @example EnforcedStyle: only_raise (default)
9
+ # # The `only_raise` style enforces the sole use of `raise`.
10
+ # # bad
11
+ # begin
12
+ # fail
13
+ # rescue Exception
14
+ # # handle it
15
+ # end
16
+ #
17
+ # def watch_out
18
+ # fail
19
+ # rescue Exception
20
+ # # handle it
21
+ # end
22
+ #
23
+ # Kernel.fail
24
+ #
25
+ # # good
26
+ # begin
27
+ # raise
28
+ # rescue Exception
29
+ # # handle it
30
+ # end
31
+ #
32
+ # def watch_out
33
+ # raise
34
+ # rescue Exception
35
+ # # handle it
36
+ # end
37
+ #
38
+ # Kernel.raise
39
+ #
40
+ # @example EnforcedStyle: only_fail
41
+ # # The `only_fail` style enforces the sole use of `fail`.
42
+ # # bad
43
+ # begin
44
+ # raise
45
+ # rescue Exception
46
+ # # handle it
47
+ # end
48
+ #
49
+ # def watch_out
50
+ # raise
51
+ # rescue Exception
52
+ # # handle it
53
+ # end
54
+ #
55
+ # Kernel.raise
56
+ #
57
+ # # good
58
+ # begin
59
+ # fail
60
+ # rescue Exception
61
+ # # handle it
62
+ # end
63
+ #
64
+ # def watch_out
65
+ # fail
66
+ # rescue Exception
67
+ # # handle it
68
+ # end
69
+ #
70
+ # Kernel.fail
71
+ #
72
+ # @example EnforcedStyle: semantic
73
+ # # The `semantic` style enforces the use of `fail` to signal an
74
+ # # exception, then will use `raise` to trigger an offense after
75
+ # # it has been rescued.
76
+ # # bad
77
+ # begin
78
+ # raise
79
+ # rescue Exception
80
+ # # handle it
81
+ # end
82
+ #
83
+ # def watch_out
84
+ # # Error thrown
85
+ # rescue Exception
86
+ # fail
87
+ # end
88
+ #
89
+ # Kernel.fail
90
+ # Kernel.raise
91
+ #
92
+ # # good
93
+ # begin
94
+ # fail
95
+ # rescue Exception
96
+ # # handle it
97
+ # end
98
+ #
99
+ # def watch_out
100
+ # fail
101
+ # rescue Exception
102
+ # raise 'Preferably with descriptive message'
103
+ # end
104
+ #
105
+ # explicit_receiver.fail
106
+ # explicit_receiver.raise
7
107
  class SignalException < Cop
8
108
  include ConfigurableEnforcedStyle
9
109
 
@@ -9,7 +9,7 @@ module RuboCop
9
9
  # For instance one can configure `reduce`(`inject`) to use |a, e| as
10
10
  # parameters.
11
11
  class SingleLineBlockParams < Cop
12
- MSG = 'Name `%s` block params `|%s|`.'.freeze
12
+ MSG = 'Name `%<method>s` block params `|%<params>s|`.'.freeze
13
13
 
14
14
  def on_block(node)
15
15
  return unless node.single_line?
@@ -28,7 +28,7 @@ module RuboCop
28
28
  method_name = node.parent.send_node.method_name
29
29
  arguments = target_args(method_name).join(', ')
30
30
 
31
- format(MSG, method_name, arguments)
31
+ format(MSG, method: method_name, params: arguments)
32
32
  end
33
33
 
34
34
  def eligible_arguments?(node)
@@ -3,8 +3,20 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop checks for single-line method definitions.
7
- # It can optionally accept single-line methods with no body.
6
+ # This cop checks for single-line method definitions that contain a body.
7
+ # It will accept single-line methods with no body.
8
+ #
9
+ # @example
10
+ # # bad
11
+ # def some_method; body end
12
+ # def link_to(url); {:name => url}; end
13
+ # def @table.columns; super; end
14
+ #
15
+ # # good
16
+ # def no_op; end
17
+ # def self.resource_class=(klass); end
18
+ # def @table.columns; end
19
+ #
8
20
  class SingleLineMethods < Cop
9
21
  include AutocorrectAlignment
10
22
 
@@ -18,12 +30,6 @@ module RuboCop
18
30
  end
19
31
  alias on_defs on_def
20
32
 
21
- private
22
-
23
- def allow_empty?
24
- cop_config['AllowIfMethodIsEmpty']
25
- end
26
-
27
33
  def autocorrect(node)
28
34
  body = node.body
29
35
 
@@ -39,6 +45,12 @@ module RuboCop
39
45
  end
40
46
  end
41
47
 
48
+ private
49
+
50
+ def allow_empty?
51
+ cop_config['AllowIfMethodIsEmpty']
52
+ end
53
+
42
54
  def end_of_line_comment(line)
43
55
  processed_source.comments.find { |c| c.loc.line == line }
44
56
  end
@@ -7,11 +7,12 @@ module RuboCop
7
7
  class SpecialGlobalVars < Cop
8
8
  include ConfigurableEnforcedStyle
9
9
 
10
- MSG_BOTH = 'Prefer `%s` from the stdlib \'English\' module ' \
11
- '(don\'t forget to require it), or `%s` over `%s`.'.freeze
12
- MSG_ENGLISH = 'Prefer `%s` from the stdlib \'English\' module ' \
13
- '(don\'t forget to require it) over `%s`.'.freeze
14
- MSG_REGULAR = 'Prefer `%s` over `%s`.'.freeze
10
+ MSG_BOTH = 'Prefer `%<prefer>s` from the stdlib \'English\' ' \
11
+ 'module (don\'t forget to require it), or `%<regular>s` over ' \
12
+ '`%<global>s`.'.freeze
13
+ MSG_ENGLISH = 'Prefer `%<prefer>s` from the stdlib \'English\' ' \
14
+ 'module (don\'t forget to require it) over `%<global>s`.'.freeze
15
+ MSG_REGULAR = 'Prefer `%<prefer>s` over `%<global>s`.'.freeze
15
16
 
16
17
  ENGLISH_VARS = { # rubocop:disable Style/MutableConstant
17
18
  :$: => [:$LOAD_PATH],
@@ -77,7 +78,9 @@ module RuboCop
77
78
  if style == :use_english_names
78
79
  format_english_message(global_var)
79
80
  else
80
- format(MSG_REGULAR, preferred_names(global_var).first, global_var)
81
+ format(MSG_REGULAR,
82
+ prefer: preferred_names(global_var).first,
83
+ global: global_var)
81
84
  end
82
85
  end
83
86
 
@@ -104,14 +107,16 @@ module RuboCop
104
107
  format_message(english, regular, global_var)
105
108
  end
106
109
 
107
- def format_message(english, regular, global_var)
110
+ def format_message(english, regular, global)
108
111
  if !regular.empty? && !english.empty?
109
- format(MSG_BOTH, format_list(english), format_list(regular),
110
- global_var)
112
+ format(MSG_BOTH,
113
+ prefer: format_list(english),
114
+ regular: format_list(regular),
115
+ global: global)
111
116
  elsif !regular.empty?
112
- format(MSG_REGULAR, format_list(regular), global_var)
117
+ format(MSG_REGULAR, prefer: format_list(regular), global: global)
113
118
  elsif !english.empty?
114
- format(MSG_ENGLISH, format_list(english), global_var)
119
+ format(MSG_ENGLISH, prefer: format_list(english), global: global)
115
120
  else
116
121
  raise 'Bug in SpecialGlobalVars - global var w/o preferred vars!'
117
122
  end
@@ -6,17 +6,18 @@ module RuboCop
6
6
  # Check for parentheses around stabby lambda arguments.
7
7
  # There are two different styles. Defaults to `require_parentheses`.
8
8
  #
9
- # @example
10
- # # require_parentheses - bad
9
+ # @example EnforcedStyle: require_parentheses (default)
10
+ # # bad
11
11
  # ->a,b,c { a + b + c }
12
12
  #
13
- # # require_parentheses - good
13
+ # # good
14
14
  # ->(a,b,c) { a + b + c}
15
15
  #
16
- # # require_no_parentheses - bad
16
+ # @example EnforcedStyle: require_no_parentheses
17
+ # # bad
17
18
  # ->(a,b,c) { a + b + c }
18
19
  #
19
- # # require_no_parentheses - good
20
+ # # good
20
21
  # ->a,b,c { a + b + c}
21
22
  class StabbyLambdaParentheses < Cop
22
23
  include ConfigurableEnforcedStyle
@@ -24,8 +25,6 @@ module RuboCop
24
25
  MSG_REQUIRE = 'Wrap stabby lambda arguments with parentheses.'.freeze
25
26
  MSG_NO_REQUIRE = 'Do not wrap stabby lambda arguments ' \
26
27
  'with parentheses.'.freeze
27
- ARROW = '->'.freeze
28
-
29
28
  def on_send(node)
30
29
  return unless stabby_lambda_with_args?(node)
31
30
  return unless redundant_parentheses?(node) ||
@@ -75,11 +74,7 @@ module RuboCop
75
74
  end
76
75
 
77
76
  def stabby_lambda_with_args?(node)
78
- node.command?(:lambda) && arrow_form?(node) && node.parent.arguments?
79
- end
80
-
81
- def arrow_form?(node)
82
- node.loc.selector.source == ARROW
77
+ node.stabby_lambda? && node.parent.arguments?
83
78
  end
84
79
 
85
80
  def parentheses?(node)
@@ -3,8 +3,9 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop identifies places where `$stderr.puts`
7
- # can be replaced by `warn`.
6
+ # This cop identifies places where `$stderr.puts` can be replaced by
7
+ # `warn`. The latter has the advantage of easily being disabled by,
8
+ # e.g. the -W0 interpreter flag, or setting $VERBOSE to nil.
8
9
  #
9
10
  # @example
10
11
  # # bad
@@ -14,7 +15,8 @@ module RuboCop
14
15
  # warn('hello')
15
16
  #
16
17
  class StderrPuts < Cop
17
- MSG = 'Use `warn` instead of `$stderr.puts`.'.freeze
18
+ MSG = 'Use `warn` instead of `$stderr.puts` to allow such output ' \
19
+ 'to be disabled.'.freeze
18
20
 
19
21
  def_node_matcher :stderr_puts?, <<-PATTERN
20
22
  (send
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Style
6
+ # This cop checks for the use of strings as keys in hashes. The use of
7
+ # symbols is preferred instead.
8
+ #
9
+ # @example
10
+ # # bad
11
+ # { 'one' => 1, 'two' => 2, 'three' => 3 }
12
+ #
13
+ # # good
14
+ # { one: 1, two: 2, three: 3 }
15
+ class StringHashKeys < Cop
16
+ MSG = 'Prefer symbols instead of strings as hash keys.'.freeze
17
+
18
+ def_node_matcher :string_hash_key?, <<-PATTERN
19
+ (pair (str _) _)
20
+ PATTERN
21
+
22
+ def on_pair(node)
23
+ return unless string_hash_key?(node)
24
+ add_offense(node.key)
25
+ end
26
+
27
+ def autocorrect(node)
28
+ lambda do |corrector|
29
+ symbol_content = node.str_content.to_sym.inspect
30
+ corrector.replace(node.source_range, symbol_content)
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -4,6 +4,28 @@ module RuboCop
4
4
  module Cop
5
5
  module Style
6
6
  # Checks if uses of quotes match the configured preference.
7
+ #
8
+ # @example EnforcedStyle: single_quotes (default)
9
+ # # bad
10
+ # "No special symbols"
11
+ # "No string interpolation"
12
+ # "Just text"
13
+ #
14
+ # # good
15
+ # 'No special symbols'
16
+ # 'No string interpolation'
17
+ # 'Just text'
18
+ # "Wait! What's #{this}!"
19
+ #
20
+ # @example EnforcedStyle: double_quotes
21
+ # # bad
22
+ # 'Just some text'
23
+ # 'No special chars or interpolation'
24
+ #
25
+ # # good
26
+ # "Just some text"
27
+ # "No special chars or interpolation"
28
+ # "Every string in #{project} uses double_quotes"
7
29
  class StringLiterals < Cop
8
30
  include ConfigurableEnforcedStyle
9
31
  include StringLiteralsHelp
@@ -6,20 +6,14 @@ module RuboCop
6
6
  # This cop checks that quotes inside the string interpolation
7
7
  # match the configured preference.
8
8
  #
9
- # @example
10
- #
11
- # # EnforcedStyle: single_quotes
12
- #
9
+ # @example EnforcedStyle: single_quotes (default)
13
10
  # # bad
14
11
  # result = "Tests #{success ? "PASS" : "FAIL"}"
15
12
  #
16
13
  # # good
17
14
  # result = "Tests #{success ? 'PASS' : 'FAIL'}"
18
15
  #
19
- # @example
20
- #
21
- # # EnforcedStyle: double_quotes
22
- #
16
+ # @example EnforcedStyle: double_quotes
23
17
  # # bad
24
18
  # result = "Tests #{success ? 'PASS' : 'FAIL'}"
25
19
  #