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
@@ -6,34 +6,34 @@ module RuboCop
6
6
  # This cop checks the indentation of the method name part in method calls
7
7
  # that span more than one line.
8
8
  #
9
- # @example
9
+ # @example EnforcedStyle: aligned
10
10
  # # bad
11
11
  # while myvariable
12
12
  # .b
13
13
  # # do something
14
14
  # end
15
15
  #
16
- # # good, EnforcedStyle: aligned
16
+ # # good
17
17
  # while myvariable
18
18
  # .b
19
19
  # # do something
20
20
  # end
21
21
  #
22
- # # good, EnforcedStyle: aligned
22
+ # # good
23
23
  # Thing.a
24
24
  # .b
25
25
  # .c
26
26
  #
27
- # # good, EnforcedStyle: indented,
28
- # IndentationWidth: 2
27
+ # @example EnforcedStyle: indented
28
+ # # good
29
29
  # while myvariable
30
30
  # .b
31
31
  #
32
32
  # # do something
33
33
  # end
34
34
  #
35
- # # good, EnforcedStyle: indented_relative_to_receiver,
36
- # IndentationWidth: 2
35
+ # @example EnforcedStyle: indented_relative_to_receiver
36
+ # # good
37
37
  # while myvariable
38
38
  # .a
39
39
  # .b
@@ -41,8 +41,7 @@ module RuboCop
41
41
  # # do something
42
42
  # end
43
43
  #
44
- # # good, EnforcedStyle: indented_relative_to_receiver,
45
- # IndentationWidth: 2
44
+ # # good
46
45
  # myvariable = Thing
47
46
  # .a
48
47
  # .b
@@ -167,7 +166,7 @@ module RuboCop
167
166
  return unless rhs.source.start_with?('.')
168
167
 
169
168
  node = semantic_alignment_node(node)
170
- return unless node
169
+ return unless node && node.loc.selector
171
170
 
172
171
  node.loc.dot.join(node.loc.selector)
173
172
  end
@@ -34,6 +34,7 @@ module RuboCop
34
34
  # def foo(a,
35
35
  # b
36
36
  # )
37
+ # end
37
38
  #
38
39
  # # symmetrical: bad
39
40
  # # new_line: bad
@@ -41,12 +42,14 @@ module RuboCop
41
42
  # def foo(
42
43
  # a,
43
44
  # b)
45
+ # end
44
46
  #
45
47
  # # symmetrical: good
46
48
  # # new_line: bad
47
49
  # # same_line: good
48
50
  # def foo(a,
49
51
  # b)
52
+ # end
50
53
  #
51
54
  # # symmetrical: good
52
55
  # # new_line: good
@@ -55,6 +58,7 @@ module RuboCop
55
58
  # a,
56
59
  # b
57
60
  # )
61
+ # end
58
62
  class MultilineMethodDefinitionBraceLayout < Cop
59
63
  include MultilineLiteralBraceLayout
60
64
 
@@ -22,7 +22,9 @@ module RuboCop
22
22
  # puts 'error'
23
23
  # end
24
24
  class RescueEnsureAlignment < Cop
25
- MSG = '`%s` at %d, %d is not aligned with `end` at %d, %d.'.freeze
25
+ MSG = '`%<kw_loc>s` at %<kw_loc_line>d, %<kw_loc_column>d is not ' \
26
+ 'aligned with `end` at %<end_loc_line>d, %<end_loc_column>d.'
27
+ .freeze
26
28
 
27
29
  def on_resbody(node)
28
30
  check(node) unless modifier?(node)
@@ -63,8 +65,12 @@ module RuboCop
63
65
  end
64
66
 
65
67
  def format_message(kw_loc, end_loc)
66
- format(MSG, kw_loc.source, kw_loc.line, kw_loc.column, end_loc.line,
67
- end_loc.column)
68
+ format(MSG,
69
+ kw_loc: kw_loc.source,
70
+ kw_loc_line: kw_loc.line,
71
+ kw_loc_column: kw_loc.column,
72
+ end_loc_line: end_loc.line,
73
+ end_loc_column: end_loc.column)
68
74
  end
69
75
 
70
76
  def modifier?(node)
@@ -32,15 +32,15 @@ module RuboCop
32
32
  add_offense(colon, location: colon) unless followed_by_space?(colon)
33
33
  end
34
34
 
