rubocop 0.50.0 → 0.51.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 (318) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -6
  3. data/config/default.yml +20 -11
  4. data/config/enabled.yml +44 -7
  5. data/lib/rubocop.rb +526 -514
  6. data/lib/rubocop/ast/node.rb +9 -9
  7. data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +2 -2
  8. data/lib/rubocop/ast/node/send_node.rb +4 -0
  9. data/lib/rubocop/cached_data.rb +1 -6
  10. data/lib/rubocop/cli.rb +7 -6
  11. data/lib/rubocop/config.rb +58 -22
  12. data/lib/rubocop/config_loader.rb +37 -21
  13. data/lib/rubocop/config_loader_resolver.rb +3 -2
  14. data/lib/rubocop/cop/bundler/duplicated_gem.rb +5 -3
  15. data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +4 -2
  16. data/lib/rubocop/cop/bundler/ordered_gems.rb +2 -53
  17. data/lib/rubocop/cop/commissioner.rb +1 -4
  18. data/lib/rubocop/cop/cop.rb +50 -17
  19. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +96 -0
  20. data/lib/rubocop/cop/generator.rb +8 -3
  21. data/lib/rubocop/cop/internal_affairs.rb +6 -5
  22. data/lib/rubocop/cop/internal_affairs/deprecated_positional_arguments.rb +81 -0
  23. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +1 -1
  24. data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +21 -11
  25. data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +27 -14
  26. data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +38 -16
  27. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +2 -2
  28. data/lib/rubocop/cop/layout/block_end_newline.rb +1 -1
  29. data/lib/rubocop/cop/layout/case_indentation.rb +1 -1
  30. data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +1 -1
  31. data/lib/rubocop/cop/layout/comment_indentation.rb +4 -2
  32. data/lib/rubocop/cop/layout/dot_position.rb +1 -1
  33. data/lib/rubocop/cop/layout/else_alignment.rb +5 -2
  34. data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +1 -1
  35. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +1 -1
  36. data/lib/rubocop/cop/layout/empty_lines.rb +1 -1
  37. data/lib/rubocop/cop/layout/end_of_line.rb +1 -1
  38. data/lib/rubocop/cop/layout/extra_spacing.rb +2 -2
  39. data/lib/rubocop/cop/layout/indent_array.rb +1 -1
  40. data/lib/rubocop/cop/layout/indent_hash.rb +1 -1
  41. data/lib/rubocop/cop/layout/indent_heredoc.rb +2 -2
  42. data/lib/rubocop/cop/layout/indentation_width.rb +7 -5
  43. data/lib/rubocop/cop/layout/initial_indentation.rb +3 -2
  44. data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +2 -2
  45. data/lib/rubocop/cop/layout/multiline_block_layout.rb +1 -1
  46. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +3 -1
  47. data/lib/rubocop/cop/layout/space_after_colon.rb +2 -2
  48. data/lib/rubocop/cop/layout/space_after_method_name.rb +1 -1
  49. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +3 -2
  50. data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +1 -1
  51. data/lib/rubocop/cop/layout/space_around_keyword.rb +1 -1
  52. data/lib/rubocop/cop/layout/space_around_operators.rb +1 -1
  53. data/lib/rubocop/cop/layout/space_before_block_braces.rb +4 -4
  54. data/lib/rubocop/cop/layout/space_before_comment.rb +1 -1
  55. data/lib/rubocop/cop/layout/space_before_first_arg.rb +1 -1
  56. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +6 -2
  57. data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +1 -1
  58. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +2 -2
  59. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +5 -2
  60. data/lib/rubocop/cop/layout/space_inside_parens.rb +9 -0
  61. data/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb +1 -1
  62. data/lib/rubocop/cop/layout/tab.rb +5 -2
  63. data/lib/rubocop/cop/layout/trailing_blank_lines.rb +4 -2
  64. data/lib/rubocop/cop/layout/trailing_whitespace.rb +1 -1
  65. data/lib/rubocop/cop/lint/assignment_in_condition.rb +1 -1
  66. data/lib/rubocop/cop/lint/block_alignment.rb +1 -1
  67. data/lib/rubocop/cop/lint/boolean_symbol.rb +1 -1
  68. data/lib/rubocop/cop/lint/circular_argument_reference.rb +3 -14
  69. data/lib/rubocop/cop/lint/debugger.rb +7 -7
  70. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +4 -4
  71. data/lib/rubocop/cop/lint/duplicate_methods.rb +5 -3
  72. data/lib/rubocop/cop/lint/empty_ensure.rb +1 -1
  73. data/lib/rubocop/cop/lint/empty_expression.rb +1 -1
  74. data/lib/rubocop/cop/lint/empty_when.rb +1 -1
  75. data/lib/rubocop/cop/lint/end_in_method.rb +1 -1
  76. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +1 -1
  77. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -1
  78. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +4 -3
  79. data/lib/rubocop/cop/lint/interpolation_check.rb +2 -1
  80. data/lib/rubocop/cop/lint/{literal_in_condition.rb → literal_as_condition.rb} +19 -5
  81. data/lib/rubocop/cop/lint/loop.rb +1 -1
  82. data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -1
  83. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +2 -2
  84. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +3 -2
  85. data/lib/rubocop/cop/lint/percent_string_array.rb +1 -1
  86. data/lib/rubocop/cop/lint/rand_one.rb +1 -1
  87. data/lib/rubocop/cop/lint/redundant_with_index.rb +1 -1
  88. data/lib/rubocop/cop/lint/redundant_with_object.rb +81 -0
  89. data/lib/rubocop/cop/lint/regexp_as_condition.rb +29 -0
  90. data/lib/rubocop/cop/lint/require_parentheses.rb +1 -1
  91. data/lib/rubocop/cop/lint/rescue_type.rb +5 -3
  92. data/lib/rubocop/cop/lint/rescue_without_error_class.rb +6 -3
  93. data/lib/rubocop/cop/lint/return_in_void_context.rb +24 -13
  94. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +1 -1
  95. data/lib/rubocop/cop/lint/script_permission.rb +1 -1
  96. data/lib/rubocop/cop/lint/shadowed_exception.rb +37 -10
  97. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +1 -1
  98. data/lib/rubocop/cop/lint/string_conversion_in_interpolation.rb +1 -1
  99. data/lib/rubocop/cop/lint/syntax.rb +8 -2
  100. data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +1 -1
  101. data/lib/rubocop/cop/lint/unified_integer.rb +2 -2
  102. data/lib/rubocop/cop/lint/unneeded_disable.rb +11 -4
  103. data/lib/rubocop/cop/lint/unneeded_require_statement.rb +50 -0
  104. data/lib/rubocop/cop/lint/unneeded_splat_expansion.rb +2 -2
  105. data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
  106. data/lib/rubocop/cop/lint/unused_method_argument.rb +2 -1
  107. data/lib/rubocop/cop/lint/uri_escape_unescape.rb +2 -2
  108. data/lib/rubocop/cop/lint/uri_regexp.rb +3 -3
  109. data/lib/rubocop/cop/lint/useless_access_modifier.rb +9 -9
  110. data/lib/rubocop/cop/lint/useless_assignment.rb +1 -1
  111. data/lib/rubocop/cop/lint/useless_comparison.rb +1 -1
  112. data/lib/rubocop/cop/lint/useless_setter_call.rb +5 -1
  113. data/lib/rubocop/cop/lint/void.rb +10 -5
  114. data/lib/rubocop/cop/metrics/block_nesting.rb +1 -1
  115. data/lib/rubocop/cop/metrics/line_length.rb +4 -1
  116. data/lib/rubocop/cop/metrics/parameter_lists.rb +1 -2
  117. data/lib/rubocop/cop/mixin/array_hash_indentation.rb +3 -2
  118. data/lib/rubocop/cop/mixin/autocorrect_alignment.rb +1 -1
  119. data/lib/rubocop/cop/mixin/code_length.rb +1 -1
  120. data/lib/rubocop/cop/mixin/configurable_formatting.rb +1 -1
  121. data/lib/rubocop/cop/mixin/def_node.rb +1 -1
  122. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +7 -2
  123. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -1
  124. data/lib/rubocop/cop/mixin/enforce_superclass.rb +1 -1
  125. data/lib/rubocop/cop/mixin/heredoc.rb +1 -1
  126. data/lib/rubocop/cop/mixin/method_complexity.rb +3 -4
  127. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +1 -1
  128. data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +10 -4
  129. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +63 -0
  130. data/lib/rubocop/cop/mixin/parser_diagnostic.rb +4 -1
  131. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +2 -1
  132. data/lib/rubocop/cop/mixin/space_before_punctuation.rb +2 -1
  133. data/lib/rubocop/cop/mixin/space_inside.rb +1 -1
  134. data/lib/rubocop/cop/mixin/string_literals_help.rb +1 -1
  135. data/lib/rubocop/cop/mixin/trailing_comma.rb +5 -5
  136. data/lib/rubocop/cop/mixin/unused_argument.rb +43 -2
  137. data/lib/rubocop/cop/naming/accessor_method_name.rb +8 -7
  138. data/lib/rubocop/cop/naming/ascii_identifiers.rb +1 -1
  139. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -1
  140. data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +1 -1
  141. data/lib/rubocop/cop/naming/constant_name.rb +1 -1
  142. data/lib/rubocop/cop/naming/file_name.rb +1 -1
  143. data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +1 -1
  144. data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +3 -2
  145. data/lib/rubocop/cop/naming/predicate_name.rb +36 -5
  146. data/lib/rubocop/cop/performance/caller.rb +2 -2
  147. data/lib/rubocop/cop/performance/case_when_splat.rb +1 -1
  148. data/lib/rubocop/cop/performance/casecmp.rb +1 -1
  149. data/lib/rubocop/cop/performance/compare_with_block.rb +6 -2
  150. data/lib/rubocop/cop/performance/count.rb +3 -1
  151. data/lib/rubocop/cop/performance/detect.rb +4 -4
  152. data/lib/rubocop/cop/performance/double_start_end_with.rb +6 -9
  153. data/lib/rubocop/cop/performance/end_with.rb +1 -1
  154. data/lib/rubocop/cop/performance/flat_map.rb +3 -1
  155. data/lib/rubocop/cop/performance/hash_each_methods.rb +13 -10
  156. data/lib/rubocop/cop/performance/lstrip_rstrip.rb +3 -1
  157. data/lib/rubocop/cop/performance/range_include.rb +1 -1
  158. data/lib/rubocop/cop/performance/redundant_block_call.rb +1 -1
  159. data/lib/rubocop/cop/performance/redundant_match.rb +6 -5
  160. data/lib/rubocop/cop/performance/redundant_merge.rb +1 -1
  161. data/lib/rubocop/cop/performance/redundant_sort_by.rb +4 -1
  162. data/lib/rubocop/cop/performance/regexp_match.rb +4 -4
  163. data/lib/rubocop/cop/performance/reverse_each.rb +1 -1
  164. data/lib/rubocop/cop/performance/sample.rb +1 -1
  165. data/lib/rubocop/cop/performance/size.rb +1 -1
  166. data/lib/rubocop/cop/performance/start_with.rb +1 -1
  167. data/lib/rubocop/cop/performance/string_replacement.rb +2 -2
  168. data/lib/rubocop/cop/performance/times_map.rb +3 -3
  169. data/lib/rubocop/cop/performance/unfreeze_string.rb +2 -2
  170. data/lib/rubocop/cop/performance/uri_default_parser.rb +2 -2
  171. data/lib/rubocop/cop/rails/action_filter.rb +1 -1
  172. data/lib/rubocop/cop/rails/active_support_aliases.rb +1 -2
  173. data/lib/rubocop/cop/rails/application_job.rb +1 -1
  174. data/lib/rubocop/cop/rails/application_record.rb +1 -1
  175. data/lib/rubocop/cop/rails/blank.rb +20 -17
  176. data/lib/rubocop/cop/rails/date.rb +7 -6
  177. data/lib/rubocop/cop/rails/delegate.rb +1 -1
  178. data/lib/rubocop/cop/rails/delegate_allow_blank.rb +1 -1
  179. data/lib/rubocop/cop/rails/dynamic_find_by.rb +2 -2
  180. data/lib/rubocop/cop/rails/enum_uniqueness.rb +2 -2
  181. data/lib/rubocop/cop/rails/exit.rb +1 -1
  182. data/lib/rubocop/cop/rails/file_path.rb +6 -8
  183. data/lib/rubocop/cop/rails/find_by.rb +2 -1
  184. data/lib/rubocop/cop/rails/find_each.rb +1 -1
  185. data/lib/rubocop/cop/rails/has_and_belongs_to_many.rb +1 -1
  186. data/lib/rubocop/cop/rails/has_many_or_has_one_dependent.rb +35 -11
  187. data/lib/rubocop/cop/rails/http_positional_arguments.rb +3 -2
  188. data/lib/rubocop/cop/rails/not_null_column.rb +5 -5
  189. data/lib/rubocop/cop/rails/output.rb +2 -2
  190. data/lib/rubocop/cop/rails/output_safety.rb +2 -1
  191. data/lib/rubocop/cop/rails/present.rb +14 -17
  192. data/lib/rubocop/cop/rails/read_write_attribute.rb +3 -3
  193. data/lib/rubocop/cop/rails/relative_date_constant.rb +1 -1
  194. data/lib/rubocop/cop/rails/request_referer.rb +2 -2
  195. data/lib/rubocop/cop/rails/reversible_migration.rb +21 -19
  196. data/lib/rubocop/cop/rails/safe_navigation.rb +2 -2
  197. data/lib/rubocop/cop/rails/save_bang.rb +12 -12
  198. data/lib/rubocop/cop/rails/scope_args.rb +1 -1
  199. data/lib/rubocop/cop/rails/skips_model_validations.rb +2 -2
  200. data/lib/rubocop/cop/rails/time_zone.rb +3 -2
  201. data/lib/rubocop/cop/rails/uniq_before_pluck.rb +3 -1
  202. data/lib/rubocop/cop/rails/unknown_env.rb +63 -0
  203. data/lib/rubocop/cop/rails/validation.rb +1 -1
  204. data/lib/rubocop/cop/registry.rb +2 -1
  205. data/lib/rubocop/cop/security/eval.rb +2 -2
  206. data/lib/rubocop/cop/security/json_load.rb +2 -2
  207. data/lib/rubocop/cop/security/marshal_load.rb +3 -3
  208. data/lib/rubocop/cop/security/yaml_load.rb +2 -2
  209. data/lib/rubocop/cop/style/alias.rb +3 -3
  210. data/lib/rubocop/cop/style/and_or.rb +1 -1
  211. data/lib/rubocop/cop/style/array_join.rb +1 -1
  212. data/lib/rubocop/cop/style/ascii_comments.rb +1 -1
  213. data/lib/rubocop/cop/style/attr.rb +1 -1
  214. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +2 -2
  215. data/lib/rubocop/cop/style/bare_percent_literals.rb +1 -1
  216. data/lib/rubocop/cop/style/begin_block.rb +1 -1
  217. data/lib/rubocop/cop/style/block_delimiters.rb +1 -1
  218. data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +22 -19
  219. data/lib/rubocop/cop/style/case_equality.rb +1 -1
  220. data/lib/rubocop/cop/style/class_and_module_children.rb +2 -2
  221. data/lib/rubocop/cop/style/class_check.rb +1 -1
  222. data/lib/rubocop/cop/style/class_methods.rb +2 -1
  223. data/lib/rubocop/cop/style/class_vars.rb +1 -1
  224. data/lib/rubocop/cop/style/collection_methods.rb +1 -1
  225. data/lib/rubocop/cop/style/colon_method_call.rb +2 -2
  226. data/lib/rubocop/cop/style/comment_annotation.rb +5 -2
  227. data/lib/rubocop/cop/style/commented_keyword.rb +81 -0
  228. data/lib/rubocop/cop/style/conditional_assignment.rb +1 -1
  229. data/lib/rubocop/cop/style/copyright.rb +1 -1
  230. data/lib/rubocop/cop/style/date_time.rb +44 -0
  231. data/lib/rubocop/cop/style/def_with_parentheses.rb +1 -1
  232. data/lib/rubocop/cop/style/dir.rb +2 -6
  233. data/lib/rubocop/cop/style/documentation.rb +1 -1
  234. data/lib/rubocop/cop/style/double_negation.rb +1 -1
  235. data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -1
  236. data/lib/rubocop/cop/style/each_with_object.rb +2 -1
  237. data/lib/rubocop/cop/style/empty_case_condition.rb +1 -1
  238. data/lib/rubocop/cop/style/empty_else.rb +2 -2
  239. data/lib/rubocop/cop/style/empty_literal.rb +9 -9
  240. data/lib/rubocop/cop/style/encoding.rb +7 -51
  241. data/lib/rubocop/cop/style/end_block.rb +1 -1
  242. data/lib/rubocop/cop/style/even_odd.rb +1 -1
  243. data/lib/rubocop/cop/style/for.rb +6 -2
  244. data/lib/rubocop/cop/style/format_string.rb +4 -3
  245. data/lib/rubocop/cop/style/format_string_token.rb +2 -1
  246. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -3
  247. data/lib/rubocop/cop/style/global_vars.rb +1 -1
  248. data/lib/rubocop/cop/style/guard_clause.rb +2 -2
  249. data/lib/rubocop/cop/style/hash_syntax.rb +2 -3
  250. data/lib/rubocop/cop/style/if_inside_else.rb +1 -1
  251. data/lib/rubocop/cop/style/if_unless_modifier.rb +2 -1
  252. data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +2 -1
  253. data/lib/rubocop/cop/style/implicit_runtime_error.rb +2 -2
  254. data/lib/rubocop/cop/style/infinite_loop.rb +2 -2
  255. data/lib/rubocop/cop/style/inverse_methods.rb +4 -6
  256. data/lib/rubocop/cop/style/lambda.rb +3 -3
  257. data/lib/rubocop/cop/style/line_end_concatenation.rb +1 -1
  258. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -1
  259. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +1 -1
  260. data/lib/rubocop/cop/style/method_def_parentheses.rb +4 -2
  261. data/lib/rubocop/cop/style/min_max.rb +2 -1
  262. data/lib/rubocop/cop/style/mixin_usage.rb +73 -0
  263. data/lib/rubocop/cop/style/module_function.rb +2 -2
  264. data/lib/rubocop/cop/style/multiline_block_chain.rb +1 -1
  265. data/lib/rubocop/cop/style/multiline_if_then.rb +2 -1
  266. data/lib/rubocop/cop/style/multiline_memoization.rb +1 -1
  267. data/lib/rubocop/cop/style/nested_modifier.rb +1 -1
  268. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +3 -1
  269. data/lib/rubocop/cop/style/next.rb +2 -1
  270. data/lib/rubocop/cop/style/nil_comparison.rb +2 -2
  271. data/lib/rubocop/cop/style/non_nil_check.rb +2 -2
  272. data/lib/rubocop/cop/style/not.rb +1 -1
  273. data/lib/rubocop/cop/style/numeric_predicate.rb +2 -2
  274. data/lib/rubocop/cop/style/option_hash.rb +0 -11
  275. data/lib/rubocop/cop/style/or_assignment.rb +1 -1
  276. data/lib/rubocop/cop/style/parallel_assignment.rb +1 -1
  277. data/lib/rubocop/cop/style/percent_q_literals.rb +1 -1
  278. data/lib/rubocop/cop/style/preferred_hash_methods.rb +1 -1
  279. data/lib/rubocop/cop/style/proc.rb +1 -1
  280. data/lib/rubocop/cop/style/redundant_begin.rb +1 -1
  281. data/lib/rubocop/cop/style/redundant_exception.rb +4 -4
  282. data/lib/rubocop/cop/style/redundant_parentheses.rb +1 -1
  283. data/lib/rubocop/cop/style/redundant_return.rb +1 -1
  284. data/lib/rubocop/cop/style/regexp_literal.rb +2 -2
  285. data/lib/rubocop/cop/style/return_nil.rb +2 -7
  286. data/lib/rubocop/cop/style/safe_navigation.rb +27 -30
  287. data/lib/rubocop/cop/style/self_assignment.rb +2 -2
  288. data/lib/rubocop/cop/style/semicolon.rb +1 -1
  289. data/lib/rubocop/cop/style/send.rb +1 -1
  290. data/lib/rubocop/cop/style/signal_exception.rb +4 -3
  291. data/lib/rubocop/cop/style/stderr_puts.rb +52 -0
  292. data/lib/rubocop/cop/style/string_literals.rb +4 -3
  293. data/lib/rubocop/cop/style/string_methods.rb +1 -1
  294. data/lib/rubocop/cop/style/struct_inheritance.rb +3 -3
  295. data/lib/rubocop/cop/style/symbol_array.rb +1 -5
  296. data/lib/rubocop/cop/style/symbol_proc.rb +5 -5
  297. data/lib/rubocop/cop/style/ternary_parentheses.rb +2 -2
  298. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +46 -23
  299. data/lib/rubocop/cop/style/trivial_accessors.rb +3 -1
  300. data/lib/rubocop/cop/style/variable_interpolation.rb +0 -2
  301. data/lib/rubocop/cop/style/when_then.rb +1 -1
  302. data/lib/rubocop/cop/style/while_until_do.rb +2 -1
  303. data/lib/rubocop/cop/style/while_until_modifier.rb +2 -1
  304. data/lib/rubocop/cop/style/word_array.rb +2 -2
  305. data/lib/rubocop/cop/style/zero_length_predicate.rb +4 -4
  306. data/lib/rubocop/cop/util.rb +1 -12
  307. data/lib/rubocop/formatter/html_formatter.rb +1 -1
  308. data/lib/rubocop/formatter/simple_text_formatter.rb +2 -2
  309. data/lib/rubocop/node_pattern.rb +1 -1
  310. data/lib/rubocop/options.rb +4 -0
  311. data/lib/rubocop/processed_source.rb +2 -8
  312. data/lib/rubocop/rake_task.rb +16 -23
  313. data/lib/rubocop/remote_config.rb +8 -0
  314. data/lib/rubocop/rspec/shared_contexts.rb +0 -8
  315. data/lib/rubocop/rspec/support.rb +5 -5
  316. data/lib/rubocop/version.rb +1 -1
  317. metadata +40 -30
  318. data/lib/rubocop/cop/lint/invalid_character_literal.rb +0 -41
