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
@@ -26,7 +26,6 @@ module RuboCop
26
26
  # # good
27
27
  # x += 1
28
28
  class RedundantCopDisableDirective < Cop
29
- include NameSimilarity
30
29
  include RangeHelp
31
30
 
32
31
  COP_NAME = 'Lint/RedundantCopDisableDirective'
@@ -235,7 +234,7 @@ module RuboCop
235
234
  elsif all_cop_names.include?(cop)
236
235
  "`#{cop}`"
237
236
  else
238
- similar = find_similar_name(cop, [])
237
+ similar = NameSimilarity.find_similar_name(cop, all_cop_names)
239
238
  if similar
240
239
  "`#{cop}` (did you mean `#{similar}`?)"
241
240
  else
@@ -244,10 +243,6 @@ module RuboCop
244
243
  end
245
244
  end
246
245
 
247
- def collect_variable_like_names(scope)
248
- all_cop_names.each { |name| scope << name }
249
- end
250
-
251
246
  def all_cop_names
252
247
  @all_cop_names ||= Cop.registry.names
253
248
  end
@@ -8,9 +8,9 @@ module RuboCop
8
8
  # The following features are unnecessary `require` statement because
9
9
  # they are already loaded.
10
10
  #
11
- # ruby -ve 'p $LOADED_FEATURES.reject { |feature| %r|/| =~ feature }'
12
- # ruby 2.2.8p477 (2017-09-14 revision 59906) [x86_64-darwin13]
13
- # ["enumerator.so", "rational.so", "complex.so", "thread.rb"]
11
+ # ruby -ve 'p $LOADED_FEATURES.reject { |feature| %r|/| =~ feature }'
12
+ # ruby 2.2.8p477 (2017-09-14 revision 59906) [x86_64-darwin13]
13
+ # ["enumerator.so", "rational.so", "complex.so", "thread.rb"]
14
14
  #
15
15
  # This cop targets Ruby 2.2 or higher containing these 4 features.
16
16
  #
@@ -38,7 +38,7 @@ module RuboCop
38
38
  lambda do |corrector|
39
39
  receiver = node.receiver
