rubocop 1.29.1 → 1.30.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 (452) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/config/default.yml +16 -2
  4. data/lib/rubocop/cli/command/auto_genenerate_config.rb +19 -4
  5. data/lib/rubocop/cli/command/execute_runner.rb +1 -1
  6. data/lib/rubocop/cli/command/show_cops.rb +1 -1
  7. data/lib/rubocop/cli.rb +1 -0
  8. data/lib/rubocop/config_loader.rb +2 -1
  9. data/lib/rubocop/config_validator.rb +15 -2
  10. data/lib/rubocop/cop/autocorrect_logic.rb +4 -2
  11. data/lib/rubocop/cop/base.rb +1 -1
  12. data/lib/rubocop/cop/bundler/gem_filename.rb +1 -1
  13. data/lib/rubocop/cop/correctors/alignment_corrector.rb +1 -1
  14. data/lib/rubocop/cop/correctors/condition_corrector.rb +1 -1
  15. data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +1 -1
  16. data/lib/rubocop/cop/correctors/empty_line_corrector.rb +1 -1
  17. data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +4 -2
  18. data/lib/rubocop/cop/correctors/if_then_corrector.rb +1 -1
  19. data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +1 -1
  20. data/lib/rubocop/cop/correctors/line_break_corrector.rb +7 -1
  21. data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +1 -1
  22. data/lib/rubocop/cop/correctors/parentheses_corrector.rb +1 -1
  23. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +1 -1
  24. data/lib/rubocop/cop/correctors/punctuation_corrector.rb +1 -1
  25. data/lib/rubocop/cop/correctors/space_corrector.rb +1 -1
  26. data/lib/rubocop/cop/correctors/string_literal_corrector.rb +1 -1
  27. data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +1 -1
  28. data/lib/rubocop/cop/gemspec/date_assignment.rb +1 -1
  29. data/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb +77 -0
  30. data/lib/rubocop/cop/internal_affairs/cop_description.rb +96 -0
  31. data/lib/rubocop/cop/internal_affairs/empty_line_between_expect_offense_and_correction.rb +1 -1
  32. data/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +1 -1
  33. data/lib/rubocop/cop/internal_affairs/method_name_end_with.rb +1 -1
  34. data/lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb +1 -1
  35. data/lib/rubocop/cop/internal_affairs/redundant_let_rubocop_config_new.rb +1 -1
  36. data/lib/rubocop/cop/internal_affairs.rb +1 -0
  37. data/lib/rubocop/cop/layout/argument_alignment.rb +22 -1
  38. data/lib/rubocop/cop/layout/assignment_indentation.rb +1 -1
  39. data/lib/rubocop/cop/layout/begin_end_alignment.rb +1 -1
  40. data/lib/rubocop/cop/layout/block_alignment.rb +1 -1
  41. data/lib/rubocop/cop/layout/block_end_newline.rb +1 -1
  42. data/lib/rubocop/cop/layout/case_indentation.rb +1 -1
  43. data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +1 -1
  44. data/lib/rubocop/cop/layout/comment_indentation.rb +1 -1
  45. data/lib/rubocop/cop/layout/condition_position.rb +1 -1
  46. data/lib/rubocop/cop/layout/def_end_alignment.rb +1 -1
  47. data/lib/rubocop/cop/layout/dot_position.rb +1 -1
  48. data/lib/rubocop/cop/layout/else_alignment.rb +1 -1
  49. data/lib/rubocop/cop/layout/empty_comment.rb +1 -1
  50. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +1 -1
  51. data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +1 -1
  52. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +1 -1
  53. data/lib/rubocop/cop/layout/empty_lines.rb +1 -1
  54. data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +1 -1
  55. data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +1 -1
  56. data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +1 -1
  57. data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +1 -1
  58. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +1 -1
  59. data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +1 -1
  60. data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +1 -1
  61. data/lib/rubocop/cop/layout/end_alignment.rb +1 -1
  62. data/lib/rubocop/cop/layout/end_of_line.rb +1 -1
  63. data/lib/rubocop/cop/layout/extra_spacing.rb +1 -1
  64. data/lib/rubocop/cop/layout/first_argument_indentation.rb +1 -1
  65. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +1 -1
  66. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -1
  67. data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +1 -1
  68. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +1 -1
  69. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -1
  70. data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +1 -1
  71. data/lib/rubocop/cop/layout/first_parameter_indentation.rb +1 -1
  72. data/lib/rubocop/cop/layout/hash_alignment.rb +2 -0
  73. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +1 -1
  74. data/lib/rubocop/cop/layout/heredoc_indentation.rb +1 -1
  75. data/lib/rubocop/cop/layout/indentation_consistency.rb +1 -1
  76. data/lib/rubocop/cop/layout/indentation_style.rb +1 -1
  77. data/lib/rubocop/cop/layout/indentation_width.rb +8 -5
  78. data/lib/rubocop/cop/layout/initial_indentation.rb +1 -1
  79. data/lib/rubocop/cop/layout/leading_comment_space.rb +1 -1
  80. data/lib/rubocop/cop/layout/leading_empty_lines.rb +1 -1
  81. data/lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb +1 -1
  82. data/lib/rubocop/cop/layout/line_length.rb +1 -1
  83. data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +1 -1
  84. data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +1 -1
  85. data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +1 -1
  86. data/lib/rubocop/cop/layout/multiline_block_layout.rb +1 -1
  87. data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +1 -1
  88. data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +1 -1
  89. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -1
  90. data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +1 -1
  91. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +1 -1
  92. data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +1 -1
  93. data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +1 -1
  94. data/lib/rubocop/cop/layout/redundant_line_break.rb +1 -1
  95. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +1 -1
  96. data/lib/rubocop/cop/layout/single_line_block_chain.rb +1 -1
  97. data/lib/rubocop/cop/layout/space_after_not.rb +1 -1
  98. data/lib/rubocop/cop/layout/space_before_block_braces.rb +2 -2
  99. data/lib/rubocop/cop/layout/space_before_comment.rb +1 -1
  100. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +1 -1
  101. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +3 -3
  102. data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +1 -1
  103. data/lib/rubocop/cop/layout/trailing_empty_lines.rb +1 -1
  104. data/lib/rubocop/cop/layout/trailing_whitespace.rb +1 -1
  105. data/lib/rubocop/cop/lint/ambiguous_assignment.rb +1 -1
  106. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +1 -1
  107. data/lib/rubocop/cop/lint/ambiguous_operator.rb +1 -1
  108. data/lib/rubocop/cop/lint/ambiguous_operator_precedence.rb +1 -1
  109. data/lib/rubocop/cop/lint/ambiguous_range.rb +3 -3
  110. data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +1 -1
  111. data/lib/rubocop/cop/lint/assignment_in_condition.rb +1 -1
  112. data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +1 -1
  113. data/lib/rubocop/cop/lint/boolean_symbol.rb +1 -1
  114. data/lib/rubocop/cop/lint/circular_argument_reference.rb +1 -1
  115. data/lib/rubocop/cop/lint/debugger.rb +1 -1
  116. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +1 -1
  117. data/lib/rubocop/cop/lint/deprecated_constants.rb +1 -1
  118. data/lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb +1 -1
  119. data/lib/rubocop/cop/lint/duplicate_branch.rb +1 -1
  120. data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -1
  121. data/lib/rubocop/cop/lint/duplicate_elsif_condition.rb +1 -1
  122. data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -1
  123. data/lib/rubocop/cop/lint/duplicate_methods.rb +1 -1
  124. data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +1 -1
  125. data/lib/rubocop/cop/lint/duplicate_require.rb +1 -1
  126. data/lib/rubocop/cop/lint/duplicate_rescue_exception.rb +1 -1
  127. data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -1
  128. data/lib/rubocop/cop/lint/else_layout.rb +3 -3
  129. data/lib/rubocop/cop/lint/empty_block.rb +1 -1
  130. data/lib/rubocop/cop/lint/empty_class.rb +1 -1
  131. data/lib/rubocop/cop/lint/empty_conditional_body.rb +1 -1
  132. data/lib/rubocop/cop/lint/empty_ensure.rb +1 -1
  133. data/lib/rubocop/cop/lint/empty_expression.rb +1 -1
  134. data/lib/rubocop/cop/lint/empty_file.rb +1 -1
  135. data/lib/rubocop/cop/lint/empty_in_pattern.rb +1 -1
  136. data/lib/rubocop/cop/lint/empty_interpolation.rb +1 -1
  137. data/lib/rubocop/cop/lint/empty_when.rb +1 -1
  138. data/lib/rubocop/cop/lint/ensure_return.rb +1 -1
  139. data/lib/rubocop/cop/lint/flip_flop.rb +1 -1
  140. data/lib/rubocop/cop/lint/float_comparison.rb +1 -1
  141. data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -1
  142. data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +1 -1
  143. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -1
  144. data/lib/rubocop/cop/lint/incompatible_io_select_with_fiber_scheduler.rb +1 -1
  145. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +1 -1
  146. data/lib/rubocop/cop/lint/inherit_exception.rb +1 -1
  147. data/lib/rubocop/cop/lint/interpolation_check.rb +1 -1
  148. data/lib/rubocop/cop/lint/lambda_without_literal_block.rb +2 -2
  149. data/lib/rubocop/cop/lint/literal_as_condition.rb +1 -1
  150. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +1 -1
  151. data/lib/rubocop/cop/lint/loop.rb +1 -1
  152. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +1 -1
  153. data/lib/rubocop/cop/lint/missing_super.rb +1 -1
  154. data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -1
  155. data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -1
  156. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +1 -1
  157. data/lib/rubocop/cop/lint/number_conversion.rb +1 -1
  158. data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +1 -1
  159. data/lib/rubocop/cop/lint/or_assignment_to_constant.rb +2 -3
  160. data/lib/rubocop/cop/lint/percent_string_array.rb +1 -1
  161. data/lib/rubocop/cop/lint/percent_symbol_array.rb +1 -1
  162. data/lib/rubocop/cop/lint/raise_exception.rb +1 -1
  163. data/lib/rubocop/cop/lint/rand_one.rb +1 -1
  164. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +1 -1
  165. data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +1 -1
  166. data/lib/rubocop/cop/lint/redundant_require_statement.rb +3 -0
  167. data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +3 -3
  168. data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +1 -1
  169. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +1 -1
  170. data/lib/rubocop/cop/lint/redundant_with_index.rb +1 -1
  171. data/lib/rubocop/cop/lint/redundant_with_object.rb +1 -1
  172. data/lib/rubocop/cop/lint/refinement_import_methods.rb +1 -1
  173. data/lib/rubocop/cop/lint/regexp_as_condition.rb +1 -1
  174. data/lib/rubocop/cop/lint/require_parentheses.rb +1 -1
  175. data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
  176. data/lib/rubocop/cop/lint/return_in_void_context.rb +1 -1
  177. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +3 -0
  178. data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +1 -1
  179. data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +1 -1
  180. data/lib/rubocop/cop/lint/script_permission.rb +1 -1
  181. data/lib/rubocop/cop/lint/self_assignment.rb +1 -1
  182. data/lib/rubocop/cop/lint/shadowed_argument.rb +1 -1
  183. data/lib/rubocop/cop/lint/shadowed_exception.rb +1 -1
  184. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +1 -1
  185. data/lib/rubocop/cop/lint/struct_new_override.rb +1 -1
  186. data/lib/rubocop/cop/lint/suppressed_exception.rb +1 -1
  187. data/lib/rubocop/cop/lint/symbol_conversion.rb +1 -1
  188. data/lib/rubocop/cop/lint/syntax.rb +1 -1
  189. data/lib/rubocop/cop/lint/to_enum_arguments.rb +1 -1
  190. data/lib/rubocop/cop/lint/to_json.rb +1 -1
  191. data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +1 -1
  192. data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +1 -1
  193. data/lib/rubocop/cop/lint/triple_quotes.rb +1 -1
  194. data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +1 -1
  195. data/lib/rubocop/cop/lint/unexpected_block_arity.rb +1 -1
  196. data/lib/rubocop/cop/lint/unified_integer.rb +3 -1
  197. data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
  198. data/lib/rubocop/cop/lint/unreachable_loop.rb +1 -1
  199. data/lib/rubocop/cop/lint/unused_block_argument.rb +1 -1
  200. data/lib/rubocop/cop/lint/unused_method_argument.rb +1 -1
  201. data/lib/rubocop/cop/lint/uri_escape_unescape.rb +1 -1
  202. data/lib/rubocop/cop/lint/uri_regexp.rb +1 -1
  203. data/lib/rubocop/cop/lint/useless_access_modifier.rb +1 -1
  204. data/lib/rubocop/cop/lint/useless_assignment.rb +1 -1
  205. data/lib/rubocop/cop/lint/useless_method_definition.rb +1 -1
  206. data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +1 -1
  207. data/lib/rubocop/cop/lint/useless_setter_call.rb +2 -2
  208. data/lib/rubocop/cop/lint/useless_times.rb +1 -1
  209. data/lib/rubocop/cop/lint/void.rb +1 -1
  210. data/lib/rubocop/cop/metrics/abc_size.rb +1 -1
  211. data/lib/rubocop/cop/metrics/block_length.rb +1 -1
  212. data/lib/rubocop/cop/metrics/block_nesting.rb +1 -1
  213. data/lib/rubocop/cop/metrics/class_length.rb +1 -1
  214. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +1 -1
  215. data/lib/rubocop/cop/metrics/method_length.rb +1 -1
  216. data/lib/rubocop/cop/metrics/module_length.rb +1 -1
  217. data/lib/rubocop/cop/metrics/parameter_lists.rb +1 -1
  218. data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -1
  219. data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +7 -2
  220. data/lib/rubocop/cop/mixin/string_help.rb +1 -1
  221. data/lib/rubocop/cop/naming/accessor_method_name.rb +1 -1
  222. data/lib/rubocop/cop/naming/ascii_identifiers.rb +1 -1
  223. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -1
  224. data/lib/rubocop/cop/naming/block_forwarding.rb +2 -2
  225. data/lib/rubocop/cop/naming/block_parameter_name.rb +1 -1
  226. data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +1 -1
  227. data/lib/rubocop/cop/naming/constant_name.rb +1 -1
  228. data/lib/rubocop/cop/naming/file_name.rb +1 -1
  229. data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +1 -1
  230. data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +1 -1
  231. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +1 -1
  232. data/lib/rubocop/cop/naming/method_name.rb +1 -1
  233. data/lib/rubocop/cop/naming/method_parameter_name.rb +1 -1
  234. data/lib/rubocop/cop/naming/predicate_name.rb +1 -1
  235. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +1 -1
  236. data/lib/rubocop/cop/naming/variable_name.rb +1 -1
  237. data/lib/rubocop/cop/naming/variable_number.rb +1 -1
  238. data/lib/rubocop/cop/security/compound_hash.rb +1 -1
  239. data/lib/rubocop/cop/security/eval.rb +1 -1
  240. data/lib/rubocop/cop/security/json_load.rb +1 -1
  241. data/lib/rubocop/cop/security/marshal_load.rb +1 -1
  242. data/lib/rubocop/cop/security/open.rb +1 -1
  243. data/lib/rubocop/cop/security/yaml_load.rb +1 -1
  244. data/lib/rubocop/cop/style/accessor_grouping.rb +3 -3
  245. data/lib/rubocop/cop/style/alias.rb +1 -1
  246. data/lib/rubocop/cop/style/and_or.rb +3 -3
  247. data/lib/rubocop/cop/style/array_coercion.rb +1 -1
  248. data/lib/rubocop/cop/style/array_join.rb +1 -1
  249. data/lib/rubocop/cop/style/ascii_comments.rb +1 -1
  250. data/lib/rubocop/cop/style/attr.rb +1 -1
  251. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +1 -1
  252. data/lib/rubocop/cop/style/bare_percent_literals.rb +1 -1
  253. data/lib/rubocop/cop/style/bisected_attr_accessor.rb +1 -1
  254. data/lib/rubocop/cop/style/block_comments.rb +1 -1
  255. data/lib/rubocop/cop/style/case_equality.rb +1 -1
  256. data/lib/rubocop/cop/style/case_like_if.rb +1 -1
  257. data/lib/rubocop/cop/style/class_and_module_children.rb +1 -1
  258. data/lib/rubocop/cop/style/class_check.rb +1 -1
  259. data/lib/rubocop/cop/style/class_equality_comparison.rb +1 -1
  260. data/lib/rubocop/cop/style/class_methods.rb +1 -1
  261. data/lib/rubocop/cop/style/class_methods_definitions.rb +1 -1
  262. data/lib/rubocop/cop/style/class_vars.rb +1 -1
  263. data/lib/rubocop/cop/style/collection_compact.rb +1 -1
  264. data/lib/rubocop/cop/style/collection_methods.rb +1 -1
  265. data/lib/rubocop/cop/style/colon_method_call.rb +1 -1
  266. data/lib/rubocop/cop/style/colon_method_definition.rb +1 -1
  267. data/lib/rubocop/cop/style/combinable_loops.rb +1 -1
  268. data/lib/rubocop/cop/style/command_literal.rb +1 -1
  269. data/lib/rubocop/cop/style/comment_annotation.rb +1 -1
  270. data/lib/rubocop/cop/style/commented_keyword.rb +3 -3
  271. data/lib/rubocop/cop/style/conditional_assignment.rb +1 -1
  272. data/lib/rubocop/cop/style/constant_visibility.rb +1 -1
  273. data/lib/rubocop/cop/style/date_time.rb +1 -1
  274. data/lib/rubocop/cop/style/def_with_parentheses.rb +1 -1
  275. data/lib/rubocop/cop/style/dir.rb +4 -1
  276. data/lib/rubocop/cop/style/documentation.rb +1 -1
  277. data/lib/rubocop/cop/style/documentation_method.rb +1 -1
  278. data/lib/rubocop/cop/style/double_negation.rb +1 -1
  279. data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -1
  280. data/lib/rubocop/cop/style/each_with_object.rb +1 -1
  281. data/lib/rubocop/cop/style/empty_block_parameter.rb +1 -1
  282. data/lib/rubocop/cop/style/empty_case_condition.rb +1 -1
  283. data/lib/rubocop/cop/style/empty_lambda_parameter.rb +1 -1
  284. data/lib/rubocop/cop/style/empty_literal.rb +1 -1
  285. data/lib/rubocop/cop/style/empty_method.rb +1 -1
  286. data/lib/rubocop/cop/style/encoding.rb +1 -1
  287. data/lib/rubocop/cop/style/end_block.rb +1 -1
  288. data/lib/rubocop/cop/style/endless_method.rb +1 -1
  289. data/lib/rubocop/cop/style/env_home.rb +1 -1
  290. data/lib/rubocop/cop/style/eval_with_location.rb +1 -1
  291. data/lib/rubocop/cop/style/even_odd.rb +1 -1
  292. data/lib/rubocop/cop/style/expand_path_arguments.rb +1 -1
  293. data/lib/rubocop/cop/style/explicit_block_argument.rb +1 -1
  294. data/lib/rubocop/cop/style/exponential_notation.rb +1 -1
  295. data/lib/rubocop/cop/style/fetch_env_var.rb +56 -83
  296. data/lib/rubocop/cop/style/float_division.rb +1 -1
  297. data/lib/rubocop/cop/style/for.rb +1 -1
  298. data/lib/rubocop/cop/style/format_string.rb +1 -1
  299. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +5 -2
  300. data/lib/rubocop/cop/style/global_std_stream.rb +1 -1
  301. data/lib/rubocop/cop/style/global_vars.rb +1 -1
  302. data/lib/rubocop/cop/style/guard_clause.rb +1 -1
  303. data/lib/rubocop/cop/style/hash_conversion.rb +1 -1
  304. data/lib/rubocop/cop/style/hash_each_methods.rb +1 -1
  305. data/lib/rubocop/cop/style/hash_except.rb +1 -1
  306. data/lib/rubocop/cop/style/hash_like_case.rb +1 -1
  307. data/lib/rubocop/cop/style/hash_syntax.rb +1 -1
  308. data/lib/rubocop/cop/style/hash_transform_keys.rb +6 -1
  309. data/lib/rubocop/cop/style/hash_transform_values.rb +4 -1
  310. data/lib/rubocop/cop/style/identical_conditional_branches.rb +2 -2
  311. data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +2 -2
  312. data/lib/rubocop/cop/style/implicit_runtime_error.rb +1 -1
  313. data/lib/rubocop/cop/style/in_pattern_then.rb +1 -1
  314. data/lib/rubocop/cop/style/inline_comment.rb +1 -1
  315. data/lib/rubocop/cop/style/inverse_methods.rb +2 -2
  316. data/lib/rubocop/cop/style/ip_addresses.rb +1 -1
  317. data/lib/rubocop/cop/style/keyword_parameters_order.rb +1 -1
  318. data/lib/rubocop/cop/style/lambda.rb +1 -1
  319. data/lib/rubocop/cop/style/lambda_call.rb +1 -1
  320. data/lib/rubocop/cop/style/line_end_concatenation.rb +1 -1
  321. data/lib/rubocop/cop/style/map_compact_with_conditional_block.rb +136 -0
  322. data/lib/rubocop/cop/style/map_to_hash.rb +2 -2
  323. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +1 -1
  324. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -1
  325. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +1 -1
  326. data/lib/rubocop/cop/style/method_def_parentheses.rb +1 -1
  327. data/lib/rubocop/cop/style/min_max.rb +1 -1
  328. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +1 -1
  329. data/lib/rubocop/cop/style/mixin_grouping.rb +1 -1
  330. data/lib/rubocop/cop/style/mixin_usage.rb +1 -1
  331. data/lib/rubocop/cop/style/module_function.rb +1 -1
  332. data/lib/rubocop/cop/style/multiline_block_chain.rb +1 -1
  333. data/lib/rubocop/cop/style/multiline_in_pattern_then.rb +1 -1
  334. data/lib/rubocop/cop/style/multiline_memoization.rb +1 -1
  335. data/lib/rubocop/cop/style/multiline_method_signature.rb +1 -1
  336. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +2 -2
  337. data/lib/rubocop/cop/style/multiline_when_then.rb +1 -1
  338. data/lib/rubocop/cop/style/multiple_comparison.rb +1 -1
  339. data/lib/rubocop/cop/style/mutable_constant.rb +1 -1
  340. data/lib/rubocop/cop/style/negated_if_else_condition.rb +1 -1
  341. data/lib/rubocop/cop/style/nested_file_dirname.rb +1 -1
  342. data/lib/rubocop/cop/style/nested_modifier.rb +1 -1
  343. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +1 -1
  344. data/lib/rubocop/cop/style/nested_ternary_operator.rb +1 -1
  345. data/lib/rubocop/cop/style/nil_comparison.rb +1 -1
  346. data/lib/rubocop/cop/style/nil_lambda.rb +1 -1
  347. data/lib/rubocop/cop/style/non_nil_check.rb +1 -1
  348. data/lib/rubocop/cop/style/not.rb +1 -1
  349. data/lib/rubocop/cop/style/numbered_parameters.rb +1 -1
  350. data/lib/rubocop/cop/style/numbered_parameters_limit.rb +1 -1
  351. data/lib/rubocop/cop/style/numeric_literal_prefix.rb +1 -1
  352. data/lib/rubocop/cop/style/numeric_literals.rb +1 -1
  353. data/lib/rubocop/cop/style/numeric_predicate.rb +10 -2
  354. data/lib/rubocop/cop/style/object_then.rb +1 -1
  355. data/lib/rubocop/cop/style/one_line_conditional.rb +1 -1
  356. data/lib/rubocop/cop/style/open_struct_use.rb +1 -1
  357. data/lib/rubocop/cop/style/option_hash.rb +1 -1
  358. data/lib/rubocop/cop/style/optional_arguments.rb +1 -1
  359. data/lib/rubocop/cop/style/optional_boolean_parameter.rb +1 -1
  360. data/lib/rubocop/cop/style/or_assignment.rb +1 -1
  361. data/lib/rubocop/cop/style/parentheses_around_condition.rb +1 -1
  362. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -1
  363. data/lib/rubocop/cop/style/percent_q_literals.rb +1 -1
  364. data/lib/rubocop/cop/style/perl_backrefs.rb +1 -1
  365. data/lib/rubocop/cop/style/preferred_hash_methods.rb +1 -1
  366. data/lib/rubocop/cop/style/proc.rb +1 -1
  367. data/lib/rubocop/cop/style/raise_args.rb +1 -1
  368. data/lib/rubocop/cop/style/random_with_offset.rb +1 -1
  369. data/lib/rubocop/cop/style/redundant_argument.rb +1 -1
  370. data/lib/rubocop/cop/style/redundant_assignment.rb +1 -1
  371. data/lib/rubocop/cop/style/redundant_begin.rb +17 -6
  372. data/lib/rubocop/cop/style/redundant_capital_w.rb +1 -1
  373. data/lib/rubocop/cop/style/redundant_condition.rb +9 -5
  374. data/lib/rubocop/cop/style/redundant_conditional.rb +1 -1
  375. data/lib/rubocop/cop/style/redundant_exception.rb +1 -1
  376. data/lib/rubocop/cop/style/redundant_fetch_block.rb +1 -1
  377. data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +1 -1
  378. data/lib/rubocop/cop/style/redundant_freeze.rb +1 -1
  379. data/lib/rubocop/cop/style/redundant_interpolation.rb +22 -1
  380. data/lib/rubocop/cop/style/redundant_parentheses.rb +1 -1
  381. data/lib/rubocop/cop/style/redundant_percent_q.rb +1 -1
  382. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +2 -2
  383. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +1 -1
  384. data/lib/rubocop/cop/style/redundant_return.rb +1 -1
  385. data/lib/rubocop/cop/style/redundant_self.rb +1 -1
  386. data/lib/rubocop/cop/style/redundant_self_assignment.rb +1 -1
  387. data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +1 -1
  388. data/lib/rubocop/cop/style/redundant_sort.rb +1 -1
  389. data/lib/rubocop/cop/style/redundant_sort_by.rb +1 -1
  390. data/lib/rubocop/cop/style/regexp_literal.rb +1 -1
  391. data/lib/rubocop/cop/style/rescue_modifier.rb +1 -1
  392. data/lib/rubocop/cop/style/rescue_standard_error.rb +3 -3
  393. data/lib/rubocop/cop/style/return_nil.rb +1 -1
  394. data/lib/rubocop/cop/style/safe_navigation.rb +1 -1
  395. data/lib/rubocop/cop/style/sample.rb +1 -1
  396. data/lib/rubocop/cop/style/select_by_regexp.rb +1 -1
  397. data/lib/rubocop/cop/style/self_assignment.rb +1 -1
  398. data/lib/rubocop/cop/style/semicolon.rb +1 -1
  399. data/lib/rubocop/cop/style/send.rb +1 -1
  400. data/lib/rubocop/cop/style/signal_exception.rb +1 -1
  401. data/lib/rubocop/cop/style/single_line_block_params.rb +1 -1
  402. data/lib/rubocop/cop/style/single_line_methods.rb +2 -2
  403. data/lib/rubocop/cop/style/slicing_with_range.rb +1 -1
  404. data/lib/rubocop/cop/style/sole_nested_conditional.rb +26 -7
  405. data/lib/rubocop/cop/style/static_class.rb +1 -1
  406. data/lib/rubocop/cop/style/stderr_puts.rb +1 -1
  407. data/lib/rubocop/cop/style/string_concatenation.rb +1 -1
  408. data/lib/rubocop/cop/style/string_hash_keys.rb +1 -1
  409. data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +1 -1
  410. data/lib/rubocop/cop/style/string_methods.rb +1 -1
  411. data/lib/rubocop/cop/style/strip.rb +1 -1
  412. data/lib/rubocop/cop/style/struct_inheritance.rb +2 -2
  413. data/lib/rubocop/cop/style/swap_values.rb +1 -1
  414. data/lib/rubocop/cop/style/symbol_array.rb +6 -2
  415. data/lib/rubocop/cop/style/symbol_literal.rb +1 -1
  416. data/lib/rubocop/cop/style/symbol_proc.rb +3 -3
  417. data/lib/rubocop/cop/style/ternary_parentheses.rb +1 -1
  418. data/lib/rubocop/cop/style/trailing_body_on_class.rb +1 -1
  419. data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +1 -1
  420. data/lib/rubocop/cop/style/trailing_body_on_module.rb +1 -1
  421. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +1 -1
  422. data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +1 -1
  423. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +1 -1
  424. data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +1 -1
  425. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +1 -1
  426. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +1 -1
  427. data/lib/rubocop/cop/style/trivial_accessors.rb +1 -1
  428. data/lib/rubocop/cop/style/unless_else.rb +1 -1
  429. data/lib/rubocop/cop/style/unless_logical_operators.rb +1 -1
  430. data/lib/rubocop/cop/style/unpack_first.rb +4 -1
  431. data/lib/rubocop/cop/style/variable_interpolation.rb +1 -1
  432. data/lib/rubocop/cop/style/when_then.rb +1 -1
  433. data/lib/rubocop/cop/style/word_array.rb +1 -1
  434. data/lib/rubocop/cop/style/yoda_condition.rb +1 -1
  435. data/lib/rubocop/cop/style/zero_length_predicate.rb +1 -1
  436. data/lib/rubocop/cop/team.rb +2 -2
  437. data/lib/rubocop/cop/util.rb +1 -1
  438. data/lib/rubocop/formatter/disabled_config_formatter.rb +2 -2
  439. data/lib/rubocop/formatter/markdown_formatter.rb +2 -0
  440. data/lib/rubocop/formatter/simple_text_formatter.rb +4 -2
  441. data/lib/rubocop/magic_comment.rb +27 -2
  442. data/lib/rubocop/options.rb +60 -38
  443. data/lib/rubocop/rake_task.rb +3 -3
  444. data/lib/rubocop/result_cache.rb +2 -1
  445. data/lib/rubocop/rspec/cop_helper.rb +1 -1
  446. data/lib/rubocop/rspec/expect_offense.rb +3 -3
  447. data/lib/rubocop/rspec/shared_contexts.rb +20 -0
  448. data/lib/rubocop/runner.rb +3 -3
  449. data/lib/rubocop/target_ruby.rb +7 -5
  450. data/lib/rubocop/version.rb +1 -1
  451. data/lib/rubocop.rb +2 -0
  452. metadata +8 -5
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop checks for class methods that are defined using the `::`
6
+ # Checks for class methods that are defined using the `::`
7
7
  # operator instead of the `.` operator.