@@ -166,7 +166,7 @@ module RuboCop
166
166
  end
167
167
 
168
168
  def offense(range, msg)
169
- add_offense(range, range, msg % range.source)
169
+ add_offense(range, location: range, message: msg % range.source)
170
170
  end
171
171
 
172
172
  def space_before_missing?(range)
@@ -90,7 +90,7 @@ module RuboCop
90
90
  return if with_space.source.start_with?("\n")
91
91
 
92
92
  offense(op, with_space, right_operand) do |msg|
93
- add_offense(with_space, op, msg)
93
+ add_offense(with_space, location: op, message: msg)
94
94
  end
95
95
  end
96
96
 
@@ -50,11 +50,11 @@ module RuboCop
50
50
  used_style.to_s
51
51
 
52
52
  if style_for_empty_braces == :space
53
- add_offense(left_brace, left_brace, MISSING_MSG)
53
+ add_offense(left_brace, location: left_brace, message: MISSING_MSG)
54
54
  else
55
55
  space = range_between(space_plus_brace.begin_pos,
56
56
  left_brace.begin_pos)
57
- add_offense(space, space, DETECTED_MSG)
57
+ add_offense(space, location: space, message: DETECTED_MSG)
58
58
  end
59
59
  end
60
60
 
@@ -67,7 +67,7 @@ module RuboCop
67
67
  end
