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
@@ -32,6 +32,7 @@ require_relative 'rubocop/ast/node/mixin/method_dispatch_node'
32
32
  require_relative 'rubocop/ast/node/mixin/modifier_node'
33
33
  require_relative 'rubocop/ast/node/mixin/parameterized_node'
34
34
  require_relative 'rubocop/ast/node/mixin/predicate_operator_node'
35
+ require_relative 'rubocop/ast/node/mixin/basic_literal_node'
35
36
  require_relative 'rubocop/ast/node/and_node'
36
37
  require_relative 'rubocop/ast/node/args_node'
37
38
  require_relative 'rubocop/ast/node/array_node'
@@ -48,7 +49,9 @@ require_relative 'rubocop/ast/node/pair_node'
48
49
  require_relative 'rubocop/ast/node/regexp_node'
49
50
  require_relative 'rubocop/ast/node/resbody_node'
50
51
  require_relative 'rubocop/ast/node/send_node'
52
+ require_relative 'rubocop/ast/node/str_node'
51
53
  require_relative 'rubocop/ast/node/super_node'
54
+ require_relative 'rubocop/ast/node/symbol_node'
52
55
  require_relative 'rubocop/ast/node/until_node'
53
56
  require_relative 'rubocop/ast/node/when_node'
54
57
  require_relative 'rubocop/ast/node/while_node'
@@ -98,6 +101,7 @@ require_relative 'rubocop/cop/mixin/def_node'
98
101
  require_relative 'rubocop/cop/mixin/documentation_comment'
99
102
  require_relative 'rubocop/cop/mixin/duplication'
100
103
  require_relative 'rubocop/cop/mixin/empty_lines_around_body'
104
+ require_relative 'rubocop/cop/mixin/empty_parameter'
101
105
  require_relative 'rubocop/cop/mixin/end_keyword_alignment'
102
106
  require_relative 'rubocop/cop/mixin/enforce_superclass'
103
107
  require_relative 'rubocop/cop/mixin/first_element_line_break'
@@ -126,7 +130,6 @@ require_relative 'rubocop/cop/mixin/safe_mode'
126
130
  require_relative 'rubocop/cop/mixin/space_after_punctuation'
127
131
  require_relative 'rubocop/cop/mixin/space_before_punctuation'
128
132
  require_relative 'rubocop/cop/mixin/surrounding_space'
129
- require_relative 'rubocop/cop/mixin/space_inside' # relies on surrounding_space
130
133
  require_relative 'rubocop/cop/mixin/statement_modifier'
131
134
  require_relative 'rubocop/cop/mixin/string_help'
132
135
  require_relative 'rubocop/cop/mixin/string_literals_help'
@@ -140,7 +143,9 @@ require_relative 'rubocop/cop/bundler/duplicated_gem'
140
143
  require_relative 'rubocop/cop/bundler/insecure_protocol_source'
141
144
  require_relative 'rubocop/cop/bundler/ordered_gems'
142
145
 
146
+ require_relative 'rubocop/cop/gemspec/duplicated_assignment'
143
147
  require_relative 'rubocop/cop/gemspec/ordered_dependencies'
148
+ require_relative 'rubocop/cop/gemspec/required_ruby_version'
144
149
 
145
150
  require_relative 'rubocop/cop/layout/access_modifier_indentation'
146
151
  require_relative 'rubocop/cop/layout/align_array'
@@ -148,6 +153,7 @@ require_relative 'rubocop/cop/layout/align_hash'
148
153
  require_relative 'rubocop/cop/layout/align_parameters'
149
154
  require_relative 'rubocop/cop/layout/block_end_newline'
150
155
  require_relative 'rubocop/cop/layout/case_indentation'
156
+ require_relative 'rubocop/cop/layout/class_structure'
151
157
  require_relative 'rubocop/cop/layout/closing_parenthesis_indentation'
152
158
  require_relative 'rubocop/cop/layout/comment_indentation'
153
159
  require_relative 'rubocop/cop/layout/dot_position'
@@ -155,6 +161,7 @@ require_relative 'rubocop/cop/layout/else_alignment'
155
161
  require_relative 'rubocop/cop/layout/empty_line_after_magic_comment'
156
162
  require_relative 'rubocop/cop/layout/empty_line_between_defs'
157
163
  require_relative 'rubocop/cop/layout/empty_lines_around_access_modifier'