40
40
  corrector.replace(
41
- node.source_range,
41
+ node,
42
42
  if receiver
43
43
  receiver.source
44
44
  else
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Lint
6
- # This cop checks for *rescue* blocks targeting the Exception class.
6
+ # This cop checks for `rescue` blocks targeting the Exception class.
7
7
  #
8
8
  # @example
9
9
  #
@@ -32,7 +32,7 @@ module RuboCop
32
32
  def_node_matcher :bad_method?, <<~PATTERN
33
33
  {
34
34
  (send $(csend ...) $_ ...)
35
- (send $(block (csend ...) ...) $_ ...)
35
+ (send $({block numblock} (csend ...) ...) $_ ...)
36
36
  }
37
37
  PATTERN
38
38
 
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Lint
6
+ # This cop checks unexpected overrides of the `Struct` built-in methods
7
+ # via `Struct.new`.
8
+ #
9
+ # @example
10
+ # # bad
11
+ # Bad = Struct.new(:members, :clone, :count)
12
+ # b = Bad.new([], true, 1)
13
+ # b.members #=> [] (overriding `Struct#members`)
14
+ # b.clone #=> true (overriding `Object#clone`)
15
+ # b.count #=> 1 (overriding `Enumerable#count`)
16
+ #
17
+ # # good
18
+ # Good = Struct.new(:id, :name)
19
+ # g = Good.new(1, "foo")
20
+ # g.members #=> [:id, :name]
21
+ # g.clone #=> #<struct Good id=1, name="foo">
22
+ # g.count #=> 2
23
+ #
24
+ class StructNewOverride < Cop
25
+ MSG = '`%<member_name>s` member overrides `Struct#%<method_name>s`' \
26
+ ' and it may be unexpected.'
27
+
28
+ STRUCT_METHOD_NAMES = Struct.instance_methods
29
+ STRUCT_MEMBER_NAME_TYPES = %i[sym str].freeze
30
+
31
+ def_node_matcher :struct_new, <<~PATTERN
32
+ (send
33
+ (const ${nil? cbase} :Struct) :new ...)
34
+ PATTERN
35
+
36
+ def on_send(node)
37
+ return unless struct_new(node) do
38
+ node.arguments.each_with_index do |arg, index|
39
+ # Ignore if the first argument is a class name
40
+ next if index.zero? && arg.str_type?
41
+
42
+ # Ignore if the argument is not a member name
43
+ next unless STRUCT_MEMBER_NAME_TYPES.include?(arg.type)
44
+
45
+ member_name = arg.value
46
+
47
+ next unless STRUCT_METHOD_NAMES.include?(member_name.to_sym)
48
+
49
+ message = format(MSG, member_name: member_name.inspect,
50
+ method_name: member_name.to_s)
51
+ add_offense(arg, message: message)
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -3,9 +3,9 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Lint
6
- # This cop checks for *rescue* blocks with no body.
6
+ # This cop checks for `rescue` blocks with no body.
7
7
  #
8
- # @example AllowComments: false (default)
8
+ # @example
9
9
  #
10
10
  # # bad
11
11
  # def some_method
@@ -14,25 +14,11 @@ module RuboCop
14
14
  # end
15
15
  #
16
16
  # # bad
17
- # def some_method
18
- # do_something
19
- # rescue
20
- # # do nothing
21
- # end
22
- #
23
- # # bad
24
17
  # begin
25
18
  # do_something
26
19
  # rescue
27
20
  # end
28
21
  #
29
- # # bad
30
- # begin
31
- # do_something
32
- # rescue
33
- # # do nothing
34
- # end
35
- #
36
22
  # # good
37
23
  # def some_method
38
24
  # do_something
@@ -47,47 +33,58 @@ module RuboCop
47
33
  # handle_exception
48
34
  # end
49
35
  #
50
- # @example AllowComments: true
36
+ # @example AllowComments: true (default)
51
37
  #
52
- # # bad
38
+ # # good
53
39
  # def some_method
54
40
  # do_something
55
41
  # rescue
42
+ # # do nothing
56
43
  # end
57
44
  #
58
- # # bad
45
+ # # good
59
46
  # begin
60
47
  # do_something
61
48
  # rescue
49
+ # # do nothing
62
50
  # end
63
51
  #
64
- # # good
52
+ # @example AllowComments: false
53
+ #
54
+ # # bad
65
55
  # def some_method
66
56
  # do_something
67
57
  # rescue
68
- # # do nothing but comment
58
+ # # do nothing
69
59
  # end
70
60
  #
71
- # # good
61
+ # # bad
72
62
  # begin
73
63
  # do_something
74
64
  # rescue
75
- # # do nothing but comment
65
+ # # do nothing
76
66
  # end
77
67
  class SuppressedException < Cop
78
68
  MSG = 'Do not suppress exceptions.'
79
69
 
80
70
  def on_resbody(node)
81
71
  return if node.body
82
- return if cop_config['AllowComments'] && comment_lines?(node)
72
+ return if cop_config['AllowComments'] && comment_between_rescue_and_end?(node)
83
73
 
84
74
  add_offense(node)
85
75
  end
86
76
 
87
77
  private
88
78
 
89
- def comment_lines?(node)
90
- processed_source[line_range(node)].any? { |line| comment_line?(line) }
79
+ def comment_between_rescue_and_end?(node)
80
+ end_line = nil
81
+ node.each_ancestor(:kwbegin, :def) do |ancestor|
82
+ end_line = ancestor.loc.end.line
83
+ break
84
+ end
85
+ return false unless end_line
86
+
87
+ processed_source[node.first_line...end_line].any? { |line| comment_line?(line) }
91
88
  end
92
89
  end
93
90
  end
@@ -16,9 +16,7 @@ module RuboCop
16
16
  config, options)
17
17
  cop = new(config, options)
18
18
 
19
- if processed_source.parser_error
20
- cop.add_offense_from_error(processed_source.parser_error)
21
- end
19
+ cop.add_offense_from_error(processed_source.parser_error) if processed_source.parser_error
22
20
 
23
21
  processed_source.diagnostics.each do |diagnostic|