8
8
  #
9
9
  # @example
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop checks for places where multiple consecutive loops over the same data
6
+ # Checks for places where multiple consecutive loops over the same data
7
7
  # can be combined into a single loop. It is very likely that combining them
8
8
  # will make the code more efficient and more concise.
9
9
  #
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop enforces using `` or %x around command literals.
6
+ # Enforces using `` or %x around command literals.
7
7
  #
8
8
  # @example EnforcedStyle: backticks (default)
9
9
  # # bad
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop checks that comment annotation keywords are written according
6
+ # Checks that comment annotation keywords are written according
7
7
  # to guidelines.
8
8
  #
9
9
  # Annotation keywords can be specified by overriding the cop's `Keywords`
@@ -3,18 +3,18 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop checks for comments put on the same line as some keywords.
6
+ # Checks for comments put on the same line as some keywords.
7
7
  # These keywords are: `class`, `module`, `def`, `begin`, `end`.
8
8
  #
9
9
  # Note that some comments
10
10
  # (`:nodoc:`, `:yields:`, `rubocop:disable` and `rubocop:todo`)
11
11
  # are allowed.
12
12
  #
13
- # Auto-correction removes comments from `end` keyword and keeps comments
13
+ # Autocorrection removes comments from `end` keyword and keeps comments
14
14
  # for `class`, `module`, `def` and `begin` above the keyword.