68
68
 
69
69
  def space_missing(left_brace)
70
- add_offense(left_brace, left_brace, MISSING_MSG) do
70
+ add_offense(left_brace, location: left_brace, message: MISSING_MSG) do
71
71
  opposite_style_detected
72
72
  end
73
73
  end
@@ -75,7 +75,7 @@ module RuboCop
75
75
  def space_detected(left_brace, space_plus_brace)
76
76
  space = range_between(space_plus_brace.begin_pos,
77
77
  left_brace.begin_pos)
78
- add_offense(space, space, DETECTED_MSG) do
78
+ add_offense(space, location: space, message: DETECTED_MSG) do
79
79
  opposite_style_detected
80
80
  end
81
81
  end
@@ -19,7 +19,7 @@ module RuboCop
19
19
  processed_source.tokens.each_cons(2) do |t1, t2|
20
20
  next unless t2.type == :tCOMMENT
21
21
  next unless t1.pos.line == t2.pos.line
22
- add_offense(t2.pos, t2.pos) if t1.pos.end == t2.pos.begin
22
+ add_offense(t2.pos, location: t2.pos) if t1.pos.end == t2.pos.begin
23
23
  end
24
24
  end
25
25
 
@@ -36,7 +36,7 @@ module RuboCop
36
36
  space = range_between(first_arg_with_space.begin_pos,
37
37
  first_arg.begin_pos)