164
+ require_relative 'rubocop/cop/layout/empty_lines_around_arguments'
158
165
  require_relative 'rubocop/cop/layout/empty_lines_around_begin_body'
159
166
  require_relative 'rubocop/cop/layout/empty_lines_around_block_body'
160
167
  require_relative 'rubocop/cop/layout/empty_lines_around_class_body'
@@ -202,12 +209,13 @@ require_relative 'rubocop/cop/layout/space_before_first_arg'
202
209
  require_relative 'rubocop/cop/layout/space_before_semicolon'
203
210
  require_relative 'rubocop/cop/layout/space_in_lambda_literal'
204
211
  require_relative 'rubocop/cop/layout/space_inside_array_percent_literal'
212
+ require_relative 'rubocop/cop/layout/space_inside_array_literal_brackets'
205
213
  require_relative 'rubocop/cop/layout/space_inside_block_braces'
206
- require_relative 'rubocop/cop/layout/space_inside_brackets'
207
214
  require_relative 'rubocop/cop/layout/space_inside_hash_literal_braces'
208
215
  require_relative 'rubocop/cop/layout/space_inside_parens'
209
216
  require_relative 'rubocop/cop/layout/space_inside_percent_literal_delimiters'
210
217
  require_relative 'rubocop/cop/layout/space_inside_range_literal'
218
+ require_relative 'rubocop/cop/layout/space_inside_reference_brackets'
211
219
  require_relative 'rubocop/cop/layout/space_inside_string_interpolation'
212
220
  require_relative 'rubocop/cop/layout/tab'
213
221
  require_relative 'rubocop/cop/layout/trailing_blank_lines'
@@ -246,8 +254,10 @@ require_relative 'rubocop/cop/lint/interpolation_check'
246
254
  require_relative 'rubocop/cop/lint/literal_as_condition'
247
255
  require_relative 'rubocop/cop/lint/literal_in_interpolation'
248
256
  require_relative 'rubocop/cop/lint/loop'
257
+ require_relative 'rubocop/cop/lint/missing_cop_enable_directive'
249
258
  require_relative 'rubocop/cop/lint/multiple_compare'
250
259
  require_relative 'rubocop/cop/lint/nested_method_definition'
260
+ require_relative 'rubocop/cop/lint/nested_percent_literal'
251
261
  require_relative 'rubocop/cop/lint/next_without_accumulator'
252
262
  require_relative 'rubocop/cop/lint/non_local_exit_from_iterator'
253
263
  require_relative 'rubocop/cop/lint/parentheses_as_grouped_expression'
@@ -260,10 +270,10 @@ require_relative 'rubocop/cop/lint/regexp_as_condition'
260
270
  require_relative 'rubocop/cop/lint/require_parentheses'
261
271
  require_relative 'rubocop/cop/lint/rescue_exception'
262
272
  require_relative 'rubocop/cop/lint/rescue_type'
263
- require_relative 'rubocop/cop/lint/rescue_without_error_class'
264
273
  require_relative 'rubocop/cop/lint/return_in_void_context'
265
274
  require_relative 'rubocop/cop/lint/safe_navigation_chain'
266
275
  require_relative 'rubocop/cop/lint/script_permission'
276
+ require_relative 'rubocop/cop/lint/shadowed_argument'
267
277
  require_relative 'rubocop/cop/lint/shadowed_exception'
268
278
  require_relative 'rubocop/cop/lint/shadowing_outer_local_variable'
269
279
  require_relative 'rubocop/cop/lint/string_conversion_in_interpolation'
@@ -356,6 +366,7 @@ require_relative 'rubocop/cop/style/class_methods'
356
366
  require_relative 'rubocop/cop/style/class_vars'
357
367
  require_relative 'rubocop/cop/style/collection_methods'
358
368
  require_relative 'rubocop/cop/style/colon_method_call'
369
+ require_relative 'rubocop/cop/style/colon_method_definition'
359
370
  require_relative 'rubocop/cop/style/command_literal'
360
371
  require_relative 'rubocop/cop/style/comment_annotation'
361
372
  require_relative 'rubocop/cop/style/commented_keyword'
@@ -369,13 +380,17 @@ require_relative 'rubocop/cop/style/documentation'
369
380
  require_relative 'rubocop/cop/style/double_negation'
370
381
  require_relative 'rubocop/cop/style/each_for_simple_loop'