35
+ def autocorrect(range)
36
+ ->(corrector) { corrector.insert_after(range, ' ') }
37
+ end
38
+
35
39
  private
36
40
 
37
41
  def followed_by_space?(colon)
38
42
  colon.source_buffer.source[colon.end_pos] =~ /\s/
39
43
  end
40
-
41
- def autocorrect(range)
42
- ->(corrector) { corrector.insert_after(range, ' ') }
43
- end
44
44
  end
45
45
  end
46
46
  end
@@ -8,11 +8,11 @@ module RuboCop
8
8
  # @example
9
9
  #
10
10
  # # bad
11
- # 1,2
11
+ # [1,2]
12
12
  # { foo:bar,}
13
13
  #
14
14
  # # good
15
- # 1, 2
15
+ # [1, 2]
16
16
  # { foo:bar, }
17
17
  class SpaceAfterComma < Cop
18
18
  include SpaceAfterPunctuation
@@ -23,7 +23,7 @@ module RuboCop
23
23
  end
24
24
 
25
25
  def kind(token)
26
- 'comma' if token.type == :tCOMMA
26
+ 'comma' if token.comma?
27
27
  end
28
28
  end
29
29
  end
@@ -8,10 +8,12 @@ module RuboCop
8
8
  # @example
9
9
  #
10
10
  # # bad
11
- # def func (x) ... end
11
+ # def func (x) end
12
+ # def method= (y) end
12
13
  #
13
14
  # # good
14
- # def func(x) ... end
15
+ # def func(x) end
16
+ # def method=(y) end
15
17
  class SpaceAfterMethodName < Cop
16
18
  MSG = 'Do not put a space between a method name and the opening ' \
17
19
  'parenthesis.'.freeze
@@ -28,8 +30,6 @@ module RuboCop
28
30
  end
29
31
  alias on_defs on_def
30
32
 
31
- private
32
-
33
33
  def autocorrect(pos_before_left_paren)
34
34
  ->(corrector) { corrector.remove(pos_before_left_paren) }
35
35
  end
@@ -4,6 +4,13 @@ module RuboCop
4
4
  module Cop
5
5
  module Layout
6
6
  # Checks for semicolon (;) not followed by some kind of space.
7
+ #
8
+ # @example
9
+ # # bad
10
+ # x = 1;y = 2
11
+ #
12
+ # # good
13
+ # x = 1; y = 2
7
14
  class SpaceAfterSemicolon < Cop
8
15
  include SpaceAfterPunctuation
9
16
 
@@ -13,7 +20,7 @@ module RuboCop
13
20
  end
14
21
 
15
22
  def kind(token)
16
- 'semicolon' if token.type == :tSEMI
23
+ 'semicolon' if token.semicolon?
17
24
  end
18
25
  end
19
26
  end
@@ -5,10 +5,7 @@ module RuboCop
5
5
  module Layout
6
6
  # Checks the spacing inside and after block parameters pipes.
7
7
  #
8
- # @example
9
- #
10
- # # EnforcedStyleInsidePipes: no_space (default)
11
- #
8
+ # @example EnforcedStyleInsidePipes: no_space (default)
12
9
  # # bad
13
10
  # {}.each { | x, y |puts x }
14
11
  # ->( x, y ) { puts x }
@@ -17,10 +14,7 @@ module RuboCop
17
14
  # {}.each { |x, y| puts x }
18
15
  # ->(x, y) { puts x }
19
16
  #
20
- # @example
21
- #
22
- # # EnforcedStyleInsidePipes: space
23
- #
17
+ # @example EnforcedStyleInsidePipes: space
24
18
  # # bad
25
19
  # {}.each { |x, y| puts x }
26
20
  # ->(x, y) { puts x }
@@ -50,6 +44,15 @@ module RuboCop
50
44
  check_each_arg(args)
51
45
  end
52
46
 
47
+ def autocorrect(range)
48
+ lambda do |corrector|
49
+ case range.source
50
+ when /^\s+$/ then corrector.remove(range)
51
+ else corrector.insert_after(range, ' ')
52
+ end
53
+ end
54
+ end
55
+
53
56
  private
54
57
 
55
58
  def style_parameter_name
@@ -105,8 +108,11 @@ module RuboCop
105
108
  def check_each_arg(args)
106
109
  args.children.butfirst.each do |arg|
107
110
  expr = arg.source_range