38
38
 
39
- add_offense(space, space) if space.length != 1
39
+ add_offense(space, location: space) if space.length != 1
40
40
  end
41
41
 
42
42
  def autocorrect(range)
@@ -37,9 +37,13 @@ module RuboCop
37
37
  def on_send(node)
38
38
  return unless arrow_lambda_with_args?(node)
39
39
  if style == :require_space && !space_after_arrow?(node)
40
- add_offense(node, node.parent.loc.expression, MSG_REQUIRE_SPACE)
40
+ add_offense(node,
41
+ location: node.parent.loc.expression,
42
+ message: MSG_REQUIRE_SPACE)
41
43
  elsif style == :require_no_space && space_after_arrow?(node)
42
- add_offense(node, node.parent.loc.expression, MSG_REQUIRE_NO_SPACE)
44
+ add_offense(node,
45
+ location: node.parent.loc.expression,
46
+ message: MSG_REQUIRE_NO_SPACE)
43
47
  end
44
48
  end
45
49
 
@@ -26,7 +26,7 @@ module RuboCop
26
26
 
27
27
  def on_percent_literal(node)
28
28
  each_unnecessary_space_match(node) do |range|
29
- add_offense(node, range)
29
+ add_offense(node, location: range)
30
30
  end
31
31
  end