371
382
  require_relative 'rubocop/cop/style/each_with_object'
383
+ require_relative 'rubocop/cop/style/empty_block_parameter'
372
384
  require_relative 'rubocop/cop/style/empty_case_condition'
373
385
  require_relative 'rubocop/cop/style/empty_else'
386
+ require_relative 'rubocop/cop/style/empty_lambda_parameter'
374
387
  require_relative 'rubocop/cop/style/empty_literal'
375
388
  require_relative 'rubocop/cop/style/empty_method'
376
389
  require_relative 'rubocop/cop/style/encoding'
377
390
  require_relative 'rubocop/cop/style/end_block'
391
+ require_relative 'rubocop/cop/style/eval_with_location'
378
392
  require_relative 'rubocop/cop/style/even_odd'
393
+ require_relative 'rubocop/cop/style/extend_self'
379
394
  require_relative 'rubocop/cop/style/flip_flop'
380
395
  require_relative 'rubocop/cop/style/for'
381
396
  require_relative 'rubocop/cop/style/format_string'
@@ -437,6 +452,7 @@ require_relative 'rubocop/cop/style/perl_backrefs'
437
452
  require_relative 'rubocop/cop/style/preferred_hash_methods'
438
453
  require_relative 'rubocop/cop/style/proc'
439
454
  require_relative 'rubocop/cop/style/raise_args'
455
+ require_relative 'rubocop/cop/style/random_with_offset'
440
456
  require_relative 'rubocop/cop/style/redundant_begin'
441
457
  require_relative 'rubocop/cop/style/redundant_exception'
442
458
  require_relative 'rubocop/cop/style/redundant_freeze'
@@ -446,6 +462,7 @@ require_relative 'rubocop/cop/style/redundant_self'
446
462
  require_relative 'rubocop/cop/style/redundant_conditional'
447
463
  require_relative 'rubocop/cop/style/regexp_literal'
448
464
  require_relative 'rubocop/cop/style/rescue_modifier'
465
+ require_relative 'rubocop/cop/style/rescue_standard_error'
449
466
  require_relative 'rubocop/cop/style/return_nil'
450
467
  require_relative 'rubocop/cop/style/safe_navigation'
451
468
  require_relative 'rubocop/cop/style/self_assignment'
@@ -457,6 +474,7 @@ require_relative 'rubocop/cop/style/single_line_methods'
457
474
  require_relative 'rubocop/cop/style/special_global_vars'
458
475
  require_relative 'rubocop/cop/style/stabby_lambda_parentheses'
459
476
  require_relative 'rubocop/cop/style/stderr_puts'
477
+ require_relative 'rubocop/cop/style/string_hash_keys'
460
478
  require_relative 'rubocop/cop/style/string_literals'
461
479
  require_relative 'rubocop/cop/style/string_literals_in_interpolation'
462
480
  require_relative 'rubocop/cop/style/string_methods'
@@ -465,8 +483,10 @@ require_relative 'rubocop/cop/style/symbol_array'
465
483
  require_relative 'rubocop/cop/style/symbol_literal'
466
484
  require_relative 'rubocop/cop/style/symbol_proc'
467
485
  require_relative 'rubocop/cop/style/ternary_parentheses'
486
+ require_relative 'rubocop/cop/style/trailing_body_on_method_definition'
468
487
  require_relative 'rubocop/cop/style/trailing_comma_in_arguments'
469
488
  require_relative 'rubocop/cop/style/trailing_comma_in_literal'
489
+ require_relative 'rubocop/cop/style/trailing_method_end_statement'
470
490
  require_relative 'rubocop/cop/style/trailing_underscore_variable'
471
491
  require_relative 'rubocop/cop/style/trivial_accessors'
472
492
  require_relative 'rubocop/cop/style/unless_else'
@@ -486,11 +506,13 @@ require_relative 'rubocop/cop/rails/active_support_aliases'
486
506
  require_relative 'rubocop/cop/rails/application_job'
487
507
  require_relative 'rubocop/cop/rails/application_record'
488
508
  require_relative 'rubocop/cop/rails/blank'
509
+ require_relative 'rubocop/cop/rails/create_table_with_timestamps'
489
510
  require_relative 'rubocop/cop/rails/date'
490
511
  require_relative 'rubocop/cop/rails/dynamic_find_by'
491
512
  require_relative 'rubocop/cop/rails/delegate'