24
22
  cop.add_offense_from_diagnostic(diagnostic,
@@ -33,8 +33,6 @@ module RuboCop
33
33
  end
34
34
 
35
35
  def autocorrect(node)
36
- return false if target_ruby_version <= 2.3
37
-
38
36
  lambda do |corrector|
39
37
  corrector.replace(node.loc.name, 'Integer')
40
38
  end
@@ -5,7 +5,7 @@ module RuboCop
5
5
  module Lint
6
6
  # This cop checks for unreachable code.
7
7
  # The check are based on the presence of flow of control
8
- # statement in non-final position in *begin*(implicit) blocks.
8
+ # statement in non-final position in `begin` (implicit) blocks.
9
9
  #
10
10
  # @example
11
11
  #
@@ -38,9 +38,34 @@ module RuboCop
38
38
  # def do_something(unused)
39
39
  # end
40
40
  #
41
+ # @example IgnoreNotImplementedMethods: true (default)
42
+ # # good
43
+ # def do_something(unused)
44
+ # raise NotImplementedError
45
+ # end
46
+ #
47
+ # def do_something_else(unused)
48
+ # fail "TODO"
49
+ # end
50
+ #
51
+ # @example IgnoreNotImplementedMethods: false
52
+ # # bad
53
+ # def do_something(unused)
54
+ # raise NotImplementedError
55
+ # end
56
+ #
57
+ # def do_something_else(unused)
58
+ # fail "TODO"
59
+ # end
60
+ #
41
61
  class UnusedMethodArgument < Cop
42
62
  include UnusedArgument
43
63
 
64
+ def_node_matcher :not_implemented?, <<~PATTERN
65
+ {(send nil? :raise (const nil? :NotImplementedError))
66
+ (send nil? :fail ...)}
67
+ PATTERN
68
+
44
69
  def autocorrect(node)
45
70
  UnusedArgCorrector.correct(processed_source, node)
46
71
  end
@@ -51,16 +76,17 @@ module RuboCop
51
76
  return unless variable.method_argument?
52
77
  return if variable.keyword_argument? &&
53
78
  cop_config['AllowUnusedKeywordArguments']
54
-
55
- if cop_config['IgnoreEmptyMethods']
56
- body = variable.scope.node.body
57
-
58
- return if body.nil?
59
- end
79
+ return if ignored_method?(variable.scope.node.body)
60
80
 
61
81
  super
62
82
  end
63
83
 
84
+ def ignored_method?(body)
85
+ cop_config['IgnoreEmptyMethods'] && body.nil? ||
86
+ cop_config['IgnoreNotImplementedMethods'] &&
87
+ not_implemented?(body)
88
+ end
89
+
64
90
  def message(variable)
65
91
  message = +"Unused method argument - `#{variable.name}`."
66
92
 
@@ -21,7 +21,7 @@ module RuboCop
21
21
  def_node_matcher :uri_regexp_with_argument?, <<~PATTERN
22
22
  (send
23
23
  (const ${nil? cbase} :URI) :regexp
24
- (str $_))
24
+ ${(str _) (array ...)})
25
25
  PATTERN
26
26
 
27
27
  def_node_matcher :uri_regexp_without_argument?, <<~PATTERN
@@ -32,7 +32,7 @@ module RuboCop
32
32
  def on_send(node)
33
33
  uri_regexp_with_argument?(node) do |double_colon, arg|
34
34
  register_offense(
35
- node, top_level: double_colon ? '::' : '', arg: "('#{arg}')"
35
+ node, top_level: double_colon ? '::' : '', arg: "(#{arg.source})"
36
36
  )
37
37
  end
38
38
 
@@ -51,10 +51,10 @@ module RuboCop
51
51
  double_colon, arg = captured_values
52
52
 
53
53
  top_level = double_colon ? '::' : ''
54
- argument = arg ? "('#{arg}')" : ''
54
+ argument = arg ? "(#{arg.source})" : ''
55
55
 
56
56
  corrector.replace(
57
- node.loc.expression,
57
+ node,
58
58
  "#{top_level}URI::DEFAULT_PARSER.make_regexp#{argument}"
59
59
  )
60
60
  end
@@ -125,6 +125,8 @@ module RuboCop
125
125
  # delegate :method_a, to: :method_b
126
126
  # end
127
127
  class UselessAccessModifier < Cop
128
+ include RangeHelp
129
+
128
130
  MSG = 'Useless `%<current>s` access modifier.'
129
131
 
130
132
  def on_class(node)
@@ -145,6 +147,16 @@ module RuboCop
145
147
  check_node(node.children[1]) # singleton class body
146
148
  end
147
149
 
150
+ def autocorrect(node)
151
+ lambda do |corrector|
152
+ range = range_by_whole_lines(
153
+ node.source_range, include_final_newline: true
154
+ )
155
+
156
+ corrector.remove(range)
157
+ end
158
+ end
159
+
148
160
  private
149
161
 
150
162
  def_node_matcher :static_method_definition?, <<~PATTERN
@@ -215,9 +227,7 @@ module RuboCop
215
227
  add_offense(node, message: format(MSG, current: cur_vis))
216
228
  else
217
229
  # was the previous modifier never applied to any defs?
218
- if unused
219
- add_offense(unused, message: format(MSG, current: cur_vis))
220
- end
230
+ add_offense(unused, message: format(MSG, current: cur_vis)) if unused
221
231
  # once we have already warned about a certain modifier, don't
222
232
  # warn again even if it is never applied to any method defs
223
233
  unused = node
@@ -31,7 +31,6 @@ module RuboCop
31
31
  # do_something(some_var)
32
32
  # end
33
33
  class UselessAssignment < Cop