32
32
 
@@ -128,9 +128,9 @@ module RuboCop
128
128
  end
129
129
  end
130
130
 
131
- def offense(begin_pos, end_pos, msg)
131
+ def offense(begin_pos, end_pos, msg, &block)
132
132
  range = range_between(begin_pos, end_pos)
133
- add_offense(range, range, msg) { yield if block_given? }
133
+ add_offense(range, location: range, message: msg, &block)
134
134
  end
135
135
 
136
136
  def style_for_empty_braces
@@ -74,8 +74,11 @@ module RuboCop
74
74
  def incorrect_style_detected(t1, t2, expect_space, is_empty_braces)
75
75
  brace = (t1.text == '{' ? t1 : t2).pos
76
76
  range = expect_space ? brace : space_range(brace)
77
- add_offense(range, range,
78
- message(brace, is_empty_braces, expect_space)) do
77
+ add_offense(
78
+ range,
79
+ location: range,
80
+ message: message(brace, is_empty_braces, expect_space)
81
+ ) do
79
82
  style = expect_space ? :no_space : :space
80
83
  ambiguous_or_unexpected_style_detected(style, t1.text == t2.text)
81
84
  end
@@ -4,6 +4,15 @@ module RuboCop
4
4
  module Cop
5
5
  module Layout