492
513
  require_relative 'rubocop/cop/rails/delegate_allow_blank'
493
514
  require_relative 'rubocop/cop/rails/enum_uniqueness'
515
+ require_relative 'rubocop/cop/rails/environment_comparison'
494
516
  require_relative 'rubocop/cop/rails/exit'
495
517
  require_relative 'rubocop/cop/rails/file_path'
496
518
  require_relative 'rubocop/cop/rails/find_by'
@@ -498,12 +520,16 @@ require_relative 'rubocop/cop/rails/find_each'
498
520
  require_relative 'rubocop/cop/rails/has_and_belongs_to_many'
499
521
  require_relative 'rubocop/cop/rails/has_many_or_has_one_dependent'
500
522
  require_relative 'rubocop/cop/rails/http_positional_arguments'
523
+ require_relative 'rubocop/cop/rails/inverse_of'
524
+ require_relative 'rubocop/cop/rails/lexically_scoped_action_filter'
501
525
  require_relative 'rubocop/cop/rails/not_null_column'
502
526
  require_relative 'rubocop/cop/rails/output_safety'
503
527
  require_relative 'rubocop/cop/rails/output'
504
528
  require_relative 'rubocop/cop/rails/pluralization_grammar'
529
+ require_relative 'rubocop/cop/rails/presence'
505
530
  require_relative 'rubocop/cop/rails/present'
506
531
  require_relative 'rubocop/cop/rails/read_write_attribute'
532
+ require_relative 'rubocop/cop/rails/redundant_receiver_in_with_options'
507
533
  require_relative 'rubocop/cop/rails/request_referer'
508
534
  require_relative 'rubocop/cop/rails/reversible_migration'
509
535
  require_relative 'rubocop/cop/rails/relative_date_constant'
@@ -536,6 +562,7 @@ require_relative 'rubocop/formatter/html_formatter'
536
562
  require_relative 'rubocop/formatter/json_formatter'
537
563
  require_relative 'rubocop/formatter/offense_count_formatter'
538
564
  require_relative 'rubocop/formatter/progress_formatter'
565
+ require_relative 'rubocop/formatter/quiet_formatter'
539
566
  require_relative 'rubocop/formatter/tap_formatter'
540
567
  require_relative 'rubocop/formatter/worst_offenders_formatter'
541
568
 
@@ -30,7 +30,9 @@ module RuboCop
30
30
  RegexpNode => [:regexp],
31
31
  ResbodyNode => [:resbody],
32
32
  SendNode => %i[csend send],
33
+ StrNode => %i[str dstr xstr],
33
34
  SuperNode => %i[super zsuper],
35
+ SymbolNode => [:sym],
34
36
  UntilNode => %i[until until_post],
35
37
  WhenNode => [:when],
36
38
  WhileNode => %i[while while_post],
@@ -24,6 +24,7 @@ module RuboCop
24
24
 
25
25
  # <=> isn't included here, because it doesn't return a boolean.
26
26
  COMPARISON_OPERATORS = %i[== === != <= >= > <].freeze
27
+ ARITHMETIC_OPERATORS = %i[+ - * / % **].freeze
27
28
 