108
- check_no_space(range_with_surrounding_space(expr, :left).begin_pos,
109
- expr.begin_pos - 1, 'Extra space before')
111
+ check_no_space(
112
+ range_with_surrounding_space(range: expr, side: :left).begin_pos,
113
+ expr.begin_pos - 1,
114
+ 'Extra space before'
115
+ )
110
116
  end
111
117
  end
112
118
 
@@ -123,15 +129,6 @@ module RuboCop
123
129
  add_offense(range, location: range,
124
130
  message: "#{msg} block parameter detected.")
125
131
  end
126
-
127
- def autocorrect(range)
128
- lambda do |corrector|
129
- case range.source
130
- when /^\s+$/ then corrector.remove(range)
131
- else corrector.insert_after(range, ' ')
132
- end
133
- end
134
- end
135
132
  end
136
133
  end
137
134
  end
@@ -5,21 +5,40 @@ module RuboCop
5
5
  module Layout
6
6
  # Checks that the equals signs in parameter default assignments
7
7
  # have or don't have surrounding space depending on configuration.
8
+ # @example
9
+ # # bad
10
+ # def some_method(arg1=:default, arg2=nil, arg3=[])
11
+ # # do something...
12
+ # end
13
+ #
14
+ # # good
15
+ # def some_method(arg1 = :default, arg2 = nil, arg3 = [])
16
+ # # do something...
17
+ # end
8
18
  class SpaceAroundEqualsInParameterDefault < Cop
9
19
  include SurroundingSpace
10
20
  include ConfigurableEnforcedStyle
11
21
 
22
+ MSG = 'Surrounding space %<type>s in default value assignment.'.freeze
23
+
12
24
  def on_optarg(node)
13
25
  index = index_of_first_token(node)
14
26
  arg, equals, value = processed_source.tokens[index, 3]
15
27
  check_optarg(arg, equals, value)
16
28
  end
17
29
 
30
+ def autocorrect(range)
31
+ m = range.source.match(/=\s*(\S+)/)
32
+ rest = m ? m.captures[0] : ''
33
+ replacement = style == :space ? ' = ' : '='
34
+ ->(corrector) { corrector.replace(range, replacement + rest) }
35
+ end
36
+
18
37
  private
19
38
 
20
39
  def check_optarg(arg, equals, value)
21
- space_on_both_sides = space_on_both_sides?(arg, equals, value)
22
- no_surrounding_space = no_surrounding_space?(arg, equals, value)
40
+ space_on_both_sides = space_on_both_sides?(arg, equals)
41
+ no_surrounding_space = no_surrounding_space?(arg, equals)
23
42
 
24
43
  if style == :space && space_on_both_sides ||
25
44
  style == :no_space && no_surrounding_space
@@ -32,7 +51,7 @@ module RuboCop
32
51
 
33
52
  def incorrect_style_detected(arg, value, space_on_both_sides,
34
53
  no_surrounding_space)
35
- range = range_between(arg.pos.end_pos, value.pos.begin_pos)
54
+ range = range_between(arg.end_pos, value.begin_pos)
36
55
  add_offense(range, location: range) do
37
56
  if style == :space && no_surrounding_space ||
38
57
  style == :no_space && space_on_both_sides
@@ -43,24 +62,16 @@ module RuboCop
43
62
  end
44
63
  end
45
64
 
46
- def space_on_both_sides?(arg, equals, value)
47
- space_between?(arg, equals) && space_between?(equals, value)
65
+ def space_on_both_sides?(arg, equals)
66
+ arg.space_after? && equals.space_after?
48
67
  end
49
68
 
50
- def no_surrounding_space?(arg, equals, value)
51
- !space_between?(arg, equals) && !space_between?(equals, value)
69
+ def no_surrounding_space?(arg, equals)
70
+ !arg.space_after? && !equals.space_after?
52
71
  end
53
72
 
54
73
  def message(_)
55
- format('Surrounding space %s in default value assignment.',
56
- style == :space ? 'missing' : 'detected')
57
- end
58
-
59
- def autocorrect(range)
60
- m = range.source.match(/=\s*(\S+)/)
61
- rest = m ? m.captures[0] : ''
62
- replacement = style == :space ? ' = ' : '='
63
- ->(corrector) { corrector.replace(range, replacement + rest) }
74
+ format(MSG, type: style == :space ? 'missing' : 'detected')
64
75
  end
65
76
  end
66
77
  end
