rubocop 0.80.1 → 0.85.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -39,7 +39,7 @@ module RuboCop
39
39
  def meaningful_delimiters?(node)
40
40
  delimiters = delimiter_string(node)
41
41
 
42
- return false unless delimiters =~ /\w/
42
+ return false unless /\w/.match?(delimiters)
43
43
 
44
44
  forbidden_delimiters.none? do |forbidden_delimiter|
45
45
  delimiters =~ Regexp.new(forbidden_delimiter)
@@ -31,9 +31,24 @@ module RuboCop
31
31
  class MethodName < Cop
32
32
  include ConfigurableNaming
33
33
  include IgnoredPattern
34
+ include RangeHelp
34
35
 
35
36
  MSG = 'Use %<style>s for method names.'
36
37
 
38
+ def_node_matcher :sym_name, '(sym $_name)'
39
+ def_node_matcher :str_name, '(str $_name)'
40
+
41
+ def on_send(node)
42
+ return unless (attrs = node.attribute_accessor?)
43
+
44
+ attrs.last.each do |name_item|
45
+ name = attr_name(name_item)
46
+ next if !name || matches_ignored_pattern?(name)
47
+
48
+ check_name(node, name, range_position(node))
49
+ end
50
+ end
51
+
37
52
  def on_def(node)
38
53
  return if node.operator_method? ||
39
54
  matches_ignored_pattern?(node.method_name)
@@ -44,6 +59,17 @@ module RuboCop
44
59
 
45
60
  private
46
61
 
62
+ def attr_name(name_item)
63
+ sym_name(name_item) || str_name(name_item)
64
+ end
65
+
66
+ def range_position(node)
67
+ selector_end_pos = node.loc.selector.end_pos + 1
68
+ expr_end_pos = node.loc.expression.end_pos
69
+
70
+ range_between(selector_end_pos, expr_end_pos)
71
+ end
72
+
47
73
  def message(style)
48
74
  format(MSG, style: style)
49
75
  end
@@ -67,7 +67,7 @@ module RuboCop
67
67
  private
68
68
 
69
69
  def allowed_method_name?(method_name, prefix)