6
6
  # Checks for spaces inside ordinary round parentheses.
7
+ #
8
+ # @example
9
+ # # bad
10
+ # f( 3)
11
+ # g = (a + 3 )
12
+ #
13
+ # # good
14
+ # f(3)
15
+ # g = (a + 3)
7
16
  class SpaceInsideParens < Cop
8
17
  include SpaceInside
9
18
 
@@ -50,7 +50,7 @@ module RuboCop
50
50
  return unless node.single_line?
51
51
 
52
52
  regex_matches(node) do |match_range|
53
- add_offense(node, match_range)
53
+ add_offense(node, location: match_range)
54
54
  end
55
55
  end
56
56
 
@@ -7,6 +7,8 @@ module RuboCop
7
7
  module Layout
8
8
  # This cop checks for tabs inside the source code.
9
9
  class Tab < Cop
10
+ include AutocorrectAlignment
11
+
10
12
  MSG = 'Tab detected.'.freeze
11
13
 
12
14
  def investigate(processed_source)
@@ -22,7 +24,7 @@ module RuboCop
22
24
  index + 1,
23
25
  (spaces.length)...(match.end(0)))
24
26
 
25
- add_offense(range, range)
27
+ add_offense(range, location: range)
26
28
  end
27
29
  end
28
30
 
@@ -30,7 +32,8 @@ module RuboCop
30
32
 
31
33
  def autocorrect(range)
32
34
  lambda do |corrector|
33
- corrector.replace(range, range.source.gsub(/\t/, ' '))
35
+ spaces = ' ' * configured_indentation_width
36
+ corrector.replace(range, range.source.gsub(/\t/, spaces))
34
37
  end
35
38
  end
36
39
 
@@ -36,8 +36,10 @@ module RuboCop
36
36
  autocorrect_range = range_between(begin_pos, sb.source.length)
37
37
  begin_pos += 1 unless whitespace_at_end.empty?
38
38
  report_range = range_between(begin_pos, sb.source.length)
39
- add_offense(autocorrect_range, report_range,
40
- message(wanted_blank_lines, blank_lines))
39
+
40
+ add_offense(autocorrect_range,
41
+ location: report_range,
42
+ message: message(wanted_blank_lines, blank_lines))
41
43
  end
42
44
 
43
45
  def ends_in_end?(processed_source)