28
29
  TRUTHY_LITERALS = %i[str dstr xstr int float sym dsym array
29
30
  hash regexp true irange erange complex
@@ -314,11 +315,28 @@ module RuboCop
314
315
  ## Predicates
315
316
 
316
317
  def multiline?
317
- source_range && (source_range.first_line != source_range.last_line)
318
+ line_count > 1
318
319
  end
319
320
 
320
321
  def single_line?
321
- !multiline?
322
+ line_count == 1
323
+ end
324
+
325
+ def line_count
326
+ return 0 unless source_range
327
+ source_range.last_line - source_range.first_line + 1
328
+ end
329
+
330
+ def nonempty_line_count
331
+ source.lines.grep(/\S/).size
332
+ end
333
+
334
+ def empty?
335
+ length.zero?
336
+ end
337
+
338
+ def length
339
+ source_range ? source_range.size : 0
322
340
  end
323
341
 
324
342
  def asgn_method_call?
@@ -326,6 +344,10 @@ module RuboCop
326
344
  method_name.to_s.end_with?('='.freeze)
327
345
  end
328
346
 
347
+ def arithmetic_operation?
348
+ ARITHMETIC_OPERATORS.include?(method_name)
349
+ end
350
+
329
351
  def_node_matcher :equals_asgn?, <<-PATTERN
330
352
  {lvasgn ivasgn cvasgn gvasgn casgn masgn}
331
353
  PATTERN
@@ -7,6 +7,23 @@ module RuboCop
7
7
  # to all `args` nodes within RuboCop.
8
8
  class ArgsNode < Node
9
9
  include CollectionNode
10
+
11
+ # It returns true if arguments are empty, and delimiters do not exist.
12
+ # @example:
13
+ # # true
14
+ # def x; end
15
+ # x { }
16
+ # -> {}
17
+ #
18
+ # # false
19
+ # def x(); end
20
+ # def x a; end
21
+ # x { || }
22
+ # -> () {}
23
+ # -> a {}
24
+ def empty_and_without_delimiters?
25
+ loc.expression.nil?
26
+ end
10
27
  end
11
28
  end
12
29
  end
@@ -31,7 +31,7 @@ module RuboCop
31
31
  # Check for any percent literal.
32
32
  #
33
33
  # @overload percent_literal?(type)
34
- # Check for percent literaly of type `type`.
34
+ # Check for percent literal of type `type`.
35
35
  #
36
36
  # @param type [Symbol] an optional percent literal type
37
37
  #
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module AST
5
+ # Common functionality for primitive literal nodes: `sym`, `str`,
6
+ # `int`, `float`, ...
7
+ module BasicLiteralNode
8
+ # Returns the value of the literal.
9
+ #
10
+ # @return [mixed] the value of the literal
11
+ def value
12
+ node_parts[0]
13
+ end
14
+ end
15
+ end
16
+ end
@@ -8,6 +8,7 @@ module RuboCop
8
8
  class SendNode < Node
9
9
  include ParameterizedNode
10
10
  include MethodDispatchNode
11
+ ARROW = '->'.freeze
11
12
 
12
13
  # Custom destructuring method. This can be used to normalize
13
14
  # destructuring for different variations of the node.
@@ -17,9 +18,28 @@ module RuboCop
17
18
  to_a
18
19
  end
19
20
 
21
+ # Checks whether this is a negation method, i.e. `!` or keyword `not`.
22
+ #
23
+ # @return [Boolean] whether this method is a negation method
20
24
  def negation_method?
21
25
  keyword_bang? || keyword_not?
22
26
  end
27
+
28
+ # Checks whether this is a lambda. Some versions of parser parses
29
+ # non-literal lambdas as a method send.
30
+ #
31
+ # @return [Boolean] whether this method is a lambda
32
+ def lambda?
33
+ parent && parent.block_type? && method?(:lambda)
34
+ end
35
+
36
+ # Checks whether this is a stabby lambda. e.g. `-> () {}`
37
+ #
38
+ # @return [Boolean] whether this method is a staby lambda
39
+ def stabby_lambda?
40
+ selector = loc.selector
41
+ selector && selector.source == ARROW
42
+ end
23
43
  end
24
44
  end
25
45
  end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module AST
5
+ # A node extension for `str`, `dstr` and `xstr` nodes. This will be used
6
+ # in place of a plain node when the builder constructs the AST, making
7
+ # its methods available to all `str` nodes within RuboCop.
8
+ class StrNode < Node
9
+ def heredoc?
10
+ loc.is_a?(Parser::Source::Map::Heredoc)
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module AST
5
+ # A node extension for `sym` nodes. This will be used in place of a
6
+ # plain node when the builder constructs the AST, making its methods
7
+ # available to all `sym` nodes within RuboCop.
8
+ class SymbolNode < Node
9
+ include BasicLiteralNode
10
+
11
+ # Custom destructuring method. This can be used to normalize
12
+ # destructuring for different variations of the node.
13
+ #
14
+ # @return [Array] the different parts of the `sym` node
15
+ def node_parts
16
+ to_a
17
+ end
18
+ end
19
+ end
20
+ end
@@ -30,11 +30,11 @@ module RuboCop
30
30
  kwoptarg].freeze
31
31
 
32
32
  NO_CHILD_NODES.each do |type|
33
- module_eval("def on_#{type}(node); end")
33
+ module_eval("def on_#{type}(node); end", __FILE__, __LINE__)
34
34
  end
35
35
 
36
36
  ONE_CHILD_NODE.each do |type|
37
- module_eval(<<-RUBY)
37
+ module_eval(<<-RUBY, __FILE__, __LINE__ + 1)
38
38
  def on_#{type}(node)