70
- !method_name.match(/^#{prefix}[^0-9]/) ||
70
+ !method_name.match?(/^#{prefix}[^0-9]/) ||
71
71
  method_name == expected_name(method_name, prefix) ||
72
72
  method_name.end_with?('=') ||
73
73
  allowed_methods.include?(method_name)
@@ -73,7 +73,7 @@ module RuboCop
73
73
  node.body&.each_descendant(:lvar) do |var|
74
74
  next unless var.children.first == offending_name
75
75
 
76
- corrector.replace(var.loc.expression, preferred_name)
76
+ corrector.replace(var, preferred_name)
77
77
  end
78
78
  end
79
79
  end
@@ -22,12 +22,13 @@ module RuboCop
22
22
 
23
23
  # Registry that tracks all cops by their badge and department.
24
24
  class Registry
25
- def initialize(cops = [])
25
+ def initialize(cops = [], options = {})
26
26
  @registry = {}
27
27
  @departments = {}
28
28
  @cops_by_cop_name = Hash.new { |hash, key| hash[key] = [] }
29
29
 
30
30
  cops.each { |cop| enlist(cop) }
31
+ @options = options
31
32
  end
32
33
 
33
34
  def enlist(cop)
@@ -93,9 +94,7 @@ module RuboCop
93
94
  # @return [String] Qualified cop name
94
95
  def qualified_cop_name(name, path, shall_warn = true)
95
96
  badge = Badge.parse(name)
96
- if shall_warn && department_missing?(badge, name)
97
- print_warning(name, path)
98
- end
97
+ print_warning(name, path) if shall_warn && department_missing?(badge, name)
99
98
  return name if registered?(badge)
100
99
 
101
100
  potential_badges = qualify_badge(badge)
@@ -147,9 +146,8 @@ module RuboCop
147
146
  def enabled?(cop, config, only_safe)
148
147
  cfg = config.for_cop(cop)
149
148
 
150
- # cfg['Enabled'] might be a string `pending`, which is considered
151
- # disabled
152
- cop_enabled = cfg.fetch('Enabled') == true
149
+ cop_enabled = cfg.fetch('Enabled') == true ||
150
+ enabled_pending_cop?(cfg, config)
153
151
 
154
152
  if only_safe
155
153
  cop_enabled && cfg.fetch('Safe', true)
@@ -158,6 +156,13 @@ module RuboCop
158
156
  end
159
157
  end
160
158
 
159
+ def enabled_pending_cop?(cop_cfg, config)
160
+ return false if @options[:disable_pending_cops]
161
+
162
+ cop_cfg.fetch('Enabled') == 'pending' &&
163
+ (@options[:enable_pending_cops] || config.enabled_new_cops?)
164
+ end
165
+
161
166
  def names
162
167
  cops.map(&:cop_name)
163
168
  end
@@ -31,9 +31,7 @@ module RuboCop
31
31
  # @api private
32
32
  def initialize(name_or_code)
33
33
  name = Severity.name_from_code(name_or_code)
34
- unless NAMES.include?(name)
35
- raise ArgumentError, "Unknown severity: #{name}"
36
- end
34
+ raise ArgumentError, "Unknown severity: #{name}" unless NAMES.include?(name)
37
35
 
38
36
  @name = name.freeze
39
37
  freeze
@@ -5,11 +5,12 @@ module RuboCop
5
5
  module Style
6
6
  # Access modifiers should be declared to apply to a group of methods
7
7
  # or inline before each method, depending on configuration.
8
+ # EnforcedStyle config covers only method definitions.
9
+ # Applications of visibility methods to symbols can be controlled
10
+ # using AllowModifiersOnSymbols config.
8
11
  #
9
12
  # @example EnforcedStyle: group (default)
10
- #
11
13
  # # bad
12
- #
13
14
  # class Foo
14
15
  #
15
16
  # private def bar; end
@@ -18,7 +19,6 @@ module RuboCop
18
19
  # end
19
20
  #
20
21
  # # good
21
- #
22
22
  # class Foo
23
23
  #
24
24
  # private
@@ -27,10 +27,9 @@ module RuboCop
27
27
  # def baz; end
28
28
  #
29
29
  # end
30
- # @example EnforcedStyle: inline
31
30
  #
31
+ # @example EnforcedStyle: inline
32
32
  # # bad
33
- #
34
33
  # class Foo
35
34
  #
36
35
  # private
@@ -41,13 +40,28 @@ module RuboCop
41
40
  # end
42
41
  #
43
42
  # # good
44
- #
45
43
  # class Foo
46
44
  #
47
45
  # private def bar; end
48
46
  # private def baz; end
49
47
  #
50
48
  # end
49
+ #
50
+ # @example AllowModifiersOnSymbols: true
51
+ # # good
52
+ # class Foo
53
+ #
54
+ # private :bar, :baz
55
+ #
56
+ # end
57
+ #
58
+ # @example AllowModifiersOnSymbols: false
59
+ # # bad
60
+ # class Foo
61
+ #
62
+ # private :bar, :baz
63
+ #
64
+ # end
51
65
  class AccessModifierDeclarations < Cop
52
66
  include ConfigurableEnforcedStyle
53
67
 
@@ -61,9 +75,15 @@ module RuboCop
61
75
  'inlined in method definitions.'
62
76
  ].join(' ')
63
77
 
78
+ def_node_matcher :access_modifier_with_symbol?, <<~PATTERN
79
+ (send nil? {:private :protected :public} (sym _))
80
+ PATTERN
81
+
64
82
  def on_send(node)
65
83
  return unless node.access_modifier?
66
84
  return if node.parent.pair_type?
85
+ return if cop_config['AllowModifiersOnSymbols'] &&
86
+ access_modifier_with_symbol?(node)
67
87
 
68
88
  if offense?(node)
69
89
  add_offense(node, location: :selector) do
@@ -115,7 +115,7 @@ module RuboCop
115
115
  lambda do |corrector|
116
116
  new, old = *send_node.arguments
117
117
  replacement = "alias #{identifier(new)} #{identifier(old)}"
118
- corrector.replace(send_node.source_range, replacement)
118
+ corrector.replace(send_node, replacement)
119
119
  end
120
120
  end
121
121
 
@@ -125,15 +125,15 @@ module RuboCop
125
125
  'alias_method ' \
126
126
  ":#{identifier(node.new_identifier)}, " \
127
127
  ":#{identifier(node.old_identifier)}"
128
- corrector.replace(node.source_range, replacement)
128
+ corrector.replace(node, replacement)
129
129
  end
130
130
  end
131
131
 
132
132
  def correct_alias_with_symbol_args(node)
133
133
  lambda do |corrector|
134
- corrector.replace(node.new_identifier.source_range,
134
+ corrector.replace(node.new_identifier,
135
135
  node.new_identifier.source[1..-1])
136
- corrector.replace(node.old_identifier.source_range,
136
+ corrector.replace(node.old_identifier,
137
137
  node.old_identifier.source[1..-1])
138
138
  end
139
139
  end
@@ -7,7 +7,7 @@ module RuboCop
7
7
  # `||` instead. It can be configured to check only in conditions or in
8
8
  # all contexts.
9
9
  #
10
- # @example EnforcedStyle: always (default)
10
+ # @example EnforcedStyle: always
11
11
  # # bad
12
12
  # foo.save and return
13
13
  #
@@ -22,7 +22,7 @@ module RuboCop
22
22
  # if foo && bar
23
23
  # end
24
24
  #
25
- # @example EnforcedStyle: conditionals
25
+ # @example EnforcedStyle: conditionals (default)
26
26
  # # bad
27
27
  # if foo and bar
28
28
  # end
@@ -97,12 +97,12 @@ module RuboCop
97
97
  return unless correctable_send?(node)
98
98
 
99
99
  corrector.replace(whitespace_before_arg(node), '(')
100
- corrector.insert_after(node.last_argument.source_range, ')')
100
+ corrector.insert_after(node.last_argument, ')')
101
101
  end
102
102
 
103
103
  def correct_setter(node, corrector)
104
- corrector.insert_before(node.receiver.source_range, '(')
105
- corrector.insert_after(node.last_argument.source_range, ')')
104
+ corrector.insert_before(node.receiver, '(')
105
+ corrector.insert_after(node.last_argument, ')')
106
106
  end
107
107
 
108
108
  # ! is a special case:
@@ -124,8 +124,7 @@ module RuboCop
124
124
  def correct_other(node, corrector)
125
125
  return if node.source_range.begin.is?('(')
126
126
 
127
- corrector.insert_before(node.source_range, '(')
128
- corrector.insert_after(node.source_range, ')')
127
+ corrector.wrap(node, '(', ')')
129
128
  end
130
129
 
131
130
  def correctable_send?(node)
@@ -137,7 +136,7 @@ module RuboCop
137
136
  end_paren = begin_paren
138
137
  # Increment position of parenthesis, unless message is a predicate
139
138
  # method followed by a non-whitespace char (e.g. is_a?String).
140
- end_paren += 1 unless node.source =~ /\?\S/
139
+ end_paren += 1 unless /\?\S/.match?(node.source)
141
140
  range_between(begin_paren, end_paren)
142
141
  end
143
142
  end
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop checks for uses of "\*" as a substitute for *join*.
6
+ # This cop checks for uses of "*" as a substitute for _join_.
7
7
  #
8
8
  # Not all cases can reliably checked, due to Ruby's dynamic
9
9
  # types, so we consider only cases when the first argument is an
@@ -30,7 +30,7 @@ module RuboCop
30
30
  array, join_arg = join_candidate?(node).map(&:source)
31
31
 
32
32
  lambda do |corrector|
33
- corrector.replace(node.source_range, "#{array}.join(#{join_arg})")
33
+ corrector.replace(node, "#{array}.join(#{join_arg})")
34
34
  end
35
35
  end
36
36
  end
@@ -35,9 +35,7 @@ module RuboCop
35
35
  node_expr = node.source_range
36
36
  attr_expr = attr_name.source_range
37
37
 
38
- if setter&.boolean_type?
39
- remove = range_between(attr_expr.end_pos, node_expr.end_pos)
40
- end
38
+ remove = range_between(attr_expr.end_pos, node_expr.end_pos) if setter&.boolean_type?
41
39
 
42
40
  lambda do |corrector|
43
41
  corrector.replace(node.loc.selector, replacement_method(node))
@@ -64,7 +64,7 @@ module RuboCop
64
64
  end
65
65
 
66
66
  def requires_bare_percent?(source)
67
- style == :bare_percent && source =~ /^%Q/
67
+ style == :bare_percent && source.start_with?('%Q')
68
68
  end
69
69
 
70
70
  def add_offense_for_wrong_style(node, good, bad)
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # rubocop:disable Metrics/ClassLength
4
3
  module RuboCop
5
4
  module Cop
6
5
  module Style
@@ -210,9 +209,7 @@ module RuboCop
210
209
  end
211
210
 
212
211
  def message(node)
213
- if braces_required_method?(node.method_name)
214
- return braces_required_message(node)
215
- end
212
+ return braces_required_message(node) if braces_required_method?(node.method_name)
216
213
 
217
214
  case style
218
215
  when :line_count_based then line_count_based_message(node)
@@ -276,9 +273,7 @@ module RuboCop
276
273
  # rubocop:enable Metrics/CyclomaticComplexity
277
274
 
278
275
  def proper_block_style?(node)
279
- if special_method?(node.method_name)
280
- return special_method_proper_block_style?(node)
281
- end
276
+ return special_method_proper_block_style?(node) if special_method?(node.method_name)
282
277
 
283
278
  case style
284
279
  when :line_count_based then line_count_based_block_style?(node)
@@ -387,4 +382,3 @@ module RuboCop
387
382
  end
388
383
  end
389
384
  end
390
- # rubocop:enable Metrics/ClassLength
@@ -16,14 +16,37 @@ module RuboCop
16
16
  # (1..100).include?(7)
17
17
  # some_string =~ /something/
18
18
  #
19
+ # @example AllowOnConstant
20
+ # # Style/CaseEquality:
21
+ # # AllowOnConstant: true
22
+ #
23
+ # # bad
24
+ # (1..100) === 7
25
+ # /something/ === some_string
26
+ #
27
+ # # good
28
+ # Array === something
29
+ # (1..100).include?(7)
30
+ # some_string =~ /something/
31
+ #
19
32
  class CaseEquality < Cop
20
33
  MSG = 'Avoid the use of the case equality operator `===`.'
21
34
 
22
- def_node_matcher :case_equality?, '(send _ :=== _)'
35
+ def_node_matcher :case_equality?, '(send #const? :=== _)'
23
36
 
24
37
  def on_send(node)
25
38
  case_equality?(node) { add_offense(node, location: :selector) }
26
39
  end
40
+
41
+ private
42
+
43
+ def const?(node)
44
+ if cop_config.fetch('AllowOnConstant', false)
45
+ !node&.const_type?
46
+ else
47
+ true
48
+ end
49
+ end
27
50
  end
28
51
  end
29
52
  end
@@ -33,9 +33,9 @@ module RuboCop
33
33
  # special character like \n
34
34
  # or ' which needs to use "" or be escaped.
35
35
  if string.length == 2 || string == "'"
36
- corrector.replace(node.source_range, %("#{string}"))
36
+ corrector.replace(node, %("#{string}"))
37
37
  elsif string.length == 1 # normal character
38
- corrector.replace(node.source_range, "'#{string}'")
38
+ corrector.replace(node, "'#{string}'")
39
39
  end
40
40
  end
41
41
  end
@@ -27,6 +27,7 @@ module RuboCop
27
27
  # items.inject
28
28
  # items.detect
29
29
  # items.find_all
30
+ # items.member?
30
31
  #
31
32
  # # good
32
33
  # items.map
@@ -34,6 +35,7 @@ module RuboCop
34
35
  # items.reduce
35
36
  # items.find
36
37
  # items.select
38
+ # items.include?
37
39
  #
38
40
  class CollectionMethods < Cop
39
41
  include MethodPreference
@@ -312,9 +312,7 @@ module RuboCop
312
312
  # ignore pseudo-assignments without rhs in for nodes
313
313
  return if node.parent&.for_type?
314
314
 
315
- if assignment.begin_type? && assignment.children.one?
316
- assignment, = *assignment
317
- end
315
+ assignment, = *assignment if assignment.begin_type? && assignment.children.one?
318
316
 
319
317
  assignment
320
318
  end
@@ -458,7 +456,7 @@ module RuboCop
458
456
  def correct_if_branches(corrector, cop, node)
459
457
  if_branch, elsif_branches, else_branch = extract_tail_branches(node)
460
458
 
461
- corrector.insert_before(node.source_range, lhs(if_branch))
459
+ corrector.insert_before(node, lhs(if_branch))
462
460
  replace_branch_assignment(corrector, if_branch)
463
461
  correct_branches(corrector, elsif_branches)
464
462
  replace_branch_assignment(corrector, else_branch)
@@ -475,13 +473,13 @@ module RuboCop
475
473
  source
476
474
  end
477
475
 
478
- corrector.replace(branch.source_range, replacement)
476
+ corrector.replace(branch, replacement)
479
477
  end
480
478
 
481
479
  def correct_branches(corrector, branches)
482
480
  branches.each do |branch|
483
481
  *_, assignment = *branch
484
- corrector.replace(branch.source_range, assignment.source)
482
+ corrector.replace(branch, assignment.source)
485
483
  end
486
484
  end
487
485
  end
@@ -494,7 +492,7 @@ module RuboCop
494
492
 
495
493
  def correct(node)
496
494
  lambda do |corrector|
497
- corrector.replace(node.source_range, correction(node))
495
+ corrector.replace(node, correction(node))
498
496
  end
499
497
  end
500
498
 
@@ -547,7 +545,7 @@ module RuboCop
547
545
  end
548
546
 
549
547
  def move_branch_inside_condition(corrector, branch, assignment)
550
- corrector.insert_before(branch.loc.expression, assignment.source)
548
+ corrector.insert_before(branch, assignment.source)
551
549
  end
552
550
  end
553
551
  end
@@ -589,7 +587,7 @@ module RuboCop
589
587
  def move_branch_inside_condition(corrector, branch, condition,
590
588
  assignment, column)
591
589
  branch_assignment = tail(branch)
592
- corrector.insert_before(branch_assignment.loc.expression,
590
+ corrector.insert_before(branch_assignment,
593
591
  assignment.source)
594
592
 
595
593
  remove_whitespace_in_branches(corrector, branch, condition, column)
@@ -611,7 +609,7 @@ module RuboCop
611
609
  when_branches, else_branch = extract_tail_branches(node)
612
610
 
613
611
  lambda do |corrector|
614
- corrector.insert_before(node.source_range, lhs(else_branch))
612
+ corrector.insert_before(node, lhs(else_branch))
615
613
  correct_branches(corrector, when_branches)
616
614
  replace_branch_assignment(corrector, else_branch)
617
615
 
@@ -652,7 +650,7 @@ module RuboCop
652
650
  def move_branch_inside_condition(corrector, branch, condition,
653
651
  assignment, column)
654
652
  branch_assignment = tail(branch)
655
- corrector.insert_before(branch_assignment.loc.expression,
653
+ corrector.insert_before(branch_assignment,
656
654
  assignment.source)
657
655
 
658
656
  remove_whitespace_in_branches(corrector, branch, condition, column)