34
- include NameSimilarity
35
34
  MSG = 'Useless assignment to variable - `%<variable>s`.'
36
35
 
37
36
  def join_force?(force_class)
@@ -94,7 +93,9 @@ module RuboCop
94
93
  end
95
94
 
96
95
  def similar_name_message(variable)
97
- similar_name = find_similar_name(variable.name, variable.scope)
96
+ variable_like_names = collect_variable_like_names(variable.scope)
97
+ similar_name = NameSimilarity.find_similar_name(variable.name,
98
+ variable_like_names)
98
99
  " Did you mean `#{similar_name}`?" if similar_name
99
100
  end
100
101
 
@@ -5,7 +5,7 @@ module RuboCop
5
5
  module Lint
6
6
  # This cop checks for useless `else` in `begin..end` without `rescue`.
7
7
  #
8
- # Note: This syntax is no longer valid on Ruby 2.6 or higher and
8
+ # NOTE: This syntax is no longer valid on Ruby 2.6 or higher and
9
9
  # this cop is going to be removed at some point the future.
10
10
  #
11
11
  # @example
@@ -40,6 +40,11 @@ module RuboCop
40
40
  diagnostic.reason == :useless_else
41
41
  end
42
42
 
43
+ def find_offense_node_by(diagnostic)
44
+ # TODO: When implementing auto-correction, this method should return
45
+ # an offense node passed as first argument of `add_offense` method.
46
+ end
47
+
43
48
  def alternative_message(_diagnostic)
44
49
  MSG
45
50
  end
@@ -6,7 +6,7 @@ module RuboCop
6
6
  # This cop checks for setter call to local variable as the final
7
7
  # expression of a function definition.
8
8
  #
9
- # Note: There are edge cases in which the local variable references a
9
+ # NOTE: There are edge cases in which the local variable references a
10
10
  # value that is also accessible outside the local scope. This is not
11
11
  # detected by the cop, and it can yield a false positive.
12
12
  #
@@ -14,19 +14,24 @@ module RuboCop
14
14
  /\A(# *rubocop *: *((dis|en)able|todo) +)(.*)/.freeze
15
15
 
16
16
  # The token that makes up a disable comment.
17
- # The token used after `# rubocop: disable` are `A-z`, `/`, and `,`.
18
- # Also `A-z` includes `all`.
19
- DISABLING_COPS_CONTENT_TOKEN = %r{[A-z/,]+}.freeze
17
+ # The allowed specification for comments after `# rubocop: disable` is
18
+ # `DepartmentName/CopName` or` all`.
19
+ DISABLING_COPS_CONTENT_TOKEN = %r{[A-z]+/[A-z]+|all}.freeze
20
20
 
21
21
  def investigate(processed_source)
22
22
  processed_source.each_comment do |comment|
23
23
  next if comment.text !~ DISABLE_COMMENT_FORMAT
24
24
 
25
25
  offset = Regexp.last_match(1).length
26
- Regexp.last_match(4).scan(%r{[\w/]+|\W+}) do |name|
27
- break unless valid_content_token?(name.strip)
28
26
 
29
- check_cop_name(name, comment, offset)
27
+ Regexp.last_match(4).scan(/[^,]+|\W+/) do |name|
28
+ trimmed_name = name.strip
29
+
30
+ unless valid_content_token?(trimmed_name)
31
+ check_cop_name(trimmed_name, comment, offset)
32
+ end
33
+
34
+ break if contain_unexpected_character_for_department_name?(name)
30
35
 
31
36
  offset += name.length
32
37
  end
@@ -47,16 +52,24 @@ module RuboCop
47
52
 
48
53
  private
49
54
 
50
- def check_cop_name(name, comment, offset)
51
- return if name !~ /^[A-Z]/ || name =~ %r{/}
55
+ def disable_comment_offset
56
+ Regexp.last_match(1).length
57
+ end
52
58
 
59
+ def check_cop_name(name, comment, offset)
53
60
  start = comment.location.expression.begin_pos + offset
54
61
  range = range_between(start, start + name.length)
62
+
55
63
  add_offense(range, location: range)
56
64
  end
57
65
 
58
66
  def valid_content_token?(content_token)
59
- !DISABLING_COPS_CONTENT_TOKEN.match(content_token).nil?
67
+ /\W+/.match?(content_token) ||
68
+ DISABLING_COPS_CONTENT_TOKEN.match?(content_token)
69
+ end
70
+
71
+ def contain_unexpected_character_for_department_name?(name)
72
+ name.match?(%r{[^A-z/, ]})
60
73
  end
61
74
 
62
75
  def qualified_legacy_cop_name(cop_name)