rubocop-grantbirki 1.75.2

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 (891) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +20 -0
  3. data/README.md +251 -0
  4. data/assets/logo.png +0 -0
  5. data/assets/output.css.erb +159 -0
  6. data/assets/output.html.erb +102 -0
  7. data/config/default.yml +5988 -0
  8. data/config/internal_affairs.yml +31 -0
  9. data/config/obsoletion.yml +240 -0
  10. data/exe/rubocop +24 -0
  11. data/lib/rubocop/arguments_env.rb +17 -0
  12. data/lib/rubocop/arguments_file.rb +17 -0
  13. data/lib/rubocop/ast_aliases.rb +8 -0
  14. data/lib/rubocop/cache_config.rb +29 -0
  15. data/lib/rubocop/cached_data.rb +74 -0
  16. data/lib/rubocop/cli/command/auto_generate_config.rb +167 -0
  17. data/lib/rubocop/cli/command/base.rb +35 -0
  18. data/lib/rubocop/cli/command/execute_runner.rb +105 -0
  19. data/lib/rubocop/cli/command/init_dotfile.rb +44 -0
  20. data/lib/rubocop/cli/command/lsp.rb +19 -0
  21. data/lib/rubocop/cli/command/show_cops.rb +96 -0
  22. data/lib/rubocop/cli/command/show_docs_url.rb +48 -0
  23. data/lib/rubocop/cli/command/suggest_extensions.rb +132 -0
  24. data/lib/rubocop/cli/command/version.rb +18 -0
  25. data/lib/rubocop/cli/command.rb +22 -0
  26. data/lib/rubocop/cli/environment.rb +22 -0
  27. data/lib/rubocop/cli.rb +212 -0
  28. data/lib/rubocop/comment_config.rb +216 -0
  29. data/lib/rubocop/config.rb +400 -0
  30. data/lib/rubocop/config_finder.rb +78 -0
  31. data/lib/rubocop/config_loader.rb +307 -0
  32. data/lib/rubocop/config_loader_resolver.rb +312 -0
  33. data/lib/rubocop/config_obsoletion/changed_enforced_styles.rb +33 -0
  34. data/lib/rubocop/config_obsoletion/changed_parameter.rb +26 -0
  35. data/lib/rubocop/config_obsoletion/cop_rule.rb +33 -0
  36. data/lib/rubocop/config_obsoletion/extracted_cop.rb +47 -0
  37. data/lib/rubocop/config_obsoletion/parameter_rule.rb +56 -0
  38. data/lib/rubocop/config_obsoletion/removed_cop.rb +41 -0
  39. data/lib/rubocop/config_obsoletion/renamed_cop.rb +49 -0
  40. data/lib/rubocop/config_obsoletion/rule.rb +41 -0
  41. data/lib/rubocop/config_obsoletion/split_cop.rb +27 -0
  42. data/lib/rubocop/config_obsoletion.rb +155 -0
  43. data/lib/rubocop/config_regeneration.rb +33 -0
  44. data/lib/rubocop/config_store.rb +72 -0
  45. data/lib/rubocop/config_validator.rb +291 -0
  46. data/lib/rubocop/cop/autocorrect_logic.rb +151 -0
  47. data/lib/rubocop/cop/badge.rb +68 -0
  48. data/lib/rubocop/cop/base.rb +547 -0
  49. data/lib/rubocop/cop/bundler/duplicated_gem.rb +94 -0
  50. data/lib/rubocop/cop/bundler/duplicated_group.rb +127 -0
  51. data/lib/rubocop/cop/bundler/gem_comment.rb +171 -0
  52. data/lib/rubocop/cop/bundler/gem_filename.rb +102 -0
  53. data/lib/rubocop/cop/bundler/gem_version.rb +132 -0
  54. data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +85 -0
  55. data/lib/rubocop/cop/bundler/ordered_gems.rb +70 -0
  56. data/lib/rubocop/cop/commissioner.rb +182 -0
  57. data/lib/rubocop/cop/cop.rb +192 -0
  58. data/lib/rubocop/cop/corrector.rb +138 -0
  59. data/lib/rubocop/cop/correctors/alignment_corrector.rb +125 -0
  60. data/lib/rubocop/cop/correctors/condition_corrector.rb +25 -0
  61. data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +47 -0
  62. data/lib/rubocop/cop/correctors/empty_line_corrector.rb +25 -0
  63. data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +66 -0
  64. data/lib/rubocop/cop/correctors/if_then_corrector.rb +55 -0
  65. data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +139 -0
  66. data/lib/rubocop/cop/correctors/line_break_corrector.rb +66 -0
  67. data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +113 -0
  68. data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +38 -0
  69. data/lib/rubocop/cop/correctors/parentheses_corrector.rb +86 -0
  70. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +116 -0
  71. data/lib/rubocop/cop/correctors/punctuation_corrector.rb +27 -0
  72. data/lib/rubocop/cop/correctors/require_library_corrector.rb +23 -0
  73. data/lib/rubocop/cop/correctors/space_corrector.rb +46 -0
  74. data/lib/rubocop/cop/correctors/string_literal_corrector.rb +23 -0
  75. data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +40 -0
  76. data/lib/rubocop/cop/documentation.rb +66 -0
  77. data/lib/rubocop/cop/exclude_limit.rb +26 -0
  78. data/lib/rubocop/cop/force.rb +55 -0
  79. data/lib/rubocop/cop/gemspec/add_runtime_dependency.rb +38 -0
  80. data/lib/rubocop/cop/gemspec/dependency_version.rb +152 -0
  81. data/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb +91 -0
  82. data/lib/rubocop/cop/gemspec/development_dependencies.rb +107 -0
  83. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +89 -0
  84. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +101 -0
  85. data/lib/rubocop/cop/gemspec/require_mfa.rb +145 -0
  86. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +129 -0
  87. data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +50 -0
  88. data/lib/rubocop/cop/generator/configuration_injector.rb +65 -0
  89. data/lib/rubocop/cop/generator/require_file_injector.rb +75 -0
  90. data/lib/rubocop/cop/generator.rb +223 -0
  91. data/lib/rubocop/cop/ignored_node.rb +36 -0
  92. data/lib/rubocop/cop/internal_affairs/cop_description.rb +118 -0
  93. data/lib/rubocop/cop/internal_affairs/cop_enabled.rb +85 -0
  94. data/lib/rubocop/cop/internal_affairs/create_empty_file.rb +37 -0
  95. data/lib/rubocop/cop/internal_affairs/empty_line_between_expect_offense_and_correction.rb +69 -0
  96. data/lib/rubocop/cop/internal_affairs/example_description.rb +118 -0
  97. data/lib/rubocop/cop/internal_affairs/example_heredoc_delimiter.rb +111 -0
  98. data/lib/rubocop/cop/internal_affairs/inherit_deprecated_cop_class.rb +34 -0
  99. data/lib/rubocop/cop/internal_affairs/lambda_or_proc.rb +46 -0
  100. data/lib/rubocop/cop/internal_affairs/location_exists.rb +116 -0
  101. data/lib/rubocop/cop/internal_affairs/location_expression.rb +38 -0
  102. data/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +61 -0
  103. data/lib/rubocop/cop/internal_affairs/method_name_end_with.rb +82 -0
  104. data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +49 -0
  105. data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +44 -0
  106. data/lib/rubocop/cop/internal_affairs/node_first_or_last_argument.rb +54 -0
  107. data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +241 -0
  108. data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_processor.rb +63 -0
  109. data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_walker.rb +131 -0
  110. data/lib/rubocop/cop/internal_affairs/node_pattern_groups.rb +230 -0
  111. data/lib/rubocop/cop/internal_affairs/node_type_group.rb +91 -0
  112. data/lib/rubocop/cop/internal_affairs/node_type_multiple_predicates.rb +126 -0
  113. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +42 -0
  114. data/lib/rubocop/cop/internal_affairs/numblock_handler.rb +69 -0
  115. data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +56 -0
  116. data/lib/rubocop/cop/internal_affairs/on_send_without_on_csend.rb +90 -0
  117. data/lib/rubocop/cop/internal_affairs/operator_keyword.rb +48 -0
  118. data/lib/rubocop/cop/internal_affairs/plugin.rb +33 -0
  119. data/lib/rubocop/cop/internal_affairs/processed_source_buffer_name.rb +42 -0
  120. data/lib/rubocop/cop/internal_affairs/redundant_context_config_parameter.rb +46 -0
  121. data/lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb +63 -0
  122. data/lib/rubocop/cop/internal_affairs/redundant_expect_offense_arguments.rb +34 -0
  123. data/lib/rubocop/cop/internal_affairs/redundant_let_rubocop_config_new.rb +73 -0
  124. data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +53 -0
  125. data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +61 -0
  126. data/lib/rubocop/cop/internal_affairs/redundant_method_dispatch_node.rb +56 -0
  127. data/lib/rubocop/cop/internal_affairs/redundant_source_range.rb +75 -0
  128. data/lib/rubocop/cop/internal_affairs/single_line_comparison.rb +63 -0
  129. data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +146 -0
  130. data/lib/rubocop/cop/internal_affairs/undefined_config.rb +94 -0
  131. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +49 -0
  132. data/lib/rubocop/cop/internal_affairs/useless_restrict_on_send.rb +60 -0
  133. data/lib/rubocop/cop/internal_affairs.rb +40 -0
  134. data/lib/rubocop/cop/layout/access_modifier_indentation.rb +104 -0
  135. data/lib/rubocop/cop/layout/argument_alignment.rb +151 -0
  136. data/lib/rubocop/cop/layout/array_alignment.rb +84 -0
  137. data/lib/rubocop/cop/layout/assignment_indentation.rb +57 -0
  138. data/lib/rubocop/cop/layout/begin_end_alignment.rb +73 -0
  139. data/lib/rubocop/cop/layout/block_alignment.rb +259 -0
  140. data/lib/rubocop/cop/layout/block_end_newline.rb +83 -0
  141. data/lib/rubocop/cop/layout/case_indentation.rb +219 -0
  142. data/lib/rubocop/cop/layout/class_structure.rb +346 -0
  143. data/lib/rubocop/cop/layout/closing_heredoc_indentation.rb +123 -0
  144. data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +193 -0
  145. data/lib/rubocop/cop/layout/comment_indentation.rb +168 -0
  146. data/lib/rubocop/cop/layout/condition_position.rb +60 -0
  147. data/lib/rubocop/cop/layout/def_end_alignment.rb +73 -0
  148. data/lib/rubocop/cop/layout/dot_position.rb +139 -0
  149. data/lib/rubocop/cop/layout/else_alignment.rb +156 -0
  150. data/lib/rubocop/cop/layout/empty_comment.rb +153 -0
  151. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +214 -0
  152. data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +71 -0
  153. data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +136 -0
  154. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +293 -0
  155. data/lib/rubocop/cop/layout/empty_lines.rb +73 -0
  156. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +237 -0
  157. data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +103 -0
  158. data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +139 -0
  159. data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +41 -0
  160. data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +41 -0
  161. data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +85 -0
  162. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +139 -0
  163. data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +64 -0
  164. data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +59 -0
  165. data/lib/rubocop/cop/layout/end_alignment.rb +210 -0
  166. data/lib/rubocop/cop/layout/end_of_line.rb +92 -0
  167. data/lib/rubocop/cop/layout/extra_spacing.rb +185 -0
  168. data/lib/rubocop/cop/layout/first_argument_indentation.rb +282 -0
  169. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +189 -0
  170. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +68 -0
  171. data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +234 -0
  172. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +68 -0
  173. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +105 -0
  174. data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +75 -0
  175. data/lib/rubocop/cop/layout/first_parameter_indentation.rb +101 -0
  176. data/lib/rubocop/cop/layout/hash_alignment.rb +398 -0
  177. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +312 -0
  178. data/lib/rubocop/cop/layout/heredoc_indentation.rb +165 -0
  179. data/lib/rubocop/cop/layout/indentation_consistency.rb +205 -0
  180. data/lib/rubocop/cop/layout/indentation_style.rb +115 -0
  181. data/lib/rubocop/cop/layout/indentation_width.rb +389 -0
  182. data/lib/rubocop/cop/layout/initial_indentation.rb +55 -0
  183. data/lib/rubocop/cop/layout/leading_comment_space.rb +191 -0
  184. data/lib/rubocop/cop/layout/leading_empty_lines.rb +48 -0
  185. data/lib/rubocop/cop/layout/line_continuation_leading_space.rb +153 -0
  186. data/lib/rubocop/cop/layout/line_continuation_spacing.rb +146 -0
  187. data/lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb +143 -0
  188. data/lib/rubocop/cop/layout/line_length.rb +395 -0
  189. data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +115 -0
  190. data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +65 -0
  191. data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +117 -0
  192. data/lib/rubocop/cop/layout/multiline_block_layout.rb +162 -0
  193. data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +115 -0
  194. data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +74 -0
  195. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +112 -0
  196. data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +132 -0
  197. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +263 -0
  198. data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +128 -0
  199. data/lib/rubocop/cop/layout/multiline_method_parameter_line_breaks.rb +78 -0
  200. data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +126 -0
  201. data/lib/rubocop/cop/layout/parameter_alignment.rb +118 -0
  202. data/lib/rubocop/cop/layout/redundant_line_break.rb +134 -0
  203. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +210 -0
  204. data/lib/rubocop/cop/layout/single_line_block_chain.rb +69 -0
  205. data/lib/rubocop/cop/layout/space_after_colon.rb +49 -0
  206. data/lib/rubocop/cop/layout/space_after_comma.rb +40 -0
  207. data/lib/rubocop/cop/layout/space_after_method_name.rb +39 -0
  208. data/lib/rubocop/cop/layout/space_after_not.rb +39 -0
  209. data/lib/rubocop/cop/layout/space_after_semicolon.rb +29 -0
  210. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +162 -0
  211. data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +89 -0
  212. data/lib/rubocop/cop/layout/space_around_keyword.rb +269 -0
  213. data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +98 -0
  214. data/lib/rubocop/cop/layout/space_around_operators.rb +295 -0
  215. data/lib/rubocop/cop/layout/space_before_block_braces.rb +164 -0
  216. data/lib/rubocop/cop/layout/space_before_brackets.rb +73 -0
  217. data/lib/rubocop/cop/layout/space_before_comma.rb +29 -0
  218. data/lib/rubocop/cop/layout/space_before_comment.rb +34 -0
  219. data/lib/rubocop/cop/layout/space_before_first_arg.rb +73 -0
  220. data/lib/rubocop/cop/layout/space_before_semicolon.rb +24 -0
  221. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +78 -0
  222. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +230 -0
  223. data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +46 -0
  224. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +268 -0
  225. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +212 -0
  226. data/lib/rubocop/cop/layout/space_inside_parens.rb +176 -0
  227. data/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb +94 -0
  228. data/lib/rubocop/cop/layout/space_inside_range_literal.rb +54 -0
  229. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +143 -0
  230. data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +63 -0
  231. data/lib/rubocop/cop/layout/trailing_empty_lines.rb +113 -0
  232. data/lib/rubocop/cop/layout/trailing_whitespace.rb +133 -0
  233. data/lib/rubocop/cop/legacy/corrections_proxy.rb +43 -0
  234. data/lib/rubocop/cop/legacy/corrector.rb +37 -0
  235. data/lib/rubocop/cop/lint/ambiguous_assignment.rb +54 -0
  236. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +105 -0
  237. data/lib/rubocop/cop/lint/ambiguous_operator.rb +105 -0
  238. data/lib/rubocop/cop/lint/ambiguous_operator_precedence.rb +111 -0
  239. data/lib/rubocop/cop/lint/ambiguous_range.rb +108 -0
  240. data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +78 -0
  241. data/lib/rubocop/cop/lint/array_literal_in_regexp.rb +119 -0
  242. data/lib/rubocop/cop/lint/assignment_in_condition.rb +107 -0
  243. data/lib/rubocop/cop/lint/big_decimal_new.rb +41 -0
  244. data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +66 -0
  245. data/lib/rubocop/cop/lint/boolean_symbol.rb +61 -0
  246. data/lib/rubocop/cop/lint/circular_argument_reference.rb +65 -0
  247. data/lib/rubocop/cop/lint/constant_definition_in_block.rb +100 -0
  248. data/lib/rubocop/cop/lint/constant_overwritten_in_rescue.rb +51 -0
  249. data/lib/rubocop/cop/lint/constant_reassignment.rb +148 -0
  250. data/lib/rubocop/cop/lint/constant_resolution.rb +93 -0
  251. data/lib/rubocop/cop/lint/cop_directive_syntax.rb +84 -0
  252. data/lib/rubocop/cop/lint/debugger.rb +146 -0
  253. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +118 -0
  254. data/lib/rubocop/cop/lint/deprecated_constants.rb +88 -0
  255. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +145 -0
  256. data/lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb +110 -0
  257. data/lib/rubocop/cop/lint/duplicate_branch.rb +188 -0
  258. data/lib/rubocop/cop/lint/duplicate_case_condition.rb +39 -0
  259. data/lib/rubocop/cop/lint/duplicate_elsif_condition.rb +39 -0
  260. data/lib/rubocop/cop/lint/duplicate_hash_key.rb +33 -0
  261. data/lib/rubocop/cop/lint/duplicate_magic_comment.rb +73 -0
  262. data/lib/rubocop/cop/lint/duplicate_match_pattern.rb +122 -0
  263. data/lib/rubocop/cop/lint/duplicate_methods.rb +243 -0
  264. data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +121 -0
  265. data/lib/rubocop/cop/lint/duplicate_require.rb +56 -0
  266. data/lib/rubocop/cop/lint/duplicate_rescue_exception.rb +47 -0
  267. data/lib/rubocop/cop/lint/duplicate_set_element.rb +87 -0
  268. data/lib/rubocop/cop/lint/each_with_object_argument.rb +40 -0
  269. data/lib/rubocop/cop/lint/else_layout.rb +88 -0
  270. data/lib/rubocop/cop/lint/empty_block.rb +94 -0
  271. data/lib/rubocop/cop/lint/empty_class.rb +95 -0
  272. data/lib/rubocop/cop/lint/empty_conditional_body.rb +148 -0
  273. data/lib/rubocop/cop/lint/empty_ensure.rb +48 -0
  274. data/lib/rubocop/cop/lint/empty_expression.rb +40 -0
  275. data/lib/rubocop/cop/lint/empty_file.rb +46 -0
  276. data/lib/rubocop/cop/lint/empty_in_pattern.rb +64 -0
  277. data/lib/rubocop/cop/lint/empty_interpolation.rb +29 -0
  278. data/lib/rubocop/cop/lint/empty_when.rb +61 -0
  279. data/lib/rubocop/cop/lint/ensure_return.rb +51 -0
  280. data/lib/rubocop/cop/lint/erb_new_arguments.rb +162 -0
  281. data/lib/rubocop/cop/lint/flip_flop.rb +38 -0
  282. data/lib/rubocop/cop/lint/float_comparison.rb +109 -0
  283. data/lib/rubocop/cop/lint/float_out_of_range.rb +28 -0
  284. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +191 -0
  285. data/lib/rubocop/cop/lint/hash_compare_by_identity.rb +48 -0
  286. data/lib/rubocop/cop/lint/hash_new_with_keyword_arguments_as_default.rb +55 -0
  287. data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +152 -0
  288. data/lib/rubocop/cop/lint/identity_comparison.rb +50 -0
  289. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +112 -0
  290. data/lib/rubocop/cop/lint/incompatible_io_select_with_fiber_scheduler.rb +81 -0
  291. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +114 -0
  292. data/lib/rubocop/cop/lint/inherit_exception.rb +105 -0
  293. data/lib/rubocop/cop/lint/interpolation_check.rb +64 -0
  294. data/lib/rubocop/cop/lint/it_without_arguments_in_block.rb +50 -0
  295. data/lib/rubocop/cop/lint/lambda_without_literal_block.rb +51 -0
  296. data/lib/rubocop/cop/lint/literal_as_condition.rb +259 -0
  297. data/lib/rubocop/cop/lint/literal_assignment_in_condition.rb +85 -0
  298. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +210 -0
  299. data/lib/rubocop/cop/lint/loop.rb +80 -0
  300. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +111 -0
  301. data/lib/rubocop/cop/lint/missing_super.rb +159 -0
  302. data/lib/rubocop/cop/lint/mixed_case_range.rb +113 -0
  303. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +37 -0
  304. data/lib/rubocop/cop/lint/multiple_comparison.rb +48 -0
  305. data/lib/rubocop/cop/lint/nested_method_definition.rb +142 -0
  306. data/lib/rubocop/cop/lint/nested_percent_literal.rb +63 -0
  307. data/lib/rubocop/cop/lint/next_without_accumulator.rb +51 -0
  308. data/lib/rubocop/cop/lint/no_return_in_begin_end_blocks.rb +53 -0
  309. data/lib/rubocop/cop/lint/non_atomic_file_operation.rb +174 -0
  310. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +183 -0
  311. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +86 -0
  312. data/lib/rubocop/cop/lint/number_conversion.rb +200 -0
  313. data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +46 -0
  314. data/lib/rubocop/cop/lint/numeric_operation_with_constant_result.rb +93 -0
  315. data/lib/rubocop/cop/lint/or_assignment_to_constant.rb +41 -0
  316. data/lib/rubocop/cop/lint/ordered_magic_comments.rb +81 -0
  317. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +129 -0
  318. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +87 -0
  319. data/lib/rubocop/cop/lint/percent_string_array.rb +74 -0
  320. data/lib/rubocop/cop/lint/percent_symbol_array.rb +64 -0
  321. data/lib/rubocop/cop/lint/raise_exception.rb +110 -0
  322. data/lib/rubocop/cop/lint/rand_one.rb +42 -0
  323. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +330 -0
  324. data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +135 -0
  325. data/lib/rubocop/cop/lint/redundant_dir_glob_sort.rb +62 -0
  326. data/lib/rubocop/cop/lint/redundant_regexp_quantifiers.rb +130 -0
  327. data/lib/rubocop/cop/lint/redundant_require_statement.rb +78 -0
  328. data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +160 -0
  329. data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +210 -0
  330. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +68 -0
  331. data/lib/rubocop/cop/lint/redundant_type_conversion.rb +261 -0
  332. data/lib/rubocop/cop/lint/redundant_with_index.rb +87 -0
  333. data/lib/rubocop/cop/lint/redundant_with_object.rb +82 -0
  334. data/lib/rubocop/cop/lint/refinement_import_methods.rb +52 -0
  335. data/lib/rubocop/cop/lint/regexp_as_condition.rb +36 -0
  336. data/lib/rubocop/cop/lint/require_parentheses.rb +62 -0
  337. data/lib/rubocop/cop/lint/require_range_parentheses.rb +57 -0
  338. data/lib/rubocop/cop/lint/require_relative_self_path.rb +50 -0
  339. data/lib/rubocop/cop/lint/rescue_exception.rb +41 -0
  340. data/lib/rubocop/cop/lint/rescue_type.rb +82 -0
  341. data/lib/rubocop/cop/lint/return_in_void_context.rb +55 -0
  342. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +116 -0
  343. data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +160 -0
  344. data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +46 -0
  345. data/lib/rubocop/cop/lint/script_permission.rb +73 -0
  346. data/lib/rubocop/cop/lint/self_assignment.rb +114 -0
  347. data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +83 -0
  348. data/lib/rubocop/cop/lint/shadowed_argument.rb +177 -0
  349. data/lib/rubocop/cop/lint/shadowed_exception.rb +165 -0
  350. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +111 -0
  351. data/lib/rubocop/cop/lint/shared_mutable_default.rb +76 -0
  352. data/lib/rubocop/cop/lint/struct_new_override.rb +59 -0
  353. data/lib/rubocop/cop/lint/suppressed_exception.rb +132 -0
  354. data/lib/rubocop/cop/lint/suppressed_exception_in_number_conversion.rb +111 -0
  355. data/lib/rubocop/cop/lint/symbol_conversion.rb +184 -0
  356. data/lib/rubocop/cop/lint/syntax.rb +49 -0
  357. data/lib/rubocop/cop/lint/to_enum_arguments.rb +99 -0
  358. data/lib/rubocop/cop/lint/to_json.rb +49 -0
  359. data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +48 -0
  360. data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +55 -0
  361. data/lib/rubocop/cop/lint/triple_quotes.rb +71 -0
  362. data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +80 -0
  363. data/lib/rubocop/cop/lint/unescaped_bracket_in_regexp.rb +88 -0
  364. data/lib/rubocop/cop/lint/unexpected_block_arity.rb +92 -0
  365. data/lib/rubocop/cop/lint/unified_integer.rb +40 -0
  366. data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +205 -0
  367. data/lib/rubocop/cop/lint/unreachable_code.rb +144 -0
  368. data/lib/rubocop/cop/lint/unreachable_loop.rb +208 -0
  369. data/lib/rubocop/cop/lint/unused_block_argument.rb +172 -0
  370. data/lib/rubocop/cop/lint/unused_method_argument.rb +137 -0
  371. data/lib/rubocop/cop/lint/uri_escape_unescape.rb +79 -0
  372. data/lib/rubocop/cop/lint/uri_regexp.rb +56 -0
  373. data/lib/rubocop/cop/lint/useless_access_modifier.rb +296 -0
  374. data/lib/rubocop/cop/lint/useless_assignment.rb +212 -0
  375. data/lib/rubocop/cop/lint/useless_constant_scoping.rb +71 -0
  376. data/lib/rubocop/cop/lint/useless_defined.rb +55 -0
  377. data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +44 -0
  378. data/lib/rubocop/cop/lint/useless_method_definition.rb +77 -0
  379. data/lib/rubocop/cop/lint/useless_numeric_operation.rb +78 -0
  380. data/lib/rubocop/cop/lint/useless_rescue.rb +89 -0
  381. data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +127 -0
  382. data/lib/rubocop/cop/lint/useless_setter_call.rb +158 -0
  383. data/lib/rubocop/cop/lint/useless_times.rb +114 -0
  384. data/lib/rubocop/cop/lint/void.rb +272 -0
  385. data/lib/rubocop/cop/message_annotator.rb +134 -0
  386. data/lib/rubocop/cop/metrics/abc_size.rb +56 -0
  387. data/lib/rubocop/cop/metrics/block_length.rb +88 -0
  388. data/lib/rubocop/cop/metrics/block_nesting.rb +72 -0
  389. data/lib/rubocop/cop/metrics/class_length.rb +77 -0
  390. data/lib/rubocop/cop/metrics/collection_literal_length.rb +83 -0
  391. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +58 -0
  392. data/lib/rubocop/cop/metrics/method_length.rb +80 -0
  393. data/lib/rubocop/cop/metrics/module_length.rb +62 -0
  394. data/lib/rubocop/cop/metrics/parameter_lists.rb +147 -0
  395. data/lib/rubocop/cop/metrics/perceived_complexity.rb +59 -0
  396. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +140 -0
  397. data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +209 -0
  398. data/lib/rubocop/cop/metrics/utils/iterating_block.rb +61 -0
  399. data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +143 -0
  400. data/lib/rubocop/cop/metrics/utils/repeated_csend_discount.rb +42 -0
  401. data/lib/rubocop/cop/migration/department_name.rb +81 -0
  402. data/lib/rubocop/cop/mixin/alignment.rb +85 -0
  403. data/lib/rubocop/cop/mixin/allowed_identifiers.rb +18 -0
  404. data/lib/rubocop/cop/mixin/allowed_methods.rb +48 -0
  405. data/lib/rubocop/cop/mixin/allowed_pattern.rb +68 -0
  406. data/lib/rubocop/cop/mixin/allowed_receivers.rb +34 -0
  407. data/lib/rubocop/cop/mixin/annotation_comment.rb +70 -0
  408. data/lib/rubocop/cop/mixin/array_min_size.rb +57 -0
  409. data/lib/rubocop/cop/mixin/array_syntax.rb +17 -0
  410. data/lib/rubocop/cop/mixin/auto_corrector.rb +12 -0
  411. data/lib/rubocop/cop/mixin/check_assignment.rb +36 -0
  412. data/lib/rubocop/cop/mixin/check_line_breakable.rb +237 -0
  413. data/lib/rubocop/cop/mixin/check_single_line_suitability.rb +49 -0
  414. data/lib/rubocop/cop/mixin/code_length.rb +70 -0
  415. data/lib/rubocop/cop/mixin/comments_help.rb +95 -0
  416. data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +112 -0
  417. data/lib/rubocop/cop/mixin/configurable_formatting.rb +41 -0
  418. data/lib/rubocop/cop/mixin/configurable_max.rb +28 -0
  419. data/lib/rubocop/cop/mixin/configurable_naming.rb +16 -0
  420. data/lib/rubocop/cop/mixin/configurable_numbering.rb +18 -0
  421. data/lib/rubocop/cop/mixin/def_node.rb +26 -0
  422. data/lib/rubocop/cop/mixin/dig_help.rb +27 -0
  423. data/lib/rubocop/cop/mixin/documentation_comment.rb +52 -0
  424. data/lib/rubocop/cop/mixin/duplication.rb +46 -0
  425. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +172 -0
  426. data/lib/rubocop/cop/mixin/empty_parameter.rb +25 -0
  427. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +80 -0
  428. data/lib/rubocop/cop/mixin/endless_method_rewriter.rb +24 -0
  429. data/lib/rubocop/cop/mixin/enforce_superclass.rb +44 -0
  430. data/lib/rubocop/cop/mixin/first_element_line_break.rb +50 -0
  431. data/lib/rubocop/cop/mixin/forbidden_identifiers.rb +20 -0
  432. data/lib/rubocop/cop/mixin/forbidden_pattern.rb +16 -0
  433. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +99 -0
  434. data/lib/rubocop/cop/mixin/gem_declaration.rb +13 -0
  435. data/lib/rubocop/cop/mixin/gemspec_help.rb +30 -0
  436. data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +156 -0
  437. data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +236 -0
  438. data/lib/rubocop/cop/mixin/hash_subset.rb +203 -0
  439. data/lib/rubocop/cop/mixin/hash_transform_method.rb +192 -0
  440. data/lib/rubocop/cop/mixin/heredoc.rb +41 -0
  441. data/lib/rubocop/cop/mixin/integer_node.rb +14 -0
  442. data/lib/rubocop/cop/mixin/interpolation.rb +25 -0
  443. data/lib/rubocop/cop/mixin/line_length_help.rb +116 -0
  444. data/lib/rubocop/cop/mixin/match_range.rb +23 -0
  445. data/lib/rubocop/cop/mixin/method_complexity.rb +84 -0
  446. data/lib/rubocop/cop/mixin/method_preference.rb +30 -0
  447. data/lib/rubocop/cop/mixin/min_body_length.rb +21 -0
  448. data/lib/rubocop/cop/mixin/min_branches_count.rb +40 -0
  449. data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +109 -0
  450. data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +32 -0
  451. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +226 -0
  452. data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +141 -0
  453. data/lib/rubocop/cop/mixin/negative_conditional.rb +34 -0
  454. data/lib/rubocop/cop/mixin/nil_methods.rb +23 -0
  455. data/lib/rubocop/cop/mixin/on_normal_if_unless.rb +14 -0
  456. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +66 -0
  457. data/lib/rubocop/cop/mixin/parentheses.rb +16 -0
  458. data/lib/rubocop/cop/mixin/percent_array.rb +125 -0
  459. data/lib/rubocop/cop/mixin/percent_literal.rb +32 -0
  460. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +219 -0
  461. data/lib/rubocop/cop/mixin/preferred_delimiters.rb +50 -0
  462. data/lib/rubocop/cop/mixin/range_help.rb +160 -0
  463. data/lib/rubocop/cop/mixin/rational_literal.rb +19 -0
  464. data/lib/rubocop/cop/mixin/require_library.rb +61 -0
  465. data/lib/rubocop/cop/mixin/rescue_node.rb +34 -0
  466. data/lib/rubocop/cop/mixin/safe_assignment.rb +27 -0
  467. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +54 -0
  468. data/lib/rubocop/cop/mixin/space_before_punctuation.rb +49 -0
  469. data/lib/rubocop/cop/mixin/statement_modifier.rb +115 -0
  470. data/lib/rubocop/cop/mixin/string_help.rb +40 -0
  471. data/lib/rubocop/cop/mixin/string_literals_help.rb +33 -0
  472. data/lib/rubocop/cop/mixin/surrounding_space.rb +134 -0
  473. data/lib/rubocop/cop/mixin/symbol_help.rb +13 -0
  474. data/lib/rubocop/cop/mixin/target_ruby_version.rb +36 -0
  475. data/lib/rubocop/cop/mixin/trailing_body.rb +25 -0
  476. data/lib/rubocop/cop/mixin/trailing_comma.rb +221 -0
  477. data/lib/rubocop/cop/mixin/uncommunicative_name.rb +104 -0
  478. data/lib/rubocop/cop/mixin/unused_argument.rb +29 -0
  479. data/lib/rubocop/cop/mixin/visibility_help.rb +72 -0
  480. data/lib/rubocop/cop/naming/accessor_method_name.rb +78 -0
  481. data/lib/rubocop/cop/naming/ascii_identifiers.rb +90 -0
  482. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +53 -0
  483. data/lib/rubocop/cop/naming/block_forwarding.rb +156 -0
  484. data/lib/rubocop/cop/naming/block_parameter_name.rb +49 -0
  485. data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +45 -0
  486. data/lib/rubocop/cop/naming/constant_name.rb +82 -0
  487. data/lib/rubocop/cop/naming/file_name.rb +245 -0
  488. data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +68 -0
  489. data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +57 -0
  490. data/lib/rubocop/cop/naming/inclusive_language.rb +297 -0
  491. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +294 -0
  492. data/lib/rubocop/cop/naming/method_name.rb +137 -0
  493. data/lib/rubocop/cop/naming/method_parameter_name.rb +58 -0
  494. data/lib/rubocop/cop/naming/predicate_name.rb +204 -0
  495. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +172 -0
  496. data/lib/rubocop/cop/naming/variable_name.rb +112 -0
  497. data/lib/rubocop/cop/naming/variable_number.rb +155 -0
  498. data/lib/rubocop/cop/offense.rb +238 -0
  499. data/lib/rubocop/cop/registry.rb +318 -0
  500. data/lib/rubocop/cop/security/compound_hash.rb +108 -0
  501. data/lib/rubocop/cop/security/eval.rb +33 -0
  502. data/lib/rubocop/cop/security/io_methods.rb +49 -0
  503. data/lib/rubocop/cop/security/json_load.rb +47 -0
  504. data/lib/rubocop/cop/security/marshal_load.rb +39 -0
  505. data/lib/rubocop/cop/security/open.rb +89 -0
  506. data/lib/rubocop/cop/security/yaml_load.rb +50 -0
  507. data/lib/rubocop/cop/severity.rb +67 -0
  508. data/lib/rubocop/cop/style/access_modifier_declarations.rb +343 -0
  509. data/lib/rubocop/cop/style/accessor_grouping.rb +202 -0
  510. data/lib/rubocop/cop/style/alias.rb +158 -0
  511. data/lib/rubocop/cop/style/ambiguous_endless_method_definition.rb +79 -0
  512. data/lib/rubocop/cop/style/and_or.rb +158 -0
  513. data/lib/rubocop/cop/style/arguments_forwarding.rb +567 -0
  514. data/lib/rubocop/cop/style/array_coercion.rb +87 -0
  515. data/lib/rubocop/cop/style/array_first_last.rb +80 -0
  516. data/lib/rubocop/cop/style/array_intersect.rb +131 -0
  517. data/lib/rubocop/cop/style/array_join.rb +39 -0
  518. data/lib/rubocop/cop/style/ascii_comments.rb +57 -0
  519. data/lib/rubocop/cop/style/attr.rb +80 -0
  520. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +55 -0
  521. data/lib/rubocop/cop/style/bare_percent_literals.rb +76 -0
  522. data/lib/rubocop/cop/style/begin_block.rb +21 -0
  523. data/lib/rubocop/cop/style/bisected_attr_accessor/macro.rb +60 -0
  524. data/lib/rubocop/cop/style/bisected_attr_accessor.rb +125 -0
  525. data/lib/rubocop/cop/style/bitwise_predicate.rb +100 -0
  526. data/lib/rubocop/cop/style/block_comments.rb +66 -0
  527. data/lib/rubocop/cop/style/block_delimiters.rb +503 -0
  528. data/lib/rubocop/cop/style/case_equality.rb +108 -0
  529. data/lib/rubocop/cop/style/case_like_if.rb +277 -0
  530. data/lib/rubocop/cop/style/character_literal.rb +57 -0
  531. data/lib/rubocop/cop/style/class_and_module_children.rb +217 -0
  532. data/lib/rubocop/cop/style/class_check.rb +55 -0
  533. data/lib/rubocop/cop/style/class_equality_comparison.rb +134 -0
  534. data/lib/rubocop/cop/style/class_methods.rb +54 -0
  535. data/lib/rubocop/cop/style/class_methods_definitions.rb +158 -0
  536. data/lib/rubocop/cop/style/class_vars.rb +64 -0
  537. data/lib/rubocop/cop/style/collection_compact.rb +143 -0
  538. data/lib/rubocop/cop/style/collection_methods.rb +93 -0
  539. data/lib/rubocop/cop/style/colon_method_call.rb +46 -0
  540. data/lib/rubocop/cop/style/colon_method_definition.rb +37 -0
  541. data/lib/rubocop/cop/style/combinable_defined.rb +115 -0
  542. data/lib/rubocop/cop/style/combinable_loops.rb +131 -0
  543. data/lib/rubocop/cop/style/command_literal.rb +181 -0
  544. data/lib/rubocop/cop/style/comment_annotation.rb +130 -0
  545. data/lib/rubocop/cop/style/commented_keyword.rb +118 -0
  546. data/lib/rubocop/cop/style/comparable_between.rb +75 -0
  547. data/lib/rubocop/cop/style/comparable_clamp.rb +125 -0
  548. data/lib/rubocop/cop/style/concat_array_literals.rb +95 -0
  549. data/lib/rubocop/cop/style/conditional_assignment.rb +674 -0
  550. data/lib/rubocop/cop/style/constant_visibility.rb +97 -0
  551. data/lib/rubocop/cop/style/copyright.rb +109 -0
  552. data/lib/rubocop/cop/style/data_inheritance.rb +75 -0
  553. data/lib/rubocop/cop/style/date_time.rb +94 -0
  554. data/lib/rubocop/cop/style/def_with_parentheses.rb +57 -0
  555. data/lib/rubocop/cop/style/dig_chain.rb +89 -0
  556. data/lib/rubocop/cop/style/dir.rb +50 -0
  557. data/lib/rubocop/cop/style/dir_empty.rb +54 -0
  558. data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +87 -0
  559. data/lib/rubocop/cop/style/document_dynamic_eval_definition.rb +169 -0
  560. data/lib/rubocop/cop/style/documentation.rb +198 -0
  561. data/lib/rubocop/cop/style/documentation_method.rb +152 -0
  562. data/lib/rubocop/cop/style/double_cop_disable_directive.rb +46 -0
  563. data/lib/rubocop/cop/style/double_negation.rb +159 -0
  564. data/lib/rubocop/cop/style/each_for_simple_loop.rb +86 -0
  565. data/lib/rubocop/cop/style/each_with_object.rb +138 -0
  566. data/lib/rubocop/cop/style/empty_block_parameter.rb +47 -0
  567. data/lib/rubocop/cop/style/empty_case_condition.rb +117 -0
  568. data/lib/rubocop/cop/style/empty_else.rb +207 -0
  569. data/lib/rubocop/cop/style/empty_heredoc.rb +60 -0
  570. data/lib/rubocop/cop/style/empty_lambda_parameter.rb +44 -0
  571. data/lib/rubocop/cop/style/empty_literal.rb +151 -0
  572. data/lib/rubocop/cop/style/empty_method.rb +119 -0
  573. data/lib/rubocop/cop/style/encoding.rb +63 -0
  574. data/lib/rubocop/cop/style/end_block.rb +28 -0
  575. data/lib/rubocop/cop/style/endless_method.rb +233 -0
  576. data/lib/rubocop/cop/style/env_home.rb +56 -0
  577. data/lib/rubocop/cop/style/eval_with_location.rb +229 -0
  578. data/lib/rubocop/cop/style/even_odd.rb +56 -0
  579. data/lib/rubocop/cop/style/exact_regexp_match.rb +69 -0
  580. data/lib/rubocop/cop/style/expand_path_arguments.rb +191 -0
  581. data/lib/rubocop/cop/style/explicit_block_argument.rb +166 -0
  582. data/lib/rubocop/cop/style/exponential_notation.rb +116 -0
  583. data/lib/rubocop/cop/style/fetch_env_var.rb +133 -0
  584. data/lib/rubocop/cop/style/file_empty.rb +71 -0
  585. data/lib/rubocop/cop/style/file_null.rb +89 -0
  586. data/lib/rubocop/cop/style/file_read.rb +109 -0
  587. data/lib/rubocop/cop/style/file_touch.rb +75 -0
  588. data/lib/rubocop/cop/style/file_write.rb +133 -0
  589. data/lib/rubocop/cop/style/float_division.rb +155 -0
  590. data/lib/rubocop/cop/style/for.rb +90 -0
  591. data/lib/rubocop/cop/style/format_string.rb +154 -0
  592. data/lib/rubocop/cop/style/format_string_token.rb +255 -0
  593. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +221 -0
  594. data/lib/rubocop/cop/style/global_std_stream.rb +79 -0
  595. data/lib/rubocop/cop/style/global_vars.rb +78 -0
  596. data/lib/rubocop/cop/style/guard_clause.rb +319 -0
  597. data/lib/rubocop/cop/style/hash_as_last_array_item.rb +100 -0
  598. data/lib/rubocop/cop/style/hash_conversion.rb +143 -0
  599. data/lib/rubocop/cop/style/hash_each_methods.rb +221 -0
  600. data/lib/rubocop/cop/style/hash_except.rb +80 -0
  601. data/lib/rubocop/cop/style/hash_fetch_chain.rb +104 -0
  602. data/lib/rubocop/cop/style/hash_like_case.rb +71 -0
  603. data/lib/rubocop/cop/style/hash_slice.rb +80 -0
  604. data/lib/rubocop/cop/style/hash_syntax.rb +307 -0
  605. data/lib/rubocop/cop/style/hash_transform_keys.rb +95 -0
  606. data/lib/rubocop/cop/style/hash_transform_values.rb +93 -0
  607. data/lib/rubocop/cop/style/identical_conditional_branches.rb +273 -0
  608. data/lib/rubocop/cop/style/if_inside_else.rb +152 -0
  609. data/lib/rubocop/cop/style/if_unless_modifier.rb +295 -0
  610. data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +47 -0
  611. data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +163 -0
  612. data/lib/rubocop/cop/style/if_with_semicolon.rb +132 -0
  613. data/lib/rubocop/cop/style/implicit_runtime_error.rb +34 -0
  614. data/lib/rubocop/cop/style/in_pattern_then.rb +60 -0
  615. data/lib/rubocop/cop/style/infinite_loop.rb +127 -0
  616. data/lib/rubocop/cop/style/inline_comment.rb +34 -0
  617. data/lib/rubocop/cop/style/inverse_methods.rb +200 -0
  618. data/lib/rubocop/cop/style/invertible_unless_condition.rb +160 -0
  619. data/lib/rubocop/cop/style/ip_addresses.rb +75 -0
  620. data/lib/rubocop/cop/style/it_assignment.rb +36 -0
  621. data/lib/rubocop/cop/style/it_block_parameter.rb +100 -0
  622. data/lib/rubocop/cop/style/keyword_arguments_merging.rb +67 -0
  623. data/lib/rubocop/cop/style/keyword_parameters_order.rb +81 -0
  624. data/lib/rubocop/cop/style/lambda.rb +126 -0
  625. data/lib/rubocop/cop/style/lambda_call.rb +79 -0
  626. data/lib/rubocop/cop/style/line_end_concatenation.rb +143 -0
  627. data/lib/rubocop/cop/style/magic_comment_format.rb +307 -0
  628. data/lib/rubocop/cop/style/map_compact_with_conditional_block.rb +168 -0
  629. data/lib/rubocop/cop/style/map_into_array.rb +236 -0
  630. data/lib/rubocop/cop/style/map_to_hash.rb +81 -0
  631. data/lib/rubocop/cop/style/map_to_set.rb +65 -0
  632. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +258 -0
  633. data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +48 -0
  634. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +248 -0
  635. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +120 -0
  636. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +55 -0
  637. data/lib/rubocop/cop/style/method_def_parentheses.rb +180 -0
  638. data/lib/rubocop/cop/style/min_max.rb +64 -0
  639. data/lib/rubocop/cop/style/min_max_comparison.rb +83 -0
  640. data/lib/rubocop/cop/style/missing_else.rb +185 -0
  641. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +82 -0
  642. data/lib/rubocop/cop/style/mixin_grouping.rb +135 -0
  643. data/lib/rubocop/cop/style/mixin_usage.rb +72 -0
  644. data/lib/rubocop/cop/style/module_function.rb +170 -0
  645. data/lib/rubocop/cop/style/multiline_block_chain.rb +51 -0
  646. data/lib/rubocop/cop/style/multiline_if_modifier.rb +56 -0
  647. data/lib/rubocop/cop/style/multiline_if_then.rb +44 -0
  648. data/lib/rubocop/cop/style/multiline_in_pattern_then.rb +60 -0
  649. data/lib/rubocop/cop/style/multiline_memoization.rb +96 -0
  650. data/lib/rubocop/cop/style/multiline_method_signature.rb +95 -0
  651. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +102 -0
  652. data/lib/rubocop/cop/style/multiline_when_then.rb +60 -0
  653. data/lib/rubocop/cop/style/multiple_comparison.rb +164 -0
  654. data/lib/rubocop/cop/style/mutable_constant.rb +246 -0
  655. data/lib/rubocop/cop/style/negated_if.rb +98 -0
  656. data/lib/rubocop/cop/style/negated_if_else_condition.rb +137 -0
  657. data/lib/rubocop/cop/style/negated_unless.rb +88 -0
  658. data/lib/rubocop/cop/style/negated_while.rb +40 -0
  659. data/lib/rubocop/cop/style/nested_file_dirname.rb +66 -0
  660. data/lib/rubocop/cop/style/nested_modifier.rb +100 -0
  661. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +79 -0
  662. data/lib/rubocop/cop/style/nested_ternary_operator.rb +63 -0
  663. data/lib/rubocop/cop/style/next.rb +277 -0
  664. data/lib/rubocop/cop/style/nil_comparison.rb +85 -0
  665. data/lib/rubocop/cop/style/nil_lambda.rb +70 -0
  666. data/lib/rubocop/cop/style/non_nil_check.rb +158 -0
  667. data/lib/rubocop/cop/style/not.rb +76 -0
  668. data/lib/rubocop/cop/style/numbered_parameters.rb +46 -0
  669. data/lib/rubocop/cop/style/numbered_parameters_limit.rb +58 -0
  670. data/lib/rubocop/cop/style/numeric_literal_prefix.rb +119 -0
  671. data/lib/rubocop/cop/style/numeric_literals.rb +129 -0
  672. data/lib/rubocop/cop/style/numeric_predicate.rb +185 -0
  673. data/lib/rubocop/cop/style/object_then.rb +76 -0
  674. data/lib/rubocop/cop/style/one_line_conditional.rb +148 -0
  675. data/lib/rubocop/cop/style/open_struct_use.rb +69 -0
  676. data/lib/rubocop/cop/style/operator_method_call.rb +91 -0
  677. data/lib/rubocop/cop/style/option_hash.rb +54 -0
  678. data/lib/rubocop/cop/style/optional_arguments.rb +59 -0
  679. data/lib/rubocop/cop/style/optional_boolean_parameter.rb +64 -0
  680. data/lib/rubocop/cop/style/or_assignment.rb +94 -0
  681. data/lib/rubocop/cop/style/parallel_assignment.rb +290 -0
  682. data/lib/rubocop/cop/style/parentheses_around_condition.rb +136 -0
  683. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +118 -0
  684. data/lib/rubocop/cop/style/percent_q_literals.rb +70 -0
  685. data/lib/rubocop/cop/style/perl_backrefs.rb +127 -0
  686. data/lib/rubocop/cop/style/preferred_hash_methods.rb +74 -0
  687. data/lib/rubocop/cop/style/proc.rb +37 -0
  688. data/lib/rubocop/cop/style/quoted_symbols.rb +122 -0
  689. data/lib/rubocop/cop/style/raise_args.rb +160 -0
  690. data/lib/rubocop/cop/style/random_with_offset.rb +153 -0
  691. data/lib/rubocop/cop/style/redundant_argument.rb +129 -0
  692. data/lib/rubocop/cop/style/redundant_array_constructor.rb +77 -0
  693. data/lib/rubocop/cop/style/redundant_assignment.rb +114 -0
  694. data/lib/rubocop/cop/style/redundant_begin.rb +205 -0
  695. data/lib/rubocop/cop/style/redundant_capital_w.rb +46 -0
  696. data/lib/rubocop/cop/style/redundant_condition.rb +342 -0
  697. data/lib/rubocop/cop/style/redundant_conditional.rb +84 -0
  698. data/lib/rubocop/cop/style/redundant_constant_base.rb +85 -0
  699. data/lib/rubocop/cop/style/redundant_current_directory_in_path.rb +50 -0
  700. data/lib/rubocop/cop/style/redundant_double_splat_hash_braces.rb +129 -0
  701. data/lib/rubocop/cop/style/redundant_each.rb +119 -0
  702. data/lib/rubocop/cop/style/redundant_exception.rb +85 -0
  703. data/lib/rubocop/cop/style/redundant_fetch_block.rb +121 -0
  704. data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +61 -0
  705. data/lib/rubocop/cop/style/redundant_filter_chain.rb +118 -0
  706. data/lib/rubocop/cop/style/redundant_format.rb +257 -0
  707. data/lib/rubocop/cop/style/redundant_freeze.rb +69 -0
  708. data/lib/rubocop/cop/style/redundant_heredoc_delimiter_quotes.rb +58 -0
  709. data/lib/rubocop/cop/style/redundant_initialize.rb +165 -0
  710. data/lib/rubocop/cop/style/redundant_interpolation.rb +138 -0
  711. data/lib/rubocop/cop/style/redundant_interpolation_unfreeze.rb +46 -0
  712. data/lib/rubocop/cop/style/redundant_line_continuation.rb +236 -0
  713. data/lib/rubocop/cop/style/redundant_parentheses.rb +313 -0
  714. data/lib/rubocop/cop/style/redundant_percent_q.rb +108 -0
  715. data/lib/rubocop/cop/style/redundant_regexp_argument.rb +107 -0
  716. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +119 -0
  717. data/lib/rubocop/cop/style/redundant_regexp_constructor.rb +46 -0
  718. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +120 -0
  719. data/lib/rubocop/cop/style/redundant_return.rb +189 -0
  720. data/lib/rubocop/cop/style/redundant_self.rb +212 -0
  721. data/lib/rubocop/cop/style/redundant_self_assignment.rb +106 -0
  722. data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +90 -0
  723. data/lib/rubocop/cop/style/redundant_sort.rb +209 -0
  724. data/lib/rubocop/cop/style/redundant_sort_by.rb +79 -0
  725. data/lib/rubocop/cop/style/redundant_string_escape.rb +185 -0
  726. data/lib/rubocop/cop/style/regexp_literal.rb +231 -0
  727. data/lib/rubocop/cop/style/require_order.rb +139 -0
  728. data/lib/rubocop/cop/style/rescue_modifier.rb +112 -0
  729. data/lib/rubocop/cop/style/rescue_standard_error.rb +126 -0
  730. data/lib/rubocop/cop/style/return_nil.rb +99 -0
  731. data/lib/rubocop/cop/style/return_nil_in_predicate_method_definition.rb +137 -0
  732. data/lib/rubocop/cop/style/safe_navigation.rb +395 -0
  733. data/lib/rubocop/cop/style/safe_navigation_chain_length.rb +52 -0
  734. data/lib/rubocop/cop/style/sample.rb +144 -0
  735. data/lib/rubocop/cop/style/select_by_regexp.rb +169 -0
  736. data/lib/rubocop/cop/style/self_assignment.rb +95 -0
  737. data/lib/rubocop/cop/style/semicolon.rb +172 -0
  738. data/lib/rubocop/cop/style/send.rb +29 -0
  739. data/lib/rubocop/cop/style/send_with_literal_method_name.rb +105 -0
  740. data/lib/rubocop/cop/style/signal_exception.rb +217 -0
  741. data/lib/rubocop/cop/style/single_argument_dig.rb +73 -0
  742. data/lib/rubocop/cop/style/single_line_block_params.rb +119 -0
  743. data/lib/rubocop/cop/style/single_line_do_end_block.rb +78 -0
  744. data/lib/rubocop/cop/style/single_line_methods.rb +144 -0
  745. data/lib/rubocop/cop/style/slicing_with_range.rb +146 -0
  746. data/lib/rubocop/cop/style/sole_nested_conditional.rb +205 -0
  747. data/lib/rubocop/cop/style/special_global_vars.rb +259 -0
  748. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +79 -0
  749. data/lib/rubocop/cop/style/static_class.rb +128 -0
  750. data/lib/rubocop/cop/style/stderr_puts.rb +57 -0
  751. data/lib/rubocop/cop/style/string_chars.rb +42 -0
  752. data/lib/rubocop/cop/style/string_concatenation.rb +179 -0
  753. data/lib/rubocop/cop/style/string_hash_keys.rb +58 -0
  754. data/lib/rubocop/cop/style/string_literals.rb +129 -0
  755. data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +76 -0
  756. data/lib/rubocop/cop/style/string_methods.rb +36 -0
  757. data/lib/rubocop/cop/style/strip.rb +45 -0
  758. data/lib/rubocop/cop/style/struct_inheritance.rb +72 -0
  759. data/lib/rubocop/cop/style/super_arguments.rb +221 -0
  760. data/lib/rubocop/cop/style/super_with_args_parentheses.rb +35 -0
  761. data/lib/rubocop/cop/style/swap_values.rb +101 -0
  762. data/lib/rubocop/cop/style/symbol_array.rb +133 -0
  763. data/lib/rubocop/cop/style/symbol_literal.rb +28 -0
  764. data/lib/rubocop/cop/style/symbol_proc.rb +282 -0
  765. data/lib/rubocop/cop/style/ternary_parentheses.rb +240 -0
  766. data/lib/rubocop/cop/style/top_level_method_definition.rb +86 -0
  767. data/lib/rubocop/cop/style/trailing_body_on_class.rb +41 -0
  768. data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +55 -0
  769. data/lib/rubocop/cop/style/trailing_body_on_module.rb +40 -0
  770. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +109 -0
  771. data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +137 -0
  772. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +105 -0
  773. data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +139 -0
  774. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +62 -0
  775. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +152 -0
  776. data/lib/rubocop/cop/style/trivial_accessors.rb +254 -0
  777. data/lib/rubocop/cop/style/unless_else.rb +55 -0
  778. data/lib/rubocop/cop/style/unless_logical_operators.rb +106 -0
  779. data/lib/rubocop/cop/style/unpack_first.rb +59 -0
  780. data/lib/rubocop/cop/style/variable_interpolation.rb +44 -0
  781. data/lib/rubocop/cop/style/when_then.rb +37 -0
  782. data/lib/rubocop/cop/style/while_until_do.rb +47 -0
  783. data/lib/rubocop/cop/style/while_until_modifier.rb +51 -0
  784. data/lib/rubocop/cop/style/word_array.rb +155 -0
  785. data/lib/rubocop/cop/style/yaml_file_read.rb +66 -0
  786. data/lib/rubocop/cop/style/yoda_condition.rb +185 -0
  787. data/lib/rubocop/cop/style/yoda_expression.rb +92 -0
  788. data/lib/rubocop/cop/style/zero_length_predicate.rb +154 -0
  789. data/lib/rubocop/cop/team.rb +290 -0
  790. data/lib/rubocop/cop/util.rb +216 -0
  791. data/lib/rubocop/cop/utils/format_string.rb +138 -0
  792. data/lib/rubocop/cop/variable_force/assignment.rb +152 -0
  793. data/lib/rubocop/cop/variable_force/branch.rb +331 -0
  794. data/lib/rubocop/cop/variable_force/branchable.rb +23 -0
  795. data/lib/rubocop/cop/variable_force/reference.rb +47 -0
  796. data/lib/rubocop/cop/variable_force/scope.rb +106 -0
  797. data/lib/rubocop/cop/variable_force/variable.rb +127 -0
  798. data/lib/rubocop/cop/variable_force/variable_table.rb +131 -0
  799. data/lib/rubocop/cop/variable_force.rb +445 -0
  800. data/lib/rubocop/cops_documentation_generator.rb +405 -0
  801. data/lib/rubocop/core_ext/string.rb +19 -0
  802. data/lib/rubocop/directive_comment.rb +180 -0
  803. data/lib/rubocop/error.rb +35 -0
  804. data/lib/rubocop/ext/comment.rb +18 -0
  805. data/lib/rubocop/ext/processed_source.rb +20 -0
  806. data/lib/rubocop/ext/range.rb +15 -0
  807. data/lib/rubocop/ext/regexp_node.rb +69 -0
  808. data/lib/rubocop/ext/regexp_parser.rb +78 -0
  809. data/lib/rubocop/feature_loader.rb +94 -0
  810. data/lib/rubocop/file_finder.rb +43 -0
  811. data/lib/rubocop/file_patterns.rb +43 -0
  812. data/lib/rubocop/formatter/auto_gen_config_formatter.rb +17 -0
  813. data/lib/rubocop/formatter/base_formatter.rb +119 -0
  814. data/lib/rubocop/formatter/clang_style_formatter.rb +55 -0
  815. data/lib/rubocop/formatter/colorizable.rb +41 -0
  816. data/lib/rubocop/formatter/disabled_config_formatter.rb +282 -0
  817. data/lib/rubocop/formatter/emacs_style_formatter.rb +39 -0
  818. data/lib/rubocop/formatter/file_list_formatter.rb +20 -0
  819. data/lib/rubocop/formatter/formatter_set.rb +114 -0
  820. data/lib/rubocop/formatter/fuubar_style_formatter.rb +80 -0
  821. data/lib/rubocop/formatter/github_actions_formatter.rb +57 -0
  822. data/lib/rubocop/formatter/html_formatter.rb +155 -0
  823. data/lib/rubocop/formatter/json_formatter.rb +79 -0
  824. data/lib/rubocop/formatter/junit_formatter.rb +143 -0
  825. data/lib/rubocop/formatter/markdown_formatter.rb +78 -0
  826. data/lib/rubocop/formatter/offense_count_formatter.rb +93 -0
  827. data/lib/rubocop/formatter/pacman_formatter.rb +80 -0
  828. data/lib/rubocop/formatter/progress_formatter.rb +62 -0
  829. data/lib/rubocop/formatter/quiet_formatter.rb +13 -0
  830. data/lib/rubocop/formatter/simple_text_formatter.rb +172 -0
  831. data/lib/rubocop/formatter/tap_formatter.rb +82 -0
  832. data/lib/rubocop/formatter/text_util.rb +20 -0
  833. data/lib/rubocop/formatter/worst_offenders_formatter.rb +64 -0
  834. data/lib/rubocop/formatter.rb +34 -0
  835. data/lib/rubocop/lockfile.rb +91 -0
  836. data/lib/rubocop/lsp/diagnostic.rb +189 -0
  837. data/lib/rubocop/lsp/logger.rb +22 -0
  838. data/lib/rubocop/lsp/routes.rb +227 -0
  839. data/lib/rubocop/lsp/runtime.rb +69 -0
  840. data/lib/rubocop/lsp/server.rb +70 -0
  841. data/lib/rubocop/lsp/severity.rb +27 -0
  842. data/lib/rubocop/lsp/stdin_runner.rb +85 -0
  843. data/lib/rubocop/lsp.rb +36 -0
  844. data/lib/rubocop/magic_comment.rb +308 -0
  845. data/lib/rubocop/name_similarity.rb +29 -0
  846. data/lib/rubocop/options.rb +662 -0
  847. data/lib/rubocop/path_util.rb +122 -0
  848. data/lib/rubocop/platform.rb +11 -0
  849. data/lib/rubocop/plugin/configuration_integrator.rb +143 -0
  850. data/lib/rubocop/plugin/load_error.rb +26 -0
  851. data/lib/rubocop/plugin/loader.rb +100 -0
  852. data/lib/rubocop/plugin/not_supported_error.rb +29 -0
  853. data/lib/rubocop/plugin.rb +46 -0
  854. data/lib/rubocop/rake_task.rb +109 -0
  855. data/lib/rubocop/remote_config.rb +112 -0
  856. data/lib/rubocop/result_cache.rb +234 -0
  857. data/lib/rubocop/rspec/cop_helper.rb +111 -0
  858. data/lib/rubocop/rspec/expect_offense.rb +348 -0
  859. data/lib/rubocop/rspec/parallel_formatter.rb +90 -0
  860. data/lib/rubocop/rspec/shared_contexts.rb +272 -0
  861. data/lib/rubocop/rspec/support.rb +34 -0
  862. data/lib/rubocop/runner.rb +523 -0
  863. data/lib/rubocop/server/cache.rb +206 -0
  864. data/lib/rubocop/server/cli.rb +147 -0
  865. data/lib/rubocop/server/client_command/base.rb +44 -0
  866. data/lib/rubocop/server/client_command/exec.rb +64 -0
  867. data/lib/rubocop/server/client_command/restart.rb +25 -0
  868. data/lib/rubocop/server/client_command/start.rb +48 -0
  869. data/lib/rubocop/server/client_command/status.rb +28 -0
  870. data/lib/rubocop/server/client_command/stop.rb +31 -0
  871. data/lib/rubocop/server/client_command.rb +26 -0
  872. data/lib/rubocop/server/core.rb +116 -0
  873. data/lib/rubocop/server/errors.rb +23 -0
  874. data/lib/rubocop/server/helper.rb +34 -0
  875. data/lib/rubocop/server/server_command/base.rb +50 -0
  876. data/lib/rubocop/server/server_command/exec.rb +33 -0
  877. data/lib/rubocop/server/server_command/stop.rb +24 -0
  878. data/lib/rubocop/server/server_command.rb +21 -0
  879. data/lib/rubocop/server/socket_reader.rb +69 -0
  880. data/lib/rubocop/server.rb +53 -0
  881. data/lib/rubocop/string_interpreter.rb +60 -0
  882. data/lib/rubocop/target_finder.rb +221 -0
  883. data/lib/rubocop/target_ruby.rb +297 -0
  884. data/lib/rubocop/util.rb +16 -0
  885. data/lib/rubocop/version.rb +160 -0
  886. data/lib/rubocop/warning.rb +11 -0
  887. data/lib/rubocop/yaml_duplication_checker.rb +34 -0
  888. data/lib/rubocop.rb +814 -0
  889. data/lib/ruby_lsp/rubocop/addon.rb +75 -0
  890. data/lib/ruby_lsp/rubocop/runtime_adapter.rb +65 -0
  891. metadata +1105 -0
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Style
6
+ # Checks for `in;` uses in `case` expressions.
7
+ #
8
+ # @example
9
+ # # bad
10
+ # case expression
11
+ # in pattern_a; foo
12
+ # in pattern_b; bar
13
+ # end
14
+ #
15
+ # # good
16
+ # case expression
17
+ # in pattern_a then foo
18
+ # in pattern_b then bar
19
+ # end
20
+ #
21
+ class InPatternThen < Base
22
+ extend AutoCorrector
23
+ extend TargetRubyVersion
24
+
25
+ minimum_target_ruby_version 2.7
26
+
27
+ MSG = 'Do not use `in %<pattern>s;`. Use `in %<pattern>s then` instead.'
28
+
29
+ def on_in_pattern(node)
30
+ return if node.multiline? || node.then? || !node.body
31
+
32
+ pattern = node.pattern
33
+ pattern_source = if pattern.match_alt_type?
34
+ alternative_pattern_source(pattern)
35
+ else
36
+ pattern.source
37
+ end
38
+
39
+ add_offense(node.loc.begin, message: format(MSG, pattern: pattern_source)) do |corrector|
40
+ corrector.replace(node.loc.begin, ' then')
41
+ end
42
+ end
43
+
44
+ private
45
+
46
+ def alternative_pattern_source(pattern)
47
+ collect_alternative_patterns(pattern).join(' | ')
48
+ end
49
+
50
+ def collect_alternative_patterns(pattern)
51
+ return pattern.children.map(&:source) unless pattern.children.first.match_alt_type?
52
+
53
+ pattern_sources = collect_alternative_patterns(pattern.children.first)
54
+
55
+ pattern_sources << pattern.children[1].source
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,127 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Style
6
+ # Use `Kernel#loop` for infinite loops.
7
+ #
8
+ # @safety
9
+ # This cop is unsafe as the rule should not necessarily apply if the loop
10
+ # body might raise a `StopIteration` exception; contrary to other infinite
11
+ # loops, `Kernel#loop` silently rescues that and returns `nil`.
12
+ #
13
+ # @example
14
+ # # bad
15
+ # while true
16
+ # work
17
+ # end
18
+ #
19
+ # # good
20
+ # loop do
21
+ # work
22
+ # end
23
+ class InfiniteLoop < Base
24
+ include Alignment
25
+ extend AutoCorrector
26
+
27
+ LEADING_SPACE = /\A(\s*)/.freeze
28
+
29
+ MSG = 'Use `Kernel#loop` for infinite loops.'
30
+
31
+ def self.joining_forces
32
+ VariableForce
33
+ end
34
+
35
+ def after_leaving_scope(scope, _variable_table)
36
+ @variables ||= []
37
+ @variables.concat(scope.variables.values)
38
+ end
39
+
40
+ def on_while(node)
41
+ while_or_until(node) if node.condition.truthy_literal?
42
+ end
43
+
44
+ def on_until(node)
45
+ while_or_until(node) if node.condition.falsey_literal?
46
+ end
47
+
48
+ alias on_while_post on_while
49
+ alias on_until_post on_until
50
+
51
+ private
52
+
53
+ def while_or_until(node)
54
+ range = node.source_range
55
+ # Not every `while true` and `until false` can be turned into a
56
+ # `loop do` without further modification. The reason is that a
57
+ # variable that's introduced inside a while/until loop is in scope
58
+ # outside of that loop too, but a variable that's assigned for the
59
+ # first time inside a block cannot be accessed after the block. In
60
+ # those more complicated cases we don't report an offense.
61
+ return if @variables.any? do |var|
62
+ assigned_inside_loop?(var, range) &&
63
+ !assigned_before_loop?(var, range) &&
64
+ referenced_after_loop?(var, range)
65
+ end
66
+
67
+ add_offense(node.loc.keyword) { |corrector| autocorrect(corrector, node) }
68
+ end
69
+
70
+ def autocorrect(corrector, node)
71
+ if node.type?(:while_post, :until_post)
72
+ replace_begin_end_with_modifier(corrector, node)
73
+ elsif node.modifier_form?
74
+ replace_source(corrector, node.source_range, modifier_replacement(node))
75
+ else
76
+ replace_source(corrector, non_modifier_range(node), 'loop do')
77
+ end
78
+ end
79
+
80
+ def assigned_inside_loop?(var, range)
81
+ var.assignments.any? { |a| range.contains?(a.node.source_range) }
82
+ end
83
+
84
+ def assigned_before_loop?(var, range)
85
+ b = range.begin_pos
86
+ var.assignments.any? { |a| a.node.source_range.end_pos < b }
87
+ end
88
+
89
+ def referenced_after_loop?(var, range)
90
+ e = range.end_pos
91
+ var.references.any? { |r| r.node.source_range.begin_pos > e }
92
+ end
93
+
94
+ def replace_begin_end_with_modifier(corrector, node)
95
+ corrector.replace(node.body.loc.begin, 'loop do')
96
+ corrector.remove(node.body.loc.end.end.join(node.source_range.end))
97
+ end
98
+
99
+ def replace_source(corrector, range, replacement)
100
+ corrector.replace(range, replacement)
101
+ end
102
+
103
+ def modifier_replacement(node)
104
+ body = node.body
105
+ if node.single_line?
106
+ "loop { #{body.source} }"
107
+ else
108
+ indentation = body.source_range.source_line[LEADING_SPACE]
109
+
110
+ ['loop do', body.source.gsub(/^/, indentation(node)), 'end'].join("\n#{indentation}")
111
+ end
112
+ end
113
+
114
+ def non_modifier_range(node)
115
+ start_range = node.loc.keyword.begin
116
+ end_range = if node.do?
117
+ node.loc.begin.end
118
+ else
119
+ node.condition.source_range.end
120
+ end
121
+
122
+ start_range.join(end_range)
123
+ end
124
+ end
125
+ end
126
+ end
127
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Style
6
+ # Checks for trailing inline comments.
7
+ #
8
+ # @example
9
+ #
10
+ # # good
11
+ # foo.each do |f|
12
+ # # Standalone comment
13
+ # f.bar
14
+ # end
15
+ #
16
+ # # bad
17
+ # foo.each do |f|
18
+ # f.bar # Trailing inline comment
19
+ # end
20
+ class InlineComment < Base
21
+ MSG = 'Avoid trailing inline comments.'
22
+
23
+ def on_new_investigation
24
+ processed_source.comments.each do |comment|
25
+ next if comment_line?(processed_source[comment.loc.line - 1]) ||
26
+ comment.text.match?(/\A# rubocop:(enable|disable)/)
27
+
28
+ add_offense(comment)
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,200 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Style
6
+ # Check for usages of not (`not` or `!`) called on a method
7
+ # when an inverse of that method can be used instead.
8
+ #
9
+ # Methods that can be inverted by a not (`not` or `!`) should be defined
10
+ # in `InverseMethods`.
11
+ #
12
+ # Methods that are inverted by inverting the return
13
+ # of the block that is passed to the method should be defined in
14
+ # `InverseBlocks`.
15
+ #
16
+ # @safety
17
+ # This cop is unsafe because it cannot be guaranteed that the method
18
+ # and its inverse method are both defined on receiver, and also are
19
+ # actually inverse of each other.
20
+ #
21
+ # @example
22
+ # # bad
23
+ # !foo.none?
24
+ # !foo.any? { |f| f.even? }
25
+ # !foo.blank?
26
+ # !(foo == bar)
27
+ # foo.select { |f| !f.even? }
28
+ # foo.reject { |f| f != 7 }
29
+ #
30
+ # # good
31
+ # foo.none?
32
+ # foo.blank?
33
+ # foo.any? { |f| f.even? }
34
+ # foo != bar
35
+ # foo == bar
36
+ # !!('foo' =~ /^\w+$/)
37
+ # !(foo.class < Numeric) # Checking class hierarchy is allowed
38
+ # # Blocks with guard clauses are ignored:
39
+ # foo.select do |f|
40
+ # next if f.zero?
41
+ # f != 1
42
+ # end
43
+ class InverseMethods < Base
44
+ include RangeHelp
45
+ extend AutoCorrector
46
+
47
+ MSG = 'Use `%<inverse>s` instead of inverting `%<method>s`.'
48
+ CLASS_COMPARISON_METHODS = %i[<= >= < >].freeze
49
+ SAFE_NAVIGATION_INCOMPATIBLE_METHODS = (CLASS_COMPARISON_METHODS + %i[any? none?]).freeze
50
+ EQUALITY_METHODS = %i[== != =~ !~ <= >= < >].freeze
51
+ NEGATED_EQUALITY_METHODS = %i[!= !~].freeze
52
+ CAMEL_CASE = /[A-Z]+[a-z]+/.freeze
53
+
54
+ RESTRICT_ON_SEND = [:!].freeze
55
+
56
+ def self.autocorrect_incompatible_with
57
+ [Style::Not, Style::SymbolProc]
58
+ end
59
+
60
+ # @!method inverse_candidate?(node)
61
+ def_node_matcher :inverse_candidate?, <<~PATTERN
62
+ {
63
+ (send $(call $(...) $_ $...) :!)
64
+ (send (any_block $(call $(...) $_) $...) :!)
65
+ (send (begin $(call $(...) $_ $...)) :!)
66
+ }
67
+ PATTERN
68
+
69
+ # @!method inverse_block?(node)
70
+ def_node_matcher :inverse_block?, <<~PATTERN
71
+ (any_block $(call (...) $_) ... { $(call ... :!)
72
+ $(send (...) {:!= :!~} ...)
73
+ (begin ... $(call ... :!))
74
+ (begin ... $(send (...) {:!= :!~} ...))
75
+ })
76
+ PATTERN
77
+
78
+ def on_send(node)
79
+ inverse_candidate?(node) do |method_call, lhs, method, rhs|
80
+ return unless inverse_methods.key?(method)
81
+ return if negated?(node) || safe_navigation_incompatible?(method_call)
82
+ return if part_of_ignored_node?(node)
83
+ return if possible_class_hierarchy_check?(lhs, rhs, method)
84
+
85
+ add_offense(node, message: message(method, inverse_methods[method])) do |corrector|
86
+ correct_inverse_method(corrector, node)
87
+ end
88
+ end
89
+ end
90
+ alias on_csend on_send
91
+
92
+ def on_block(node)
93
+ inverse_block?(node) do |_method_call, method, block|
94
+ return unless inverse_blocks.key?(method)
95
+ return if negated?(node) && negated?(node.parent)
96
+ return if node.each_node(:next).any?
97
+
98
+ # Inverse method offenses inside of the block of an inverse method
99
+ # offense, such as `y.reject { |key, _value| !(key =~ /c\d/) }`,
100
+ # can cause autocorrection to apply improper corrections.
101
+ ignore_node(block)
102
+ add_offense(node, message: message(method, inverse_blocks[method])) do |corrector|
103
+ correct_inverse_block(corrector, node)
104
+ end
105
+ end
106
+ end
107
+
108
+ alias on_numblock on_block
109
+ alias on_itblock on_block
110
+
111
+ private
112
+
113
+ def correct_inverse_method(corrector, node)
114
+ method_call, _lhs, method, _rhs = inverse_candidate?(node)
115
+ return unless method_call && method
116
+
117
+ corrector.remove(not_to_receiver(node, method_call))
118
+ corrector.replace(method_call.loc.selector, inverse_methods[method].to_s)
119
+ remove_end_parenthesis(corrector, node, method, method_call)
120
+ end
121
+
122
+ def correct_inverse_block(corrector, node)
123
+ method_call, method, block = inverse_block?(node)
124
+
125
+ corrector.replace(method_call.loc.selector, inverse_blocks[method].to_s)
126
+ correct_inverse_selector(block, corrector)
127
+ end
128
+
129
+ def correct_inverse_selector(block, corrector)
130
+ selector_loc = block.loc.selector
131
+ selector = selector_loc.source
132
+
133
+ if NEGATED_EQUALITY_METHODS.include?(selector.to_sym)
134
+ selector[0] = '='
135
+ corrector.replace(selector_loc, selector)
136
+ else
137
+ if block.loc.dot
138
+ range = dot_range(block.loc)
139
+ corrector.remove(range)
140
+ end
141
+
142
+ corrector.remove(selector_loc)
143
+ end
144
+ end
145
+
146
+ def inverse_methods
147
+ @inverse_methods ||= cop_config['InverseMethods']
148
+ .merge(cop_config['InverseMethods'].invert)
149
+ end
150
+
151
+ def inverse_blocks
152
+ @inverse_blocks ||= cop_config['InverseBlocks'].merge(cop_config['InverseBlocks'].invert)
153
+ end
154
+
155
+ def negated?(node)
156
+ node.parent.respond_to?(:method?) && node.parent.method?(:!)
157
+ end
158
+
159
+ def not_to_receiver(node, method_call)
160
+ node.loc.selector.begin.join(method_call.source_range.begin)
161
+ end
162
+
163
+ def end_parentheses(node, method_call)
164
+ method_call.source_range.end.join(node.source_range.end)
165
+ end
166
+
167
+ def safe_navigation_incompatible?(node)
168
+ return false unless node.csend_type?
169
+
170
+ SAFE_NAVIGATION_INCOMPATIBLE_METHODS.include?(node.method_name)
171
+ end
172
+
173
+ # When comparing classes, `!(Integer < Numeric)` is not the same as
174
+ # `Integer > Numeric`.
175
+ def possible_class_hierarchy_check?(lhs, rhs, method)
176
+ CLASS_COMPARISON_METHODS.include?(method) &&
177
+ (camel_case_constant?(lhs) || (rhs.size == 1 && camel_case_constant?(rhs.first)))
178
+ end
179
+
180
+ def camel_case_constant?(node)
181
+ node.const_type? && CAMEL_CASE.match?(node.source)
182
+ end
183
+
184
+ def dot_range(loc)
185
+ range_between(loc.dot.begin_pos, loc.expression.end_pos)
186
+ end
187
+
188
+ def remove_end_parenthesis(corrector, node, method, method_call)
189
+ return unless EQUALITY_METHODS.include?(method) || method_call.parent.begin_type?
190
+
191
+ corrector.remove(end_parentheses(node, method_call))
192
+ end
193
+
194
+ def message(method, inverse)
195
+ format(MSG, method: method, inverse: inverse)
196
+ end
197
+ end
198
+ end
199
+ end
200
+ end
@@ -0,0 +1,160 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Style
6
+ # Checks for usages of `unless` which can be replaced by `if` with inverted condition.
7
+ # Code without `unless` is easier to read, but that is subjective, so this cop
8
+ # is disabled by default.
9
+ #
10
+ # Methods that can be inverted should be defined in `InverseMethods`. Note that
11
+ # the relationship of inverse methods needs to be defined in both directions.
12
+ # For example,
13
+ #
14
+ # [source,yaml]
15
+ # ----
16
+ # InverseMethods:
17
+ # :!=: :==
18
+ # :even?: :odd?
19
+ # :odd?: :even?
20
+ # ----
21
+ #
22
+ # will suggest both `even?` and `odd?` to be inverted, but only `!=` (and not `==`).
23
+ #
24
+ # @safety
25
+ # This cop is unsafe because it cannot be guaranteed that the method
26
+ # and its inverse method are both defined on receiver, and also are
27
+ # actually inverse of each other.
28
+ #
29
+ # @example
30
+ # # bad (simple condition)
31
+ # foo unless !bar
32
+ # foo unless x != y
33
+ # foo unless x >= 10
34
+ # foo unless x.even?
35
+ # foo unless odd?
36
+ #
37
+ # # good
38
+ # foo if bar
39
+ # foo if x == y
40
+ # foo if x < 10
41
+ # foo if x.odd?
42
+ # foo if even?
43
+ #
44
+ # # bad (complex condition)
45
+ # foo unless x != y || x.even?
46
+ #
47
+ # # good
48
+ # foo if x == y && x.odd?
49
+ #
50
+ # # good (if)
51
+ # foo if !condition
52
+ #
53
+ class InvertibleUnlessCondition < Base
54
+ extend AutoCorrector
55
+
56
+ MSG = 'Prefer `%<prefer>s` over `%<current>s`.'
57
+
58
+ def on_if(node)
59
+ return unless node.unless?
60
+
61
+ condition = node.condition
62
+ return unless invertible?(condition)
63
+
64
+ message = format(MSG, prefer: "#{node.inverse_keyword} #{preferred_condition(condition)}",
65
+ current: "#{node.keyword} #{condition.source}")
66
+
67
+ add_offense(node, message: message) do |corrector|
68
+ corrector.replace(node.loc.keyword, node.inverse_keyword)
69
+ autocorrect(corrector, condition)
70
+ end
71
+ end
72
+
73
+ private
74
+
75
+ def invertible?(node) # rubocop:disable Metrics/CyclomaticComplexity
76
+ case node&.type
77
+ when :begin
78
+ invertible?(node.children.first)
79
+ when :send
80
+ return false if inheritance_check?(node)
81
+
82
+ node.method?(:!) || inverse_methods.key?(node.method_name)
83
+ when :or, :and
84
+ invertible?(node.lhs) && invertible?(node.rhs)
85
+ else
86
+ false
87
+ end
88
+ end
89
+
90
+ def inheritance_check?(node)
91
+ argument = node.first_argument
92
+ node.method?(:<) && argument.const_type? &&
93
+ argument.short_name.to_s.upcase != argument.short_name.to_s
94
+ end
95
+
96
+ def preferred_condition(node)
97
+ case node.type
98
+ when :begin then "(#{preferred_condition(node.children.first)})"
99
+ when :send then preferred_send_condition(node)
100
+ when :or, :and then preferred_logical_condition(node)
101
+ end
102
+ end
103
+
104
+ def preferred_send_condition(node) # rubocop:disable Metrics/CyclomaticComplexity
105
+ receiver_source = node.receiver&.source
106
+ return receiver_source if node.method?(:!)
107
+
108
+ # receiver may be implicit (self)
109
+ dotted_receiver_source = receiver_source ? "#{receiver_source}." : ''
110
+
111
+ inverse_method_name = inverse_methods[node.method_name]
112
+ return "#{dotted_receiver_source}#{inverse_method_name}" unless node.arguments?
113
+
114
+ argument_list = node.arguments.map(&:source).join(', ')
115
+ if node.operator_method?
116
+ return "#{receiver_source} #{inverse_method_name} #{argument_list}"
117
+ end
118
+
119
+ if node.parenthesized?
120
+ return "#{dotted_receiver_source}#{inverse_method_name}(#{argument_list})"
121
+ end
122
+
123
+ "#{dotted_receiver_source}#{inverse_method_name} #{argument_list}"
124
+ end
125
+
126
+ def preferred_logical_condition(node)
127
+ preferred_lhs = preferred_condition(node.lhs)
128
+ preferred_rhs = preferred_condition(node.rhs)
129
+
130
+ "#{preferred_lhs} #{node.inverse_operator} #{preferred_rhs}"
131
+ end
132
+
133
+ def autocorrect(corrector, node)
134
+ case node.type
135
+ when :begin
136
+ autocorrect(corrector, node.children.first)
137
+ when :send
138
+ autocorrect_send_node(corrector, node)
139
+ when :or, :and
140
+ corrector.replace(node.loc.operator, node.inverse_operator)
141
+ autocorrect(corrector, node.lhs)
142
+ autocorrect(corrector, node.rhs)
143
+ end
144
+ end
145
+
146
+ def autocorrect_send_node(corrector, node)
147
+ if node.method?(:!)
148
+ corrector.remove(node.loc.selector)
149
+ else
150
+ corrector.replace(node.loc.selector, inverse_methods[node.method_name])
151
+ end
152
+ end
153
+
154
+ def inverse_methods
155
+ @inverse_methods ||= cop_config['InverseMethods']
156
+ end
157
+ end
158
+ end
159
+ end
160
+ end
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'resolv'
4
+
5
+ module RuboCop
6
+ module Cop
7
+ module Style
8
+ # Checks for hardcoded IP addresses, which can make code
9
+ # brittle. IP addresses are likely to need to be changed when code
10
+ # is deployed to a different server or environment, which may break
11
+ # a deployment if forgotten. Prefer setting IP addresses in ENV or
12
+ # other configuration.
13
+ #
14
+ # @example
15
+ #
16
+ # # bad
17
+ # ip_address = '127.59.241.29'
18
+ #
19
+ # # good
20
+ # ip_address = ENV['DEPLOYMENT_IP_ADDRESS']
21
+ class IpAddresses < Base
22
+ include StringHelp
23
+
24
+ IPV6_MAX_SIZE = 45 # IPv4-mapped IPv6 is the longest
25
+ MSG = 'Do not hardcode IP addresses.'
26
+
27
+ def offense?(node)
28
+ contents = node.source[1...-1]
29
+ return false if contents.empty?
30
+
31
+ return false if allowed_addresses.include?(contents.downcase)
32
+
33
+ # To try to avoid doing two regex checks on every string,
34
+ # shortcut out if the string does not look like an IP address
35
+ return false unless potential_ip?(contents)
36
+
37
+ ::Resolv::IPv4::Regex.match?(contents) || ::Resolv::IPv6::Regex.match?(contents)
38
+ end
39
+
40
+ # Dummy implementation of method in ConfigurableEnforcedStyle that is
41
+ # called from StringHelp.
42
+ def opposite_style_detected; end
43
+
44
+ # Dummy implementation of method in ConfigurableEnforcedStyle that is
45
+ # called from StringHelp.
46
+ def correct_style_detected; end
47
+
48
+ private
49
+
50
+ def allowed_addresses
51
+ allowed_addresses = cop_config['AllowedAddresses']
52
+ Array(allowed_addresses).map(&:downcase)
53
+ end
54
+
55
+ def potential_ip?(str)
56
+ # If the string is too long, it can't be an IP
57
+ return false if too_long?(str)
58
+
59
+ # If the string doesn't start with a colon or hexadecimal char,
60
+ # we know it's not an IP address
61
+ starts_with_hex_or_colon?(str)
62
+ end
63
+
64
+ def too_long?(str)
65
+ str.size > IPV6_MAX_SIZE
66
+ end
67
+
68
+ def starts_with_hex_or_colon?(str)
69
+ first_char = str[0].ord
70
+ (48..58).cover?(first_char) || (65..70).cover?(first_char) || (97..102).cover?(first_char)
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Style
6
+ # Checks for assignments to a local `it` variable inside a block
7
+ # where `it` can refer to the first anonymous parameter as of Ruby 3.4.
8
+ #
9
+ # Although Ruby allows reassigning `it` in these cases, it could
10
+ # cause confusion if `it` is used as a block parameter elsewhere.
11
+ # For consistency, this also applies to numblocks and blocks with
12
+ # parameters, even though `it` cannot be used in those cases.
13
+ #
14
+ # @example
15
+ # # bad
16
+ # foo { it = 5 }
17
+ # foo { |bar| it = bar }
18
+ # foo { it = _2 }
19
+ #
20
+ # # good - use a different variable name
21
+ # foo { var = 5 }
22
+ # foo { |bar| var = bar }
23
+ # foo { bar = _2 }
24
+ class ItAssignment < Base
25
+ MSG = '`it` is the default block parameter; consider another name.'
26
+
27
+ def on_lvasgn(node)
28
+ return unless node.name == :it
29
+ return unless node.each_ancestor(:any_block).any?
30
+
31
+ add_offense(node.loc.name)
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end