15
15
  #
16
16
  # @safety
17
- # Auto-correction is unsafe because it may remove a comment that is
17
+ # Autocorrection is unsafe because it may remove a comment that is
18
18
  # meaningful.
19
19
  #
20
20
  # @example
@@ -394,7 +394,7 @@ module RuboCop
394
394
  end
395
395
 
396
396
  # If `Layout/LineLength` is enabled, we do not want to introduce an
397
- # offense by auto-correcting this cop. Find the max configured line
397
+ # offense by autocorrecting this cop. Find the max configured line
398
398
  # length. Find the longest line of condition. Remove the assignment
399
399
  # from lines that contain the offending assignment because after
400
400
  # correcting, this will not be on the line anymore. Check if the length
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop checks that constants defined in classes and modules have
6
+ # Checks that constants defined in classes and modules have
7
7
  # an explicit visibility declaration. By default, Ruby makes all class-
8
8
  # and module constants public, which litters the public API of the
9
9
  # class or module. Explicitly declaring a visibility makes intent more
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop checks for consistent usage of the `DateTime` class over the
6
+ # Checks for consistent usage of the `DateTime` class over the
7
7
  # `Time` class. This cop is disabled by default since these classes,
8
8
  # although highly overlapping, have particularities that make them not
9
9
  # replaceable in certain situations when dealing with multiple timezones
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop checks for parentheses in the definition of a method,
6
+ # Checks for parentheses in the definition of a method,
7
7
  # that does not take any arguments. Both instance and