39
39
  if (child = node.children[0])
40
40
  send(:"on_\#{child.type}", child)
@@ -44,7 +44,7 @@ module RuboCop
44
44
  end
45
45
 
46
46
  MANY_CHILD_NODES.each do |type|
47
- module_eval(<<-RUBY)
47
+ module_eval(<<-RUBY, __FILE__, __LINE__ + 1)
48
48
  def on_#{type}(node)
49
49
  node.children.each { |child| send(:"on_\#{child.type}", child) }
50
50
  nil
@@ -54,7 +54,7 @@ module RuboCop
54
54
 
55
55
  SECOND_CHILD_ONLY.each do |type|
56
56
  # Guard clause is for nodes nested within mlhs
57
- module_eval(<<-RUBY)
57
+ module_eval(<<-RUBY, __FILE__, __LINE__ + 1)
58
58
  def on_#{type}(node)
59
59
  if (child = node.children[1])
60
60
  send(:"on_\#{child.type}", child)
@@ -28,8 +28,7 @@ module RuboCop
28
28
  validate_options_vs_config
29
29
  act_on_options
30
30
  apply_default_formatter
31
-
32
- execute_runner(paths)
31
+ execute_runners(paths)
33
32
  rescue RuboCop::Error => e
34
33
  warn Rainbow("Error: #{e.message}").red
35
34
  return 2
@@ -52,6 +51,48 @@ module RuboCop
52
51
 
53
52
  private
54
53
 
54
+ def execute_runners(paths)
55
+ if @options[:auto_gen_config]
56
+ reset_config_and_auto_gen_file
57
+ line_length_contents = run_line_length_cop_auto_gen_config(paths)
58
+ run_all_cops_auto_gen_config(line_length_contents, paths)
59
+ else
60
+ execute_runner(paths)
61
+ end
62
+ end
63
+
64
+ # Do an initial run with only Metrics/LineLength so that cops that depend
65
+ # on Metrics/LineLength:Max get the correct value for that parameter.
66
+ def run_line_length_cop_auto_gen_config(paths)
67
+ puts Rainbow('Phase 1 of 2: run Metrics/LineLength cop').yellow
68
+ @options[:only] = ['Metrics/LineLength']
69
+ execute_runner(paths)
70
+ @options.delete(:only)
71
+ @config_store = ConfigStore.new
72
+ # Save the todo configuration of the LineLength cop.
73
+ IO.read(ConfigLoader::AUTO_GENERATED_FILE)
74
+ .lines
75
+ .drop_while { |line| line.start_with?('#') }
76
+ .join
77
+ end
78
+
79
+ def run_all_cops_auto_gen_config(line_length_contents, paths)
80
+ puts Rainbow('Phase 2 of 2: run all cops').yellow
81
+ result = execute_runner(paths)
82
+ # This run was made with the current maximum length allowed, so append
83
+ # the saved setting for LineLength.
84
+ File.open(ConfigLoader::AUTO_GENERATED_FILE, 'a') do |f|
85
+ f.write(line_length_contents)
86
+ end
87
+ result
88
+ end
89
+
90
+ def reset_config_and_auto_gen_file
91
+ @config_store = ConfigStore.new
92
+ File.open(ConfigLoader::AUTO_GENERATED_FILE, 'w'){}
93
+ ConfigLoader.add_inheritance_from_auto_generated_file
94
+ end
95
+
55
96
  def validate_options_vs_config
56
97
  if @options[:parallel] &&
57
98
  !@config_store.for(Dir.pwd).for_all_cops['UseCache']
@@ -62,8 +103,6 @@ module RuboCop
62
103
  end
63
104
 
64
105
  def act_on_options
65
- handle_exiting_options
66
-
67
106
  ConfigLoader.debug = @options[:debug]
68
107
  ConfigLoader.auto_gen_config = @options[:auto_gen_config]
69
108
  ConfigLoader.ignore_parent_exclusion = @options[:ignore_parent_exclusion]
@@ -71,6 +110,8 @@ module RuboCop
71
110
  @config_store.options_config = @options[:config] if @options[:config]
72
111
  @config_store.force_default_config! if @options[:force_default_config]
73
112
 
113
+ handle_exiting_options
114
+
74
115
  if @options[:color]
75
116
  # color output explicitly forced on
76
117
  Rainbow.enabled = true