@@ -15,7 +15,7 @@ module RuboCop
15
15
  index + 1,
16
16
  (line.rstrip.length)...(line.length))
17
17
 
18
- add_offense(range, range)
18
+ add_offense(range, location: range)
19
19
  end
20
20
  end
21
21
 
@@ -62,7 +62,7 @@ module RuboCop
62
62
  next :skip_children if skip_children?(asgn_node)
63
63
  next if allowed_construct?(asgn_node)
64
64
 
65
- add_offense(asgn_node, :operator)
65
+ add_offense(asgn_node, location: :operator)
66
66
  end
67
67
  end
68
68
 
@@ -146,7 +146,7 @@ module RuboCop
146
146
  message = format_message(start_loc, end_loc, do_source_line_column,
147
147
  error_source_line_column)
148
148
 
149
- add_offense(block_node, end_loc, message)
149
+ add_offense(block_node, location: end_loc, message: message)
150
150
  end
151
151
 
152
152
  def format_message(start_loc, end_loc, do_source_line_column,
@@ -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, :expression, format(MSG, node.source[1..-1]))
33
+ add_offense(node, message: format(MSG, node.to_a.first))
34
34
  end
35
35
  end
36
36
  end
@@ -61,21 +61,10 @@ module RuboCop
61
61
  private
62
62
 
63
63
  def check_for_circular_argument_references(arg_name, arg_value)
64
- case arg_value.type
65
- when :send
66
- # Ruby 2.0 will have type send every time, and "send nil" if it is
67
- # calling itself with a specified "self" receiver
68
- receiver, name = *arg_value
69
- return unless name == arg_name && receiver.nil?
70
- when :lvar
71
- # Ruby 2.2.2 will have type lvar if it is calling its own method
72
- # without a specified "self"
73
- return unless arg_value.to_a == [arg_name]
74
- else
75
- return
76
- end
64
+ return unless arg_value.lvar_type?
65
+ return unless arg_value.to_a == [arg_name]
77
66
 
78
- add_offense(arg_value, :expression, format(MSG, arg_name))
67
+ add_offense(arg_value, message: format(MSG, arg_name))
79
68
  end
80
69
  end
81
70
  end
@@ -37,26 +37,26 @@ module RuboCop
37
37
 
38
38
  def_node_matcher :kernel?, <<-PATTERN
39
39
  {
40
- (const nil :Kernel)
40
+ (const nil? :Kernel)
41
41
  (const (cbase) :Kernel)
42
42
  }
43
43
  PATTERN
44
44
 
45
45
  def_node_matcher :debugger_call?, <<-PATTERN