8
8
  # class/singleton methods are checked.
9
9
  #
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop checks for places where the `#__dir__` method can replace more
6
+ # Checks for places where the `#__dir__` method can replace more
7
7
  # complex constructs to retrieve a canonicalized absolute path to the
8
8
  # current file.
9
9
  #
@@ -18,6 +18,9 @@ module RuboCop
18
18
  # path = __dir__
19
19
  class Dir < Base
20
20
  extend AutoCorrector
21
+ extend TargetRubyVersion
22
+
23
+ minimum_target_ruby_version 2.0
21
24
 
22
25
  MSG = "Use `__dir__` to get an absolute path to the current file's directory."
23
26
  RESTRICT_ON_SEND = %i[expand_path dirname].freeze
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop checks for missing top-level documentation of classes and
6
+ # Checks for missing top-level documentation of classes and
7
7
  # modules. Classes with no body are exempt from the check and so are
8
8
  # namespace modules - modules that have nothing in their bodies except
9
9
  # classes, other modules, constant definitions or constant visibility
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop checks for missing documentation comment for public methods.
6
+ # Checks for missing documentation comment for public methods.
7
7
  # It can optionally be configured to also require documentation for
8
8
  # non-public methods.
9
9
  #
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop checks for uses of double negation (`!!`) to convert something to a boolean value.
6
+ # Checks for uses of double negation (`!!`) to convert something to a boolean value.
7
7
  #
8
8
  # When using `EnforcedStyle: allowed_in_returns`, allow double negation in contexts
9
9
  # that use boolean as a return value. When using `EnforcedStyle: forbidden`, double negation
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop checks for loops which iterate a constant number of times,
6
+ # Checks for loops which iterate a constant number of times,
7
7
  # using a Range literal and `#each`. This can be done more readably using
8
8
  # `Integer#times`.
9
9
  #
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop looks for inject / reduce calls where the passed in object is
6
+ # Looks for inject / reduce calls where the passed in object is
7
7
  # returned at the end and so could be replaced by each_with_object without
8
8
  # the need to return the object at the end.
9
9
  #
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop checks for pipes for empty block parameters. Pipes for empty
6
+ # Checks for pipes for empty block parameters. Pipes for empty
7
7
  # block parameters do not cause syntax errors, but they are redundant.
8
8
  #
9
9
  # @example
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop checks for case statements with an empty condition.
6
+ # Checks for case statements with an empty condition.
7
7
  #
8
8
  # @example
9
9
  #
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop checks for parentheses for empty lambda parameters. Parentheses
6
+ # Checks for parentheses for empty lambda parameters. Parentheses
7
7
  # for empty lambda parameters do not cause syntax errors, but they are
8
8
  # redundant.
9
9
  #
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop checks for the use of a method, the result of which
6
+ # Checks for the use of a method, the result of which
7
7
  # would be a literal, like an empty array, hash, or string.
8
8
  #
9
9
  # @example
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop checks for the formatting of empty method definitions.
6
+ # Checks for the formatting of empty method definitions.
7
7
  # By default it enforces empty method definitions to go on a single
8
8
  # line (compact style), but it can be configured to enforce the `end`
9
9
  # to go on its own line (expanded style).
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop checks ensures source files have no utf-8 encoding comments.
6
+ # Checks ensures source files have no utf-8 encoding comments.
7
7
  # @example
8
8
  # # bad
9
9
  # # encoding: UTF-8
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop checks for END blocks.
6
+ # Checks for END blocks.
7
7
  #
8
8
  # @example
9
9
  # # bad
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop checks for endless methods.
6
+ # Checks for endless methods.
7
7
  #
8
8
  # It can enforce either the use of endless methods definitions
9
9
  # for single-lined method bodies, or disallow endless methods.
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop checks for consistent usage of `ENV['HOME']`. If `nil` is used as
6
+ # Checks for consistent usage of `ENV['HOME']`. If `nil` is used as
7
7
  # the second argument of `ENV.fetch`, it is treated as a bad case like `ENV[]`.
8
8
  #
9
9
  # @safety
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop ensures that eval methods (`eval`, `instance_eval`, `class_eval`
6
+ # Ensures that eval methods (`eval`, `instance_eval`, `class_eval`
7
7
  # and `module_eval`) are given filename and line number values (`__FILE__`
8
8
  # and `__LINE__`). This data is used to ensure that any errors raised
9
9
  # within the evaluated code will be given the correct identification
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop checks for places where `Integer#even?` or `Integer#odd?`
6
+ # Checks for places where `Integer#even?` or `Integer#odd?`
7
7
  # can be used.
8
8
  #
9
9
  # @example
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop checks for use of the `File.expand_path` arguments.
6
+ # Checks for use of the `File.expand_path` arguments.
7
7
  # Likewise, it also checks for the `Pathname.new` argument.
8
8
  #
9
9
  # Contrastive bad case and good case are alternately shown in
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop enforces the use of explicit block argument to avoid writing
6
+ # Enforces the use of explicit block argument to avoid writing
7
7
  # block literal that just passes its arguments to another block.
8
8
  #
9
9
  # NOTE: This cop only registers an offense if the block args match the
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop enforces consistency when using exponential notation
6
+ # Enforces consistency when using exponential notation
7
7
  # for numbers in the code (eg 1.2e4). Different styles are supported:
8
8
  #
9
9
  # * `scientific` which enforces a mantissa between 1 (inclusive) and 10 (exclusive).
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop suggests `ENV.fetch` for the replacement of `ENV[]`.
6
+ # Suggests `ENV.fetch` for the replacement of `ENV[]`.
7
7
  # `ENV[]` silently fails and returns `nil` when the environment variable is unset,
8
8
  # which may cause unexpected behaviors when the developer forgets to set it.
9
9
  # On the other hand, `ENV.fetch` raises KeyError or returns the explicitly
@@ -64,26 +64,26 @@ module RuboCop
64
64
  ({next | break | retry | redo})
65
65
  PATTERN
66
66
 
67
- # @!method env_with_bracket_in_descendants?(node)
68
- def_node_matcher :env_with_bracket_in_descendants?, <<~PATTERN
69
- `(send (const nil? :ENV) :[] $_)
67
+ # @!method offensive_nodes(node)
68
+ def_node_search :offensive_nodes, <<~PATTERN
69
+ [#env_with_bracket? #offensive?]
70
70
  PATTERN
71
71
 
72
72
  def on_send(node)
73
- env_with_bracket?(node) do |expression|
73
+ env_with_bracket?(node) do |name_node|
74
74
  break unless offensive?(node)
75
75
 
76
76
  if operand_of_or?(node)
77
- target_node = lookahead_target_node(node)
78
- target_expr = env_with_bracket?(target_node)
77
+ target_node = offensive_nodes(or_chain_root(node)).to_a.last
78
+ target_name_node = env_with_bracket?(target_node)
79
79
 
80
80
  if default_to_rhs?(target_node)
81
- default_rhs(target_node, target_expr)
81
+ default_rhs(target_node, target_name_node)
82
82
  else
83
- default_nil(target_node, target_expr)
83
+ default_nil(target_node, target_name_node)
84
84
  end
85
85
  else
86
- default_nil(node, expression)
86
+ default_nil(node, name_node)
87
87
  end
88
88
  end
89
89
  end
@@ -97,17 +97,39 @@ module RuboCop
97
97
 
98
98
  def used_as_flag?(node)
99
99
  return false if node.root?
100
+ return true if used_if_condition_in_body(node)
100
101
 
102
+ node.parent.send_type? && (node.parent.prefix_bang? || node.parent.comparison_method?)
103
+ end
104
+
105
+ def used_if_condition_in_body(node)
101
106
  if_node = node.ancestors.find(&:if_type?)
102
- return true if if_node&.condition == node
103
107
 
104
- node.parent.send_type? && (node.parent.prefix_bang? || node.parent.comparison_method?)
108
+ return false unless (condition = if_node&.condition)
109
+ return true if condition.send_type? && (condition.child_nodes == node.child_nodes)
110
+
111
+ used_in_condition?(node, condition)
112
+ end
113
+
114
+ def used_in_condition?(node, condition)
115
+ if condition.send_type? && (!condition.comparison_method? && !condition.predicate_method?)
116
+ return false
117
+ end
118
+
119
+ condition.child_nodes.any?(node)
105
120
  end
106
121
 
107
122
  def offensive?(node)
108
123
  !(allowed_var?(node) || allowable_use?(node))
109
124
  end
110
125
 
126
+ def or_chain_root(node)
127
+ while operand_of_or?(ancestor_or ||= node.parent)
128
+ ancestor_or = ancestor_or.parent
129
+ end
130
+ ancestor_or
131
+ end
132
+
111
133
  def default_to_rhs?(node)
112
134
  operand_of_or?(node) && !right_end_of_or_chains?(node) && rhs_can_be_default_value?(node)
113
135
  end
@@ -153,59 +175,10 @@ module RuboCop
153
175
  !(left_end_of_or_chains?(node) || node.parent&.parent&.or_type?)
154
176
  end
155
177
 
156
- # Returns the node and expression of the rightmost `ENV[]` in `||` chains.
157
- # e.g.,
158
- # `ENV['X'] || y || z || ENV['A'] || b`
159
- # ^^^^^^^^ Matches this one
160
- def rightmost_offense_in_or_chains(base_node)
161
- or_nodes = [base_node.parent]
162
-
163
- while (grand_parent = or_nodes.last&.parent)&.or_type?
164
- or_nodes << grand_parent
165
- end
166
-
167
- # Finds the rightmost `ENV[]` in `||` chains.
168
- or_node = or_nodes.reverse.find do |n|
169
- env_with_bracket?(n.rhs)
170
- end
171
-
172
- or_node ? or_node.rhs : base_node
173
- end
174
-
175
- def no_env_with_bracket_in_descendants?(node)
176
- !env_with_bracket_in_descendants?(node)
177
- end
178
-
179
178
  def conterpart_rhs_of(node)
180
179
  left_end_of_or_chains?(node) ? node.parent.rhs : node.parent.parent.rhs
181
180
  end
182
181
 
183
- # Looks ahead to the `ENV[]` that must be corrected first, avoiding a cross correction.
184
- # ```
185
- # ENV['X'] || y.map do |a|
186
- # a.map do |b|
187
- # ENV['Z'] + b
188
- # ^^^^^^^^ This must be corrected first.
189
- # end
190
- # end
191
- # ```
192
- def lookahead_target_node(base_node)
193
- return base_node unless operand_of_or?(base_node)
194
-
195
- candidate_node = rightmost_offense_in_or_chains(base_node)
196
- return candidate_node if right_end_of_or_chains?(candidate_node)
197
-
198
- counterpart_rhs = conterpart_rhs_of(candidate_node)
199
- return candidate_node if no_env_with_bracket_in_descendants?(counterpart_rhs)
200
-
201
- new_base_node = counterpart_rhs.each_descendant.find do |d|
202
- env_with_bracket?(d) && offensive?(d)
203
- end
204
- return candidate_node unless new_base_node
205
-
206
- lookahead_target_node(new_base_node)
207
- end
208
-
209
182
  def rhs_can_be_default_value?(node)
210
183
  !rhs_is_block_control?(node)
211
184
  end
@@ -214,84 +187,84 @@ module RuboCop
214
187
  block_control?(conterpart_rhs_of(node))
215
188
  end
216
189
 
217
- def new_code_default_nil(expression)
218
- "ENV.fetch(#{expression.source}, nil)"
190
+ def new_code_default_nil(name_node)
191
+ "ENV.fetch(#{name_node.source}, nil)"
219
192
  end
220
193
 
221
- def new_code_default_rhs_single_line(node, expression)
194
+ def new_code_default_rhs_single_line(node, name_node)
222
195
  parent = node.parent
223
196
  if parent.rhs.basic_literal?
224
- "ENV.fetch(#{expression.source}, #{parent.rhs.source})"
197
+ "ENV.fetch(#{name_node.source}, #{parent.rhs.source})"
225
198
  else
226
- "ENV.fetch(#{expression.source}) { #{parent.rhs.source} }"
199
+ "ENV.fetch(#{name_node.source}) { #{parent.rhs.source} }"
227
200
  end
228
201
  end
229
202
 
230
- def new_code_default_rhs_multiline(node, expression)
203
+ def new_code_default_rhs_multiline(node, name_node)
231
204
  env_indent = indent(node.parent)
232
205
  default = node.parent.rhs.source.split("\n").map do |line|
233
206
  "#{env_indent}#{line}"
234
207
  end.join("\n")
235
208
  <<~NEW_CODE.chomp
236
- ENV.fetch(#{expression.source}) do
209
+ ENV.fetch(#{name_node.source}) do
237
210
  #{configured_indentation}#{default}
238
211
  #{env_indent}end
239
212
  NEW_CODE
240
213
  end
241
214
 
242
- def new_code_default_rhs(node, expression)
215
+ def new_code_default_rhs(node, name_node)
243
216
  if node.parent.rhs.single_line?
244
- new_code_default_rhs_single_line(node, expression)
217
+ new_code_default_rhs_single_line(node, name_node)
245
218
  else
246
- new_code_default_rhs_multiline(node, expression)
219
+ new_code_default_rhs_multiline(node, name_node)
247
220
  end
248
221
  end
249
222
 
250
- def default_rhs(node, expression)
223
+ def default_rhs(node, name_node)
251
224
  if left_end_of_or_chains?(node)
252
- default_rhs_in_same_or(node, expression)
225
+ default_rhs_in_same_or(node, name_node)
253
226
  else
254
- default_rhs_in_outer_or(node, expression)
227
+ default_rhs_in_outer_or(node, name_node)
255
228
  end
256
229
  end
257
230
 
258
231
  # Adds an offense and sets `nil` to the default value of `ENV.fetch`.
259
232
  # `ENV['X']` --> `ENV.fetch('X', nil)`
260
- def default_nil(node, expression)
261
- message = format(MSG_DEFAULT_NIL, key: expression.source)
233
+ def default_nil(node, name_node)
234
+ message = format(MSG_DEFAULT_NIL, key: name_node.source)
262
235
 
263
236
  add_offense(node, message: message) do |corrector|
264
- corrector.replace(node, new_code_default_nil(expression))
237
+ corrector.replace(node, new_code_default_nil(name_node))
265
238
  end
266
239
  end
267
240
 
268
241
  # Adds an offense and makes the RHS the default value of `ENV.fetch`.
269
242
  # `ENV['X'] || y` --> `ENV.fetch('X') { y }`
270
- def default_rhs_in_same_or(node, expression)
243
+ def default_rhs_in_same_or(node, name_node)
271
244
  template = message_template_for(node.parent.rhs)
272
245
  message = format(template,
273
- key: expression.source,
246
+ key: name_node.source,
274
247
  default: first_line_of(node.parent.rhs.source))
275
248
 
276
249
  add_offense(node, message: message) do |corrector|
277
- corrector.replace(node.parent, new_code_default_rhs(node, expression))
250
+ corrector.replace(node.parent, new_code_default_rhs(node, name_node))
278
251
  end
279
252
  end
280
253
 
281
254
  # Adds an offense and makes the RHS the default value of `ENV.fetch`.
282
255
  # `z || ENV['X'] || y` --> `z || ENV.fetch('X') { y }`
283
- def default_rhs_in_outer_or(node, expression)
256
+ def default_rhs_in_outer_or(node, name_node)
284
257
  parent = node.parent
285
258
  grand_parent = parent.parent
286
259
 
287
260
  template = message_template_for(grand_parent.rhs)
288
261
  message = format(template,
289
- key: expression.source,
262
+ key: name_node.source,
290
263
  default: first_line_of(grand_parent.rhs.source))
291
264
 
292
265
  add_offense(node, message: message) do |corrector|
293
266
  lhs_code = parent.lhs.source
294
- rhs_code = new_code_default_rhs(parent, expression)
267
+ rhs_code = new_code_default_rhs(parent, name_node)
295
268
  corrector.replace(grand_parent, "#{lhs_code} || #{rhs_code}")
296
269
  end
297
270
  end
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop checks for division with integers coerced to floats.
6
+ # Checks for division with integers coerced to floats.
7
7
  # It is recommended to either always use `fdiv` or coerce one side only.
8
8
  # This cop also provides other options for code consistency.
9
9
  #
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop looks for uses of the `for` keyword or `each` method. The
6
+ # Looks for uses of the `for` keyword or `each` method. The
7
7
  # preferred alternative is set in the EnforcedStyle configuration
8
8
  # parameter. An `each` call with a block on a single line is always
9
9
  # allowed.
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop enforces the use of a single string formatting utility.
6
+ # Enforces the use of a single string formatting utility.
7
7
  # Valid options include Kernel#format, Kernel#sprintf and String#%.
8
8
  #
9
9
  # The detection of String#% cannot be implemented in a reliable
@@ -3,12 +3,12 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop is designed to help you transition from mutable string literals
6
+ # Helps you transition from mutable string literals
7
7
  # to frozen string literals.
8
8
  # It will add the `# frozen_string_literal: true` magic comment to the top
9
9
  # of files to enable frozen string literals. Frozen string literals may be
10
10
  # default in future Ruby. The comment will be added below a shebang and
11
- # encoding comment.
11
+ # encoding comment. The frozen string literal comment is only valid in Ruby 2.3+.
12
12
  #
13
13
  # Note that the cop will accept files where the comment exists but is set
14
14
  # to `false` instead of `true`.
@@ -86,6 +86,9 @@ module RuboCop
86
86
  include FrozenStringLiteral
87
87
  include RangeHelp
88
88
  extend AutoCorrector
89
+ extend TargetRubyVersion
90
+
91
+ minimum_target_ruby_version 2.3
89
92
 
90
93
  MSG_MISSING_TRUE = 'Missing magic comment `# frozen_string_literal: true`.'
91
94
  MSG_MISSING = 'Missing frozen string literal comment.'
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop enforces the use of `$stdout/$stderr/$stdin` instead of `STDOUT/STDERR/STDIN`.
6
+ # Enforces the use of `$stdout/$stderr/$stdin` instead of `STDOUT/STDERR/STDIN`.
7
7
  # `STDOUT/STDERR/STDIN` are constants, and while you can actually
8
8
  # reassign (possibly to redirect some stream) constants in Ruby, you'll get
9
9
  # an interpreter warning if you do so.
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop looks for uses of global variables.
6
+ # Looks for uses of global variables.
7
7
  # It does not report offenses for built-in global variables.
8
8
  # Built-in global variables are allowed by default. Additionally
9
9
  # users can allow additional variables via the AllowedVariables option.