@@ -25,8 +25,8 @@ module RuboCop
25
25
  #
26
26
  # something = 123 if test
27
27
  class SpaceAroundKeyword < Cop
28
- MSG_BEFORE = 'Space before keyword `%s` is missing.'.freeze
29
- MSG_AFTER = 'Space after keyword `%s` is missing.'.freeze
28
+ MSG_BEFORE = 'Space before keyword `%<range>s` is missing.'.freeze
29
+ MSG_AFTER = 'Space after keyword `%<range>s` is missing.'.freeze
30
30
 
31
31
  DO = 'do'.freeze
32
32
  SAFE_NAVIGATION = '&.'.freeze
@@ -127,6 +127,14 @@ module RuboCop
127
127
  check(node, [:keyword].freeze)
128
128
  end
129
129
 
130
+ def autocorrect(range)
131
+ if space_before_missing?(range)
132
+ ->(corrector) { corrector.insert_before(range, ' '.freeze) }
133
+ else
134
+ ->(corrector) { corrector.insert_after(range, ' '.freeze) }
135
+ end
136
+ end
137
+
130
138
  private
131
139
 
132
140
  def check(node, locations, begin_keyword = DO)
@@ -166,7 +174,9 @@ module RuboCop
166
174
  end
167
175
 
168
176
  def offense(range, msg)
169
- add_offense(range, location: range, message: msg % range.source)
177
+ add_offense(range,
178
+ location: range,
179
+ message: format(msg, range: range.source))
170
180
  end
171
181
 
172
182
  def space_before_missing?(range)
@@ -214,14 +224,6 @@ module RuboCop
214
224
  end
215
225
  false
216
226
  end
217
-
218
- def autocorrect(range)
219
- if space_before_missing?(range)
220
- ->(corrector) { corrector.insert_before(range, ' '.freeze) }
221
- else
222
- ->(corrector) { corrector.insert_after(range, ' '.freeze) }
223
- end
224
- end
225
227
  end
226
228
  end
227
229
  end
@@ -5,6 +5,19 @@ module RuboCop
5
5
  module Layout
6
6
  # Checks that operators have space around them, except for **
7
7
  # which should not have surrounding space.
8
+ #
9
+ # @example
10
+ # # bad
11
+ # total = 3*4
12
+ # "apple"+"juice"
13
+ # my_number = 38/4
14
+ # a ** b
15
+ #
16
+ # # good
17
+ # total = 3 * 4
18
+ # "apple" + "juice"
19
+ # my_number = 38 / 4
20
+ # a**b
8
21
  class SpaceAroundOperators < Cop
9
22
  include PrecedingFollowingAlignment
10
23
 
@@ -73,6 +86,18 @@ module RuboCop
73
86
  alias on_and_asgn on_binary
74
87
  alias on_op_asgn on_special_asgn
75
88
 
89
+ def autocorrect(range)
90
+ lambda do |corrector|
91
+ if range.source =~ /\*\*/
92
+ corrector.replace(range, '**')
93
+ elsif range.source.end_with?("\n")
94
+ corrector.replace(range, " #{range.source.strip}\n")
95
+ else
96
+ corrector.replace(range, " #{range.source.strip} ")
97
+ end
98
+ end
99
+ end
100
+
76
101
  private
77
102
 
78
103
  def regular_operator?(send_node)
@@ -86,7 +111,7 @@ module RuboCop
86
111
  end
87
112
 
88
113
  def check_operator(op, right_operand)
89
- with_space = range_with_surrounding_space(op)
114
+ with_space = range_with_surrounding_space(range: op)
90
115
  return if with_space.source.start_with?("\n")
91
116
 
92
117
  offense(op, with_space, right_operand) do |msg|
@@ -120,18 +145,6 @@ module RuboCop
120
145
  (!allow_for_alignment? || !aligned_with_something?(right_operand))
121
146
  end
122
147
 
123
- def autocorrect(range)
124
- lambda do |corrector|
125
- if range.source =~ /\*\*/
126
- corrector.replace(range, '**')
127
- elsif range.source.end_with?("\n")
128
- corrector.replace(range, " #{range.source.strip}\n")
129
- else
130
- corrector.replace(range, " #{range.source.strip} ")
131
- end
132
- end
133
- end
134
-
135
148
  def align_hash_cop_config
136
149
  config.for_cop('Layout/AlignHash')
137
150
  end