46
- {(send {nil #kernel?} {:debugger :byebug} ...)
47
- (send (send {#kernel? nil} :binding)
46
+ {(send {nil? #kernel?} {:debugger :byebug} ...)
47
+ (send (send {#kernel? nil?} :binding)
48
48
  {:pry :remote_pry :pry_remote} ...)
49
- (send (const {nil (cbase)} :Pry) :rescue ...)
50
- (send nil {:save_and_open_page
49
+ (send (const {nil? (cbase)} :Pry) :rescue ...)
50
+ (send nil? {:save_and_open_page
51
51
  :save_and_open_screenshot
52
52
  :save_screenshot} ...)}
53
53
  PATTERN
54
54
 
55
55
  def_node_matcher :binding_irb_call?, <<-PATTERN
56
- (send (send {#kernel? nil} :binding) :irb ...)
56
+ (send (send {#kernel? nil?} :binding) :irb ...)
57
57
  PATTERN
58
58
 
59
- def_node_matcher :pry_rescue?, '(send (const nil :Pry) :rescue ...)'
59
+ def_node_matcher :pry_rescue?, '(send (const nil? :Pry) :rescue ...)'
60
60
 
61
61
  def on_send(node)
62
62
  return unless debugger_call?(node) || binding_irb?(node)
@@ -47,10 +47,10 @@ module RuboCop
47
47
 
48
48
  def on_send(node)
49
49
  check(node) do |data|
50
- add_offense(node, :selector,
51
- format(MSG,
52
- deprecated_method(data),
53
- replacement_method(data)))
50
+ message = format(MSG, deprecated_method(data),
51
+ replacement_method(data))
52
+
53
+ add_offense(node, location: :selector, message: message)
54
54
  end
55
55
  end
56
56
 
@@ -83,11 +83,11 @@ module RuboCop
83
83
  end
84
84
 
85
85
  def_node_matcher :alias_method?, <<-PATTERN
86
- (send nil :alias_method (sym $_name) _)
86
+ (send nil? :alias_method (sym $_name) _)
87
87
  PATTERN
88
88
 
89
89
  def_node_matcher :attr?, <<-PATTERN
90
- (send nil ${:attr_reader :attr_writer :attr_accessor :attr} $...)
90
+ (send nil? ${:attr_reader :attr_writer :attr_accessor :attr} $...)
91
91
  PATTERN
92
92
 
93
93
  def_node_matcher :sym_name, '(sym $_name)'
@@ -137,7 +137,9 @@ module RuboCop
137
137
  def found_method(node, method_name)
138
138
  if @definitions.key?(method_name)
139
139
  loc = node.send_type? ? node.loc.selector : node.loc.keyword
140
- add_offense(node, loc, message_for_dup(node, method_name))
140
+ message = message_for_dup(node, method_name)
141
+
142
+ add_offense(node, location: loc, message: message)
141
143
  else
142
144
  @definitions[method_name] = source_location(node)
143
145
  end
@@ -46,7 +46,7 @@ module RuboCop
46
46
  MSG = 'Empty `ensure` block detected.'.freeze
47
47
 
48
48
  def on_ensure(node)
49
- add_offense(node, :keyword) unless node.body
49
+ add_offense(node, location: :keyword) unless node.body
50
50
  end
51
51
 
52
52
  def autocorrect(node)
@@ -28,7 +28,7 @@ module RuboCop
28
28
  def on_begin(node)
29
29
  return unless empty_expression?(node)
30
30
 
31
- add_offense(node, node.source_range)
31
+ add_offense(node, location: node.source_range)
32
32
  end
33
33
 
34
34
  private
@@ -29,7 +29,7 @@ module RuboCop
29
29
  node.each_when do |when_node|
30
30
  next if when_node.body
31
31
 
32
- add_offense(when_node, when_node.source_range)
32
+ add_offense(when_node, location: when_node.source_range)
33
33
  end
34
34
  end
35
35
  end
@@ -32,7 +32,7 @@ module RuboCop
32
32
 
33
33
  def on_postexe(node)
34
34
  inside_of_method = node.each_ancestor(:def, :defs).count.nonzero?
35
- add_offense(node, :keyword) if inside_of_method
35
+ add_offense(node, location: :keyword) if inside_of_method
36
36
  end
37
37
  end
38
38
  end
@@ -35,7 +35,7 @@ module RuboCop
35
35
  def on_send(node)
36
36
  return unless offending_node?(node)
37
37
 
38
- add_offense(node, :selector)
38
+ add_offense(node, location: :selector)
39
39
  end
40
40
 
41
41
  private
@@ -39,7 +39,7 @@ module RuboCop
39
39
  elsif node.parent && node.parent.send_type?
40
40
  message << FOR_METHOD
41
41
  end
42
- add_offense(node, range, message)
42
+ add_offense(node, location: range, message: message)
43
43
  end
44
44
  end
45
45
 
@@ -54,7 +54,7 @@ module RuboCop
54
54
  'block'.freeze
55
55
 
56
56
  def_node_matcher :private_class_method, <<-PATTERN
57
- (send nil :private_class_method $...)
57
+ (send nil? :private_class_method $...)
58
58
  PATTERN
59
59
 
60
60
  def on_class(node)
@@ -79,8 +79,9 @@ module RuboCop
79
79
  check_scope(node)
80
80
 
81
81
  @useless.each do |_name, (defs_node, visibility, modifier)|
82
- add_offense(defs_node, :keyword,
83
- format_message(visibility, modifier))
82
+ add_offense(defs_node,
83
+ location: :keyword,
84
+ message: format_message(visibility, modifier))
84
85
  end
85
86
  end
86
87
 
@@ -22,7 +22,8 @@ module RuboCop
22
22
 
23
23
  def on_str(node)
24
24
  return if heredoc?(node)
25
- return unless scrub_string(node.str_content) =~ /#\{.*\}/
25
+ return if node.parent && node.parent.dstr_type?
26
+ return unless node.str_content.scrub =~ /#\{.*\}/
26
27
  add_offense(node)
27
28
  end
28
29
 
@@ -30,8 +30,8 @@ module RuboCop
30
30
  # if some_var && some_condition
31
31
  # do_something
32
32
  # end
33
- class LiteralInCondition < Cop
34
- MSG = 'Literal `%s` appeared in a condition.'.freeze
33
+ class LiteralAsCondition < Cop
34
+ MSG = 'Literal `%s` appeared as a condition.'.freeze
35
35
 
36
36
  def on_if(node)
37
37
  check_for_literal(node)
@@ -65,6 +65,11 @@ module RuboCop
65
65
  end
66
66
  end
67
67
 
68
+ def on_send(node)
69
+ return unless node.negation_method?
70
+ check_for_literal(node)
71
+ end
72
+
68
73
  def message(node)
69
74
  format(MSG, node.source)
70
75
  end
@@ -72,10 +77,11 @@ module RuboCop
72
77
  private
73
78
 
74
79
  def check_for_literal(node)
75
- if node.condition.literal?
76
- add_offense(node.condition)
80
+ cond = condition(node)
81
+ if cond.literal?
82
+ add_offense(cond)
77
83
  else
78
- check_node(node.condition)
84
+ check_node(cond)
79
85
  end
80
86
  end
81
87
 
@@ -121,6 +127,14 @@ module RuboCop
121
127
 
122
128
  handle_node(condition)
123
129
  end
130
+
131
+ def condition(node)
132
+ if node.send_type?
133
+ node.receiver
134
+ else
135
+ node.condition
136
+ end
137
+ end
124
138
  end
125
139
  end
126
140
  end