rubocop 0.80.1 → 0.85.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 (324) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -4
  3. data/config/default.yml +202 -49
  4. data/lib/rubocop.rb +20 -61
  5. data/lib/rubocop/ast_aliases.rb +8 -0
  6. data/lib/rubocop/cli.rb +13 -7
  7. data/lib/rubocop/cli/command/auto_genenerate_config.rb +2 -2
  8. data/lib/rubocop/cli/command/show_cops.rb +2 -6
  9. data/lib/rubocop/comment_config.rb +1 -1
  10. data/lib/rubocop/config.rb +14 -2
  11. data/lib/rubocop/config_loader.rb +37 -33
  12. data/lib/rubocop/config_loader_resolver.rb +45 -6
  13. data/lib/rubocop/config_obsoletion.rb +2 -0
  14. data/lib/rubocop/config_store.rb +12 -2
  15. data/lib/rubocop/config_validator.rb +18 -1
  16. data/lib/rubocop/cop/autocorrect_logic.rb +1 -2
  17. data/lib/rubocop/cop/badge.rb +5 -5
  18. data/lib/rubocop/cop/bundler/gem_comment.rb +70 -1
  19. data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +1 -1
  20. data/lib/rubocop/cop/commissioner.rb +0 -21
  21. data/lib/rubocop/cop/cop.rb +14 -6
  22. data/lib/rubocop/cop/corrector.rb +48 -24
  23. data/lib/rubocop/cop/correctors/alignment_corrector.rb +4 -8
  24. data/lib/rubocop/cop/correctors/condition_corrector.rb +1 -2
  25. data/lib/rubocop/cop/correctors/empty_line_corrector.rb +1 -1
  26. data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +4 -4
  27. data/lib/rubocop/cop/correctors/line_break_corrector.rb +2 -2
  28. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +1 -1
  29. data/lib/rubocop/cop/correctors/space_corrector.rb +1 -3
  30. data/lib/rubocop/cop/correctors/string_literal_corrector.rb +2 -2
  31. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -3
  32. data/lib/rubocop/cop/generator.rb +4 -3
  33. data/lib/rubocop/cop/ignored_node.rb +1 -3
  34. data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +1 -1
  35. data/lib/rubocop/cop/layout/array_alignment.rb +53 -10
  36. data/lib/rubocop/cop/layout/block_end_newline.rb +5 -3
  37. data/lib/rubocop/cop/layout/case_indentation.rb +3 -3
  38. data/lib/rubocop/cop/layout/class_structure.rb +19 -16
  39. data/lib/rubocop/cop/layout/condition_position.rb +12 -2
  40. data/lib/rubocop/cop/layout/dot_position.rb +1 -1
  41. data/lib/rubocop/cop/layout/else_alignment.rb +8 -0
  42. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +2 -6
  43. data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +126 -0
  44. data/lib/rubocop/cop/layout/end_of_line.rb +2 -2
  45. data/lib/rubocop/cop/layout/first_argument_indentation.rb +1 -3
  46. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +14 -10
  47. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -1
  48. data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +1 -1
  49. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -3
  50. data/lib/rubocop/cop/layout/first_parameter_indentation.rb +2 -2
  51. data/lib/rubocop/cop/layout/hash_alignment.rb +6 -6
  52. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +5 -9
  53. data/lib/rubocop/cop/layout/heredoc_indentation.rb +20 -103
  54. data/lib/rubocop/cop/layout/{tab.rb → indentation_style.rb} +48 -6
  55. data/lib/rubocop/cop/layout/indentation_width.rb +1 -3
  56. data/lib/rubocop/cop/layout/leading_comment_space.rb +1 -1
  57. data/lib/rubocop/cop/layout/line_length.rb +23 -20
  58. data/lib/rubocop/cop/layout/multiline_block_layout.rb +1 -1
  59. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -3
  60. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +1 -1
  61. data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +13 -4
  62. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +3 -3
  63. data/lib/rubocop/cop/layout/space_around_keyword.rb +2 -2
  64. data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +131 -0
  65. data/lib/rubocop/cop/layout/space_around_operators.rb +19 -2
  66. data/lib/rubocop/cop/layout/space_before_comment.rb +1 -3
  67. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +1 -1
  68. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +1 -3
  69. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +2 -2
  70. data/lib/rubocop/cop/layout/space_inside_range_literal.rb +2 -2
  71. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +1 -3
  72. data/lib/rubocop/cop/layout/trailing_whitespace.rb +2 -2
  73. data/lib/rubocop/cop/lint/ambiguous_operator.rb +41 -0
  74. data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +14 -0
  75. data/lib/rubocop/cop/lint/boolean_symbol.rb +12 -0
  76. data/lib/rubocop/cop/lint/debugger.rb +1 -1
  77. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +137 -0
  78. data/lib/rubocop/cop/lint/duplicate_methods.rb +1 -5
  79. data/lib/rubocop/cop/lint/empty_when.rb +29 -6
  80. data/lib/rubocop/cop/lint/ensure_return.rb +19 -2
  81. data/lib/rubocop/cop/lint/erb_new_arguments.rb +2 -4
  82. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -1
  83. data/lib/rubocop/cop/lint/inherit_exception.rb +1 -1
  84. data/lib/rubocop/cop/lint/interpolation_check.rb +1 -1
  85. data/lib/rubocop/cop/lint/literal_as_condition.rb +10 -13
  86. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +1 -1
  87. data/lib/rubocop/cop/lint/loop.rb +7 -5
  88. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +62 -0
  89. data/lib/rubocop/cop/lint/multiple_comparison.rb +1 -1
  90. data/lib/rubocop/cop/lint/nested_method_definition.rb +2 -2
  91. data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -1
  92. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +2 -2
  93. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +7 -7
  94. data/lib/rubocop/cop/lint/number_conversion.rb +1 -1
  95. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +33 -11
  96. data/lib/rubocop/cop/lint/percent_string_array.rb +2 -4
  97. data/lib/rubocop/cop/lint/raise_exception.rb +75 -0
  98. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +1 -6
  99. data/lib/rubocop/cop/lint/redundant_require_statement.rb +3 -3
  100. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +1 -1
  101. data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
  102. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +1 -1
  103. data/lib/rubocop/cop/lint/struct_new_override.rb +58 -0
  104. data/lib/rubocop/cop/lint/suppressed_exception.rb +23 -26
  105. data/lib/rubocop/cop/lint/syntax.rb +1 -3
  106. data/lib/rubocop/cop/lint/unified_integer.rb +0 -2
  107. data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
  108. data/lib/rubocop/cop/lint/unused_method_argument.rb +32 -6
  109. data/lib/rubocop/cop/lint/uri_regexp.rb +4 -4
  110. data/lib/rubocop/cop/lint/useless_access_modifier.rb +13 -3
  111. data/lib/rubocop/cop/lint/useless_assignment.rb +3 -2
  112. data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +6 -1
  113. data/lib/rubocop/cop/lint/useless_setter_call.rb +1 -1
  114. data/lib/rubocop/cop/migration/department_name.rb +22 -9
  115. data/lib/rubocop/cop/mixin/alignment.rb +1 -3
  116. data/lib/rubocop/cop/mixin/array_min_size.rb +1 -3
  117. data/lib/rubocop/cop/mixin/check_line_breakable.rb +3 -9
  118. data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +1 -3
  119. data/lib/rubocop/cop/mixin/configurable_formatting.rb +2 -4
  120. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +6 -1
  121. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +10 -1
  122. data/lib/rubocop/cop/mixin/hash_transform_method.rb +9 -2
  123. data/lib/rubocop/cop/mixin/ignored_pattern.rb +1 -1
  124. data/lib/rubocop/cop/mixin/line_length_help.rb +3 -2
  125. data/lib/rubocop/cop/mixin/method_complexity.rb +5 -0
  126. data/lib/rubocop/cop/mixin/parser_diagnostic.rb +1 -1
  127. data/lib/rubocop/cop/mixin/regexp_literal_help.rb +16 -0
  128. data/lib/rubocop/cop/mixin/statement_modifier.rb +7 -22
  129. data/lib/rubocop/cop/mixin/target_ruby_version.rb +5 -1
  130. data/lib/rubocop/cop/mixin/trailing_comma.rb +2 -4
  131. data/lib/rubocop/cop/mixin/uncommunicative_name.rb +1 -1
  132. data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +11 -1
  133. data/lib/rubocop/cop/naming/constant_name.rb +2 -1
  134. data/lib/rubocop/cop/naming/file_name.rb +27 -14
  135. data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +1 -1
  136. data/lib/rubocop/cop/naming/method_name.rb +26 -0
  137. data/lib/rubocop/cop/naming/predicate_name.rb +1 -1
  138. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +1 -1
  139. data/lib/rubocop/cop/registry.rb +12 -7
  140. data/lib/rubocop/cop/severity.rb +1 -3
  141. data/lib/rubocop/cop/style/access_modifier_declarations.rb +26 -6
  142. data/lib/rubocop/cop/style/alias.rb +4 -4
  143. data/lib/rubocop/cop/style/and_or.rb +7 -8
  144. data/lib/rubocop/cop/style/array_join.rb +2 -2
  145. data/lib/rubocop/cop/style/attr.rb +1 -3
  146. data/lib/rubocop/cop/style/bare_percent_literals.rb +1 -1
  147. data/lib/rubocop/cop/style/block_delimiters.rb +2 -8
  148. data/lib/rubocop/cop/style/case_equality.rb +24 -1
  149. data/lib/rubocop/cop/style/character_literal.rb +2 -2
  150. data/lib/rubocop/cop/style/collection_methods.rb +2 -0
  151. data/lib/rubocop/cop/style/conditional_assignment.rb +9 -11
  152. data/lib/rubocop/cop/style/copyright.rb +3 -3
  153. data/lib/rubocop/cop/style/dir.rb +1 -1
  154. data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +49 -0
  155. data/lib/rubocop/cop/style/documentation.rb +43 -5
  156. data/lib/rubocop/cop/style/double_cop_disable_directive.rb +1 -1
  157. data/lib/rubocop/cop/style/double_negation.rb +41 -4
  158. data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -1
  159. data/lib/rubocop/cop/style/each_with_object.rb +3 -3
  160. data/lib/rubocop/cop/style/empty_literal.rb +1 -3
  161. data/lib/rubocop/cop/style/empty_method.rb +2 -6
  162. data/lib/rubocop/cop/style/end_block.rb +6 -0
  163. data/lib/rubocop/cop/style/even_odd.rb +1 -1
  164. data/lib/rubocop/cop/style/expand_path_arguments.rb +3 -3
  165. data/lib/rubocop/cop/style/exponential_notation.rb +119 -0
  166. data/lib/rubocop/cop/style/format_string.rb +2 -2
  167. data/lib/rubocop/cop/style/format_string_token.rb +2 -3
  168. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -6
  169. data/lib/rubocop/cop/style/guard_clause.rb +25 -2
  170. data/lib/rubocop/cop/style/hash_each_methods.rb +6 -4
  171. data/lib/rubocop/cop/style/hash_syntax.rb +19 -12
  172. data/lib/rubocop/cop/style/hash_transform_keys.rb +6 -2
  173. data/lib/rubocop/cop/style/hash_transform_values.rb +6 -5
  174. data/lib/rubocop/cop/style/if_unless_modifier.rb +23 -3
  175. data/lib/rubocop/cop/style/if_with_semicolon.rb +16 -0
  176. data/lib/rubocop/cop/style/inline_comment.rb +1 -1
  177. data/lib/rubocop/cop/style/inverse_methods.rb +1 -1
  178. data/lib/rubocop/cop/style/lambda.rb +3 -2
  179. data/lib/rubocop/cop/style/lambda_call.rb +1 -21
  180. data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +1 -3
  181. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -3
  182. data/lib/rubocop/cop/style/mixin_grouping.rb +1 -1
  183. data/lib/rubocop/cop/style/module_function.rb +58 -12
  184. data/lib/rubocop/cop/style/multiline_if_modifier.rb +1 -1
  185. data/lib/rubocop/cop/style/multiline_memoization.rb +1 -1
  186. data/lib/rubocop/cop/style/multiline_when_then.rb +16 -1
  187. data/lib/rubocop/cop/style/mutable_constant.rb +2 -4
  188. data/lib/rubocop/cop/style/negated_if.rb +3 -3
  189. data/lib/rubocop/cop/style/negated_unless.rb +3 -3
  190. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +2 -2
  191. data/lib/rubocop/cop/style/next.rb +2 -2
  192. data/lib/rubocop/cop/style/nil_comparison.rb +1 -1
  193. data/lib/rubocop/cop/style/non_nil_check.rb +5 -5
  194. data/lib/rubocop/cop/style/not.rb +1 -1
  195. data/lib/rubocop/cop/style/numeric_literal_prefix.rb +1 -1
  196. data/lib/rubocop/cop/style/numeric_literals.rb +1 -1
  197. data/lib/rubocop/cop/style/numeric_predicate.rb +1 -1
  198. data/lib/rubocop/cop/style/one_line_conditional.rb +6 -9
  199. data/lib/rubocop/cop/style/optional_arguments.rb +1 -1
  200. data/lib/rubocop/cop/style/or_assignment.rb +1 -1
  201. data/lib/rubocop/cop/style/percent_q_literals.rb +1 -1
  202. data/lib/rubocop/cop/style/perl_backrefs.rb +2 -2
  203. data/lib/rubocop/cop/style/proc.rb +1 -1
  204. data/lib/rubocop/cop/style/raise_args.rb +1 -1
  205. data/lib/rubocop/cop/style/random_with_offset.rb +3 -3
  206. data/lib/rubocop/cop/style/redundant_condition.rb +3 -4
  207. data/lib/rubocop/cop/style/redundant_conditional.rb +1 -1
  208. data/lib/rubocop/cop/style/redundant_exception.rb +3 -3
  209. data/lib/rubocop/cop/style/redundant_interpolation.rb +2 -2
  210. data/lib/rubocop/cop/style/redundant_parentheses.rb +2 -6
  211. data/lib/rubocop/cop/style/redundant_percent_q.rb +3 -3
  212. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +89 -0
  213. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +130 -0
  214. data/lib/rubocop/cop/style/redundant_return.rb +5 -7
  215. data/lib/rubocop/cop/style/redundant_self.rb +1 -1
  216. data/lib/rubocop/cop/style/redundant_sort.rb +2 -2
  217. data/lib/rubocop/cop/style/rescue_modifier.rb +1 -1
  218. data/lib/rubocop/cop/style/return_nil.rb +1 -1
  219. data/lib/rubocop/cop/style/safe_navigation.rb +3 -7
  220. data/lib/rubocop/cop/style/self_assignment.rb +1 -1
  221. data/lib/rubocop/cop/style/slicing_with_range.rb +39 -0
  222. data/lib/rubocop/cop/style/special_global_vars.rb +3 -7
  223. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -4
  224. data/lib/rubocop/cop/style/string_hash_keys.rb +1 -1
  225. data/lib/rubocop/cop/style/symbol_array.rb +2 -2
  226. data/lib/rubocop/cop/style/symbol_literal.rb +2 -2
  227. data/lib/rubocop/cop/style/ternary_parentheses.rb +2 -5
  228. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +35 -0
  229. data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +41 -0
  230. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +88 -0
  231. data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +44 -0
  232. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +1 -3
  233. data/lib/rubocop/cop/style/trivial_accessors.rb +1 -1
  234. data/lib/rubocop/cop/style/unless_else.rb +1 -1
  235. data/lib/rubocop/cop/style/unpack_first.rb +0 -4
  236. data/lib/rubocop/cop/style/variable_interpolation.rb +1 -1
  237. data/lib/rubocop/cop/style/when_then.rb +1 -1
  238. data/lib/rubocop/cop/style/while_until_modifier.rb +1 -1
  239. data/lib/rubocop/cop/style/word_array.rb +1 -1
  240. data/lib/rubocop/cop/style/zero_length_predicate.rb +1 -1
  241. data/lib/rubocop/cop/team.rb +61 -25
  242. data/lib/rubocop/cop/util.rb +25 -1
  243. data/lib/rubocop/cop/variable_force.rb +3 -9
  244. data/lib/rubocop/cop/variable_force/assignment.rb +1 -0
  245. data/lib/rubocop/cop/variable_force/branch.rb +1 -3
  246. data/lib/rubocop/cop/variable_force/scope.rb +1 -0
  247. data/lib/rubocop/cop/variable_force/variable.rb +3 -6
  248. data/lib/rubocop/ext/processed_source.rb +18 -0
  249. data/lib/rubocop/formatter/base_formatter.rb +0 -4
  250. data/lib/rubocop/formatter/clang_style_formatter.rb +1 -1
  251. data/lib/rubocop/formatter/disabled_config_formatter.rb +4 -12
  252. data/lib/rubocop/formatter/formatter_set.rb +1 -4
  253. data/lib/rubocop/formatter/junit_formatter.rb +27 -6
  254. data/lib/rubocop/formatter/pacman_formatter.rb +1 -1
  255. data/lib/rubocop/formatter/tap_formatter.rb +1 -1
  256. data/lib/rubocop/magic_comment.rb +1 -1
  257. data/lib/rubocop/name_similarity.rb +12 -9
  258. data/lib/rubocop/options.rb +33 -12
  259. data/lib/rubocop/remote_config.rb +1 -3
  260. data/lib/rubocop/result_cache.rb +5 -7
  261. data/lib/rubocop/rspec/cop_helper.rb +3 -26
  262. data/lib/rubocop/rspec/expect_offense.rb +46 -16
  263. data/lib/rubocop/rspec/shared_contexts.rb +54 -20
  264. data/lib/rubocop/runner.rb +21 -14
  265. data/lib/rubocop/target_finder.rb +7 -7
  266. data/lib/rubocop/target_ruby.rb +5 -2
  267. data/lib/rubocop/version.rb +5 -3
  268. metadata +50 -77
  269. data/lib/rubocop/ast/builder.rb +0 -83
  270. data/lib/rubocop/ast/node.rb +0 -632
  271. data/lib/rubocop/ast/node/alias_node.rb +0 -24
  272. data/lib/rubocop/ast/node/and_node.rb +0 -29
  273. data/lib/rubocop/ast/node/args_node.rb +0 -29
  274. data/lib/rubocop/ast/node/array_node.rb +0 -57
  275. data/lib/rubocop/ast/node/block_node.rb +0 -117
  276. data/lib/rubocop/ast/node/break_node.rb +0 -17
  277. data/lib/rubocop/ast/node/case_node.rb +0 -56
  278. data/lib/rubocop/ast/node/class_node.rb +0 -31
  279. data/lib/rubocop/ast/node/def_node.rb +0 -82
  280. data/lib/rubocop/ast/node/defined_node.rb +0 -17
  281. data/lib/rubocop/ast/node/ensure_node.rb +0 -17
  282. data/lib/rubocop/ast/node/float_node.rb +0 -12
  283. data/lib/rubocop/ast/node/for_node.rb +0 -53
  284. data/lib/rubocop/ast/node/forward_args_node.rb +0 -18
  285. data/lib/rubocop/ast/node/hash_node.rb +0 -109
  286. data/lib/rubocop/ast/node/if_node.rb +0 -175
  287. data/lib/rubocop/ast/node/int_node.rb +0 -12
  288. data/lib/rubocop/ast/node/keyword_splat_node.rb +0 -45
  289. data/lib/rubocop/ast/node/mixin/basic_literal_node.rb +0 -16
  290. data/lib/rubocop/ast/node/mixin/binary_operator_node.rb +0 -43
  291. data/lib/rubocop/ast/node/mixin/collection_node.rb +0 -15
  292. data/lib/rubocop/ast/node/mixin/conditional_node.rb +0 -45
  293. data/lib/rubocop/ast/node/mixin/hash_element_node.rb +0 -125
  294. data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +0 -261
  295. data/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +0 -114
  296. data/lib/rubocop/ast/node/mixin/modifier_node.rb +0 -17
  297. data/lib/rubocop/ast/node/mixin/numeric_node.rb +0 -21
  298. data/lib/rubocop/ast/node/mixin/parameterized_node.rb +0 -61
  299. data/lib/rubocop/ast/node/mixin/predicate_operator_node.rb +0 -35
  300. data/lib/rubocop/ast/node/module_node.rb +0 -24
  301. data/lib/rubocop/ast/node/or_node.rb +0 -29
  302. data/lib/rubocop/ast/node/pair_node.rb +0 -63
  303. data/lib/rubocop/ast/node/range_node.rb +0 -18
  304. data/lib/rubocop/ast/node/regexp_node.rb +0 -33
  305. data/lib/rubocop/ast/node/resbody_node.rb +0 -24
  306. data/lib/rubocop/ast/node/retry_node.rb +0 -17
  307. data/lib/rubocop/ast/node/return_node.rb +0 -24
  308. data/lib/rubocop/ast/node/self_class_node.rb +0 -24
  309. data/lib/rubocop/ast/node/send_node.rb +0 -13
  310. data/lib/rubocop/ast/node/str_node.rb +0 -16
  311. data/lib/rubocop/ast/node/super_node.rb +0 -21
  312. data/lib/rubocop/ast/node/symbol_node.rb +0 -12
  313. data/lib/rubocop/ast/node/until_node.rb +0 -35
  314. data/lib/rubocop/ast/node/when_node.rb +0 -53
  315. data/lib/rubocop/ast/node/while_node.rb +0 -35
  316. data/lib/rubocop/ast/node/yield_node.rb +0 -21
  317. data/lib/rubocop/ast/sexp.rb +0 -16
  318. data/lib/rubocop/ast/traversal.rb +0 -200
  319. data/lib/rubocop/cop/lint/end_in_method.rb +0 -40
  320. data/lib/rubocop/formatter/disabled_lines_formatter.rb +0 -57
  321. data/lib/rubocop/node_pattern.rb +0 -887
  322. data/lib/rubocop/processed_source.rb +0 -216
  323. data/lib/rubocop/string_util.rb +0 -14
  324. data/lib/rubocop/token.rb +0 -114
@@ -88,7 +88,7 @@ module RuboCop
88
88
  def apply_autocorrect(node, rhs, operator, new_rhs)
89
89
  lambda do |corrector|
90
90
  corrector.insert_before(node.loc.operator, operator)
91
- corrector.replace(rhs.source_range, new_rhs.source)
91
+ corrector.replace(rhs, new_rhs.source)
92
92
  end
93
93
  end
94
94
  end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Style
6
+ # This cop checks that arrays are sliced with endless ranges instead of
7
+ # `ary[start..-1]` on Ruby 2.6+.
8
+ #
9
+ # @example
10
+ # # bad
11
+ # items[1..-1]
12
+ #
13
+ # # good
14
+ # items[1..]
15
+ class SlicingWithRange < Cop
16
+ extend TargetRubyVersion
17
+
18
+ minimum_target_ruby_version 2.6
19
+
20
+ MSG = 'Prefer ary[n..] over ary[n..-1].'
21
+
22
+ def_node_matcher :range_till_minus_one?, '(irange !nil? (int -1))'
23
+
24
+ def on_send(node)
25
+ return unless node.method?(:[]) && node.arguments.count == 1
26
+ return unless range_till_minus_one?(node.arguments.first)
27
+
28
+ add_offense(node.arguments.first)
29
+ end
30
+
31
+ def autocorrect(node)
32
+ lambda do |corrector|
33
+ corrector.remove(node.end)
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -145,7 +145,7 @@ module RuboCop
145
145
  node = node.parent
146
146
  end
147
147
 
148
- corrector.replace(node.source_range, replacement(node, global_var))
148
+ corrector.replace(node, replacement(node, global_var))
149
149
  end
150
150
  end
151
151
 
@@ -181,13 +181,9 @@ module RuboCop
181
181
  parent_type = node.parent&.type
182
182
  preferred_name = preferred_names(global_var).first
183
183
 
184
- unless %i[dstr xstr regexp].include?(parent_type)
185
- return preferred_name.to_s
186
- end
184
+ return preferred_name.to_s unless %i[dstr xstr regexp].include?(parent_type)
187
185
 
188
- if style == :use_english_names
189
- return english_name_replacement(preferred_name, node)
190
- end
186
+ return english_name_replacement(preferred_name, node) if style == :use_english_names
191
187
 
192
188
  "##{preferred_name}"
193
189
  end
@@ -57,10 +57,7 @@ module RuboCop
57
57
 
58
58
  def missing_parentheses_corrector(node)
59
59
  lambda do |corrector|
60
- args_loc = node.loc.expression
61
-
62
- corrector.insert_before(args_loc, '(')
63
- corrector.insert_after(args_loc, ')')
60
+ corrector.wrap(node, '(', ')')
64
61
  end
65
62
  end
66
63
 
@@ -41,7 +41,7 @@ module RuboCop
41
41
  def autocorrect(node)
42
42
  lambda do |corrector|
43
43
  symbol_content = node.str_content.to_sym.inspect
44
- corrector.replace(node.source_range, symbol_content)
44
+ corrector.replace(node, symbol_content)
45
45
  end
46
46
  end
47
47
  end
@@ -81,7 +81,7 @@ module RuboCop
81
81
  end
82
82
 
83
83
  lambda do |corrector|
84
- corrector.replace(node.source_range, "[#{syms.join(', ')}]")
84
+ corrector.replace(node, "[#{syms.join(', ')}]")
85
85
  end
86
86
  end
87
87
 
@@ -106,7 +106,7 @@ module RuboCop
106
106
  # method name
107
107
  string =~ /\A[a-zA-Z_]\w*[!?]?\z/ ||
108
108
  # instance / class variable
109
- string =~ /\A\@\@?[a-zA-Z_]\w*\z/ ||
109
+ string =~ /\A@@?[a-zA-Z_]\w*\z/ ||
110
110
  # global variable
111
111
  string =~ /\A\$[1-9]\d*\z/ ||
112
112
  string =~ /\A\$[a-zA-Z_]\w*\z/ ||
@@ -16,14 +16,14 @@ module RuboCop
16
16
  MSG = 'Do not use strings for word-like symbol literals.'
17
17
 
18
18
  def on_sym(node)
19
- return unless node.source =~ /\A:["'][A-Za-z_]\w*["']\z/
19
+ return unless /\A:["'][A-Za-z_]\w*["']\z/.match?(node.source)
20
20
 
21
21
  add_offense(node)
22
22
  end
23
23
 
24
24
  def autocorrect(node)
25
25
  lambda do |corrector|
26
- corrector.replace(node.source_range, node.source.delete(%q('")))
26
+ corrector.replace(node, node.source.delete(%q('")))
27
27
  end
28
28
  end
29
29
  end
@@ -199,16 +199,13 @@ module RuboCop
199
199
  # Ruby allows no space between the question mark and parentheses.
200
200
  # If we remove the parentheses, we need to add a space or we'll
201
201
  # generate invalid code.
202
- unless whitespace_after?(condition)
203
- corrector.insert_after(condition.loc.end, ' ')
204
- end
202
+ corrector.insert_after(condition.loc.end, ' ') unless whitespace_after?(condition)
205
203
  end
206
204
  end
207
205
 
208
206
  def correct_unparenthesized(condition)
209
207
  lambda do |corrector|
210
- corrector.insert_before(condition.source_range, '(')
211
- corrector.insert_after(condition.source_range, ')')
208
+ corrector.wrap(condition, '(', ')')
212
209
  end
213
210
  end
214
211
 
@@ -4,6 +4,14 @@ module RuboCop
4
4
  module Cop
5
5
  module Style
6
6
  # This cop checks for trailing comma in argument lists.
7
+ # The supported styles are:
8
+ #
9
+ # * `consistent_comma`: Requires a comma after the last argument,
10
+ # for all parenthesized method calls with arguments.
11
+ # * `comma`: Requires a comma after the last argument, but only for
12
+ # parenthesized method calls where each argument is on its own line.
13
+ # * `no_comma`: Requires that there is no comma after the last
14
+ # argument.
7
15
  #
8
16
  # @example EnforcedStyleForMultiline: consistent_comma
9
17
  # # bad
@@ -20,6 +28,11 @@ module RuboCop
20
28
  #
21
29
  # # good
22
30
  # method(
31
+ # 1, 2, 3,
32
+ # )
33
+ #
34
+ # # good
35
+ # method(
23
36
  # 1,
24
37
  # 2,
25
38
  # )
@@ -31,6 +44,28 @@ module RuboCop
31
44
  # # good
32
45
  # method(1, 2)
33
46
  #
47
+ # # bad
48
+ # method(
49
+ # 1, 2,
50
+ # 3,
51
+ # )
52
+ #
53
+ # # good
54
+ # method(
55
+ # 1, 2,
56
+ # 3
57
+ # )
58
+ #
59
+ # # bad
60
+ # method(
61
+ # 1, 2, 3,
62
+ # )
63
+ #
64
+ # # good
65
+ # method(
66
+ # 1, 2, 3
67
+ # )
68
+ #
34
69
  # # good
35
70
  # method(
36
71
  # 1,
@@ -4,12 +4,23 @@ module RuboCop
4
4
  module Cop
5
5
  module Style
6
6
  # This cop checks for trailing comma in array literals.
7
+ # The configuration options are:
8
+ #
9
+ # * `consistent_comma`: Requires a comma after the
10
+ # last item of all non-empty, multiline array literals.
11
+ # * `comma`: Requires a comma after last item in an array,
12
+ # but only when each item is on its own line.
13
+ # * `no_comma`: Does not requires a comma after the
14
+ # last item in an array
7
15
  #
8
16
  # @example EnforcedStyleForMultiline: consistent_comma
9
17
  # # bad
10
18
  # a = [1, 2,]
11
19
  #
12
20
  # # good
21
+ # a = [1, 2]
22
+ #
23
+ # # good
13
24
  # a = [
14
25
  # 1, 2,
15
26
  # 3,
@@ -17,6 +28,11 @@ module RuboCop
17
28
  #
18
29
  # # good
19
30
  # a = [
31
+ # 1, 2, 3,
32
+ # ]
33
+ #
34
+ # # good
35
+ # a = [
20
36
  # 1,
21
37
  # 2,
22
38
  # ]
@@ -26,6 +42,31 @@ module RuboCop
26
42
  # a = [1, 2,]
27
43
  #
28
44
  # # good
45
+ # a = [1, 2]
46
+ #
47
+ # # bad
48
+ # a = [
49
+ # 1, 2,
50
+ # 3,
51
+ # ]
52
+ #
53
+ # # good
54
+ # a = [
55
+ # 1, 2,
56
+ # 3
57
+ # ]
58
+ #
59
+ # # bad
60
+ # a = [
61
+ # 1, 2, 3,
62
+ # ]
63
+ #
64
+ # # good
65
+ # a = [
66
+ # 1, 2, 3
67
+ # ]
68
+ #
69
+ # # good
29
70
  # a = [
30
71
  # 1,
31
72
  # 2,
@@ -0,0 +1,88 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Style
6
+ # This cop checks whether trailing commas in block arguments are
7
+ # required. Blocks with only one argument and a trailing comma require
8
+ # that comma to be present. Blocks with more than one argument never
9
+ # require a trailing comma.
10
+ #
11
+ # @example
12
+ # # bad
13
+ # add { |foo, bar,| foo + bar }
14
+ #
15
+ # # good
16
+ # add { |foo, bar| foo + bar }
17
+ #
18
+ # # good
19
+ # add { |foo,| foo }
20
+ #
21
+ # # good
22
+ # add { foo }
23
+ #
24
+ # # bad
25
+ # add do |foo, bar,|
26
+ # foo + bar
27
+ # end
28
+ #
29
+ # # good
30
+ # add do |foo, bar|
31
+ # foo + bar
32
+ # end
33
+ #
34
+ # # good
35
+ # add do |foo,|
36
+ # foo
37
+ # end
38
+ #
39
+ # # good
40
+ # add do
41
+ # foo + bar
42
+ # end
43
+ class TrailingCommaInBlockArgs < Cop
44
+ MSG = 'Useless trailing comma present in block arguments.'
45
+
46
+ def on_block(node)
47
+ # lambda literal (`->`) never has block arguments.
48
+ return if node.send_node.lambda_literal?
49
+
50
+ return unless useless_trailing_comma?(node)
51
+
52
+ add_offense(node, location: last_comma(node).pos)
53
+ end
54
+
55
+ def autocorrect(node)
56
+ ->(corrector) { corrector.replace(last_comma(node).pos, '') }
57
+ end
58
+
59
+ private
60
+
61
+ def useless_trailing_comma?(node)
62
+ arg_count(node) > 1 && trailing_comma?(node)
63
+ end
64
+
65
+ def arg_count(node)
66
+ node.arguments.each_descendant(:arg, :optarg, :kwoptarg).to_a.size
67
+ end
68
+
69
+ def trailing_comma?(node)
70
+ argument_tokens(node).last.comma?
71
+ end
72
+
73
+ def last_comma(node)
74
+ argument_tokens(node).last
75
+ end
76
+
77
+ def argument_tokens(node)
78
+ pipes = tokens(node).select { |token| token.type == :tPIPE }
79
+ begin_pos, end_pos = pipes.map do |pipe|
80
+ tokens(node).index(pipe)
81
+ end
82
+
83
+ tokens(node)[begin_pos + 1..end_pos - 1]
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
@@ -4,12 +4,24 @@ module RuboCop
4
4
  module Cop
5
5
  module Style
6
6
  # This cop checks for trailing comma in hash literals.
7
+ # The configuration options are:
8
+ #
9
+ # * `consistent_comma`: Requires a comma after the
10
+ # last item of all non-empty, multiline hash literals.
11
+ # * `comma`: Requires a comma after the last item in a hash,
12
+ # but only when each item is on its own line.
13
+ # * `no_comma`: Does not requires a comma after the
14
+ # last item in a hash
7
15
  #
8
16
  # @example EnforcedStyleForMultiline: consistent_comma
17
+ #
9
18
  # # bad
10
19
  # a = { foo: 1, bar: 2, }
11
20
  #
12
21
  # # good
22
+ # a = { foo: 1, bar: 2 }
23
+ #
24
+ # # good
13
25
  # a = {
14
26
  # foo: 1, bar: 2,
15
27
  # qux: 3,
@@ -17,21 +29,53 @@ module RuboCop
17
29
  #
18
30
  # # good
19
31
  # a = {
32
+ # foo: 1, bar: 2, qux: 3,
33
+ # }
34
+ #
35
+ # # good
36
+ # a = {
20
37
  # foo: 1,
21
38
  # bar: 2,
22
39
  # }
23
40
  #
24
41
  # @example EnforcedStyleForMultiline: comma
42
+ #
25
43
  # # bad
26
44
  # a = { foo: 1, bar: 2, }
27
45
  #
28
46
  # # good
47
+ # a = { foo: 1, bar: 2 }
48
+ #
49
+ # # bad
50
+ # a = {
51
+ # foo: 1, bar: 2,
52
+ # qux: 3,
53
+ # }
54
+ #
55
+ # # good
56
+ # a = {
57
+ # foo: 1, bar: 2,
58
+ # qux: 3
59
+ # }
60
+ #
61
+ # # bad
62
+ # a = {
63
+ # foo: 1, bar: 2, qux: 3,
64
+ # }
65
+ #
66
+ # # good
67
+ # a = {
68
+ # foo: 1, bar: 2, qux: 3
69
+ # }
70
+ #
71
+ # # good
29
72
  # a = {
30
73
  # foo: 1,
31
74
  # bar: 2,
32
75
  # }
33
76
  #
34
77
  # @example EnforcedStyleForMultiline: no_comma (default)
78
+ #
35
79
  # # bad
36
80
  # a = { foo: 1, bar: 2, }
37
81
  #
@@ -126,9 +126,7 @@ module RuboCop
126
126
  return unused_range(node.type, mlhs_node, right)
127
127
  end
128
128
 
129
- if Util.parentheses?(mlhs_node)
130
- return range_for_parentheses(first_offense, mlhs_node)
131
- end
129
+ return range_for_parentheses(first_offense, mlhs_node) if Util.parentheses?(mlhs_node)
132
130
 
133
131
  range_between(first_offense.source_range.begin_pos,
134
132
  node.loc.operator.begin_pos)