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,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Style
6
+ # Before Ruby 3.0, interpolated strings followed the frozen string literal
7
+ # magic comment which sometimes made it necessary to explicitly unfreeze them.
8
+ # Ruby 3.0 changed interpolated strings to always be unfrozen which makes
9
+ # unfreezing them redundant.
10
+ #
11
+ # @example
12
+ # # bad
13
+ # +"#{foo} bar"
14
+ #
15
+ # # bad
16
+ # "#{foo} bar".dup
17
+ #
18
+ # # good
19
+ # "#{foo} bar"
20
+ #
21
+ class RedundantInterpolationUnfreeze < Base
22
+ include FrozenStringLiteral
23
+ extend AutoCorrector
24
+ extend TargetRubyVersion
25
+
26
+ MSG = "Don't unfreeze interpolated strings as they are already unfrozen."
27
+
28
+ RESTRICT_ON_SEND = %i[+@ dup].freeze
29
+
30
+ minimum_target_ruby_version 3.0
31
+
32
+ def on_send(node)
33
+ return if node.arguments?
34
+ return unless (receiver = node.receiver)
35
+ return unless receiver.dstr_type?
36
+ return if uninterpolated_string?(receiver) || uninterpolated_heredoc?(receiver)
37
+
38
+ add_offense(node.loc.selector) do |corrector|
39
+ corrector.remove(node.loc.selector)
40
+ corrector.remove(node.loc.dot) unless node.unary_operation?
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,236 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Style
6
+ # Check for redundant line continuation.
7
+ #
8
+ # This cop marks a line continuation as redundant if removing the backslash
9
+ # does not result in a syntax error.
10
+ # However, a backslash at the end of a comment or
11
+ # for string concatenation is not redundant and is not considered an offense.
12
+ #
13
+ # @example
14
+ # # bad
15
+ # foo. \
16
+ # bar
17
+ # foo \
18
+ # &.bar \
19
+ # .baz
20
+ #
21
+ # # good
22
+ # foo.
23
+ # bar
24
+ # foo
25
+ # &.bar
26
+ # .baz
27
+ #
28
+ # # bad
29
+ # [foo, \
30
+ # bar]
31
+ # {foo: \
32
+ # bar}
33
+ #
34
+ # # good
35
+ # [foo,
36
+ # bar]
37
+ # {foo:
38
+ # bar}
39
+ #
40
+ # # bad
41
+ # foo(bar, \
42
+ # baz)
43
+ #
44
+ # # good
45
+ # foo(bar,
46
+ # baz)
47
+ #
48
+ # # also good - backslash in string concatenation is not redundant
49
+ # foo('bar' \
50
+ # 'baz')
51
+ #
52
+ # # also good - backslash at the end of a comment is not redundant
53
+ # foo(bar, # \
54
+ # baz)
55
+ #
56
+ # # also good - backslash at the line following the newline begins with a + or -,
57
+ # # it is not redundant
58
+ # 1 \
59
+ # + 2 \
60
+ # - 3
61
+ #
62
+ # # also good - backslash with newline between the method name and its arguments,
63
+ # # it is not redundant.
64
+ # some_method \
65
+ # (argument)
66
+ #
67
+ class RedundantLineContinuation < Base
68
+ include MatchRange
69
+ extend AutoCorrector
70
+
71
+ MSG = 'Redundant line continuation.'
72
+ LINE_CONTINUATION = '\\'
73
+ LINE_CONTINUATION_PATTERN = /(\\\n)/.freeze
74
+ ALLOWED_STRING_TOKENS = %i[tSTRING tSTRING_CONTENT].freeze
75
+ ARGUMENT_TYPES = %i[
76
+ kDEF kDEFINED kFALSE kNIL kSELF kTRUE tAMPER tBANG tCARET tCHARACTER tCOLON3 tCONSTANT
77
+ tCVAR tDOT2 tDOT3 tFLOAT tGVAR tIDENTIFIER tINTEGER tIVAR tLAMBDA tLBRACK tLCURLY
78
+ tLPAREN_ARG tPIPE tQSYMBOLS_BEG tQWORDS_BEG tREGEXP_BEG tSTAR tSTRING tSTRING_BEG tSYMBEG
79
+ tSYMBOL tSYMBOLS_BEG tTILDE tUMINUS tUNARY_NUM tUPLUS tWORDS_BEG tXSTRING_BEG
80
+ ].freeze
81
+ ARGUMENT_TAKING_FLOW_TOKEN_TYPES = %i[
82
+ tIDENTIFIER kBREAK kNEXT kRETURN kSUPER kYIELD
83
+ ].freeze
84
+ ARITHMETIC_OPERATOR_TOKENS = %i[tDIVIDE tDSTAR tMINUS tPERCENT tPLUS tSTAR2].freeze
85
+
86
+ def on_new_investigation
87
+ return unless processed_source.ast
88
+
89
+ each_match_range(processed_source.ast.source_range, LINE_CONTINUATION_PATTERN) do |range|
90
+ next if require_line_continuation?(range)
91
+ next unless redundant_line_continuation?(range)
92
+
93
+ add_offense(range) do |corrector|
94
+ corrector.remove_leading(range, 1)
95
+ end
96
+ end
97
+
98
+ inspect_end_of_ruby_code_line_continuation
99
+ end
100
+
101
+ private
102
+
103
+ def require_line_continuation?(range)
104
+ !ends_with_uncommented_backslash?(range) ||
105
+ string_concatenation?(range.source_line) ||
106
+ start_with_arithmetic_operator?(range) ||
107
+ inside_string_literal_or_method_with_argument?(range) ||
108
+ leading_dot_method_chain_with_blank_line?(range)
109
+ end
110
+
111
+ def ends_with_uncommented_backslash?(range)
112
+ # A line continuation always needs to be the last character on the line, which
113
+ # means that it is impossible to have a comment following a continuation.
114
+ # Therefore, if the line contains a comment, it cannot end with a continuation.
115
+ return false if processed_source.line_with_comment?(range.line)
116
+
117
+ range.source_line.end_with?(LINE_CONTINUATION)
118
+ end
119
+
120
+ def string_concatenation?(source_line)
121
+ /["']\s*\\\z/.match?(source_line)
122
+ end
123
+
124
+ def inside_string_literal_or_method_with_argument?(range)
125
+ line_range = range_by_whole_lines(range)
126
+
127
+ processed_source.tokens.each_cons(2).any? do |token, next_token|
128
+ next if token.line == next_token.line
129
+
130
+ inside_string_literal?(range, token) ||
131
+ method_with_argument?(line_range, token, next_token)
132
+ end
133
+ end
134
+
135
+ def leading_dot_method_chain_with_blank_line?(range)
136
+ return false unless range.source_line.strip.start_with?('.', '&.')
137
+
138
+ processed_source[range.line].strip.empty?
139
+ end
140
+
141
+ def redundant_line_continuation?(range)
142
+ return true unless (node = find_node_for_line(range.last_line))
143
+ return false if argument_newline?(node)
144
+
145
+ # Check if source is still valid without the continuation
146
+ source = processed_source.raw_source.dup
147
+ source[range.begin_pos, range.length] = "\n"
148
+ parse(source).valid_syntax?
149
+ end
150
+
151
+ def inspect_end_of_ruby_code_line_continuation
152
+ last_line = processed_source.lines[processed_source.ast.last_line - 1]
153
+ return unless code_ends_with_continuation?(last_line)
154
+
155
+ last_column = last_line.length
156
+ line_continuation_range = range_between(last_column - 1, last_column)
157
+
158
+ add_offense(line_continuation_range) do |corrector|
159
+ corrector.remove_trailing(line_continuation_range, 1)
160
+ end
161
+ end
162
+
163
+ def code_ends_with_continuation?(last_line)
164
+ return false if processed_source.line_with_comment?(processed_source.ast.last_line)
165
+
166
+ last_line.end_with?(LINE_CONTINUATION)
167
+ end
168
+
169
+ def inside_string_literal?(range, token)
170
+ ALLOWED_STRING_TOKENS.include?(token.type) && token.pos.overlaps?(range)
171
+ end
172
+
173
+ # A method call without parentheses such as the following cannot remove `\`:
174
+ #
175
+ # do_something \
176
+ # argument
177
+ def method_with_argument?(line_range, current_token, next_token)
178
+ return false unless ARGUMENT_TAKING_FLOW_TOKEN_TYPES.include?(current_token.type)
179
+ return false unless current_token.pos.overlaps?(line_range)
180
+
181
+ ARGUMENT_TYPES.include?(next_token.type)
182
+ end
183
+
184
+ def argument_newline?(node)
185
+ return false if node.parenthesized_call?
186
+
187
+ node = node.children.first if node.root? && node.begin_type?
188
+
189
+ if argument_is_method?(node)
190
+ argument_newline?(node.first_argument)
191
+ else
192
+ return false unless method_call_with_arguments?(node)
193
+
194
+ node.loc.selector.line != node.first_argument.loc.line
195
+ end
196
+ end
197
+
198
+ def find_node_for_line(last_line)
199
+ processed_source.ast.each_node do |node|
200
+ return node if same_line?(node, last_line)
201
+ end
202
+ end
203
+
204
+ def same_line?(node, line)
205
+ return false unless (source_range = node.source_range)
206
+
207
+ if node.is_a?(AST::StrNode)
208
+ if node.heredoc?
209
+ (node.loc.heredoc_body.line..node.loc.heredoc_body.last_line).cover?(line)
210
+ else
211
+ (source_range.line..source_range.last_line).cover?(line)
212
+ end
213
+ else
214
+ source_range.line == line
215
+ end
216
+ end
217
+
218
+ def argument_is_method?(node)
219
+ return false unless node.send_type?
220
+ return false unless (first_argument = node.first_argument)
221
+
222
+ method_call_with_arguments?(first_argument)
223
+ end
224
+
225
+ def method_call_with_arguments?(node)
226
+ node.call_type? && !node.arguments.empty?
227
+ end
228
+
229
+ def start_with_arithmetic_operator?(range)
230
+ line_range = processed_source.buffer.line_range(range.line + 1)
231
+ ARITHMETIC_OPERATOR_TOKENS.include?(processed_source.first_token_of(line_range).type)
232
+ end
233
+ end
234
+ end
235
+ end
236
+ end
@@ -0,0 +1,313 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Style
6
+ # Checks for redundant parentheses.
7
+ #
8
+ # @example
9
+ #
10
+ # # bad
11
+ # (x) if ((y.z).nil?)
12
+ #
13
+ # # good
14
+ # x if y.z.nil?
15
+ #
16
+ class RedundantParentheses < Base # rubocop:disable Metrics/ClassLength
17
+ include Parentheses
18
+ extend AutoCorrector
19
+
20
+ ALLOWED_NODE_TYPES = %i[or send splat kwsplat].freeze
21
+
22
+ # @!method square_brackets?(node)
23
+ def_node_matcher :square_brackets?, <<~PATTERN
24
+ (send `{(send _recv _msg) str array hash const #variable?} :[] ...)
25
+ PATTERN
26
+
27
+ # @!method method_node_and_args(node)
28
+ def_node_matcher :method_node_and_args, '$(call _recv _msg $...)'
29
+
30
+ # @!method rescue?(node)
31
+ def_node_matcher :rescue?, '{^resbody ^^resbody}'
32
+
33
+ # @!method allowed_pin_operator?(node)
34
+ def_node_matcher :allowed_pin_operator?, '^(pin (begin !{lvar ivar cvar gvar}))'
35
+
36
+ def on_begin(node)
37
+ return if !parentheses?(node) || parens_allowed?(node) || ignore_syntax?(node)
38
+
39
+ check(node)
40
+ end
41
+
42
+ private
43
+
44
+ def variable?(node)
45
+ node.respond_to?(:variable?) && node.variable?
46
+ end
47
+
48
+ def parens_allowed?(node)
49
+ empty_parentheses?(node) ||
50
+ first_arg_begins_with_hash_literal?(node) ||
51
+ rescue?(node) ||
52
+ allowed_pin_operator?(node) ||
53
+ allowed_expression?(node)
54
+ end
55
+
56
+ def ignore_syntax?(node)
57
+ return false unless (parent = node.parent)
58
+
59
+ parent.type?(:while_post, :until_post, :match_with_lvasgn) ||
60
+ like_method_argument_parentheses?(parent) || multiline_control_flow_statements?(node)
61
+ end
62
+
63
+ def allowed_expression?(node)
64
+ allowed_ancestor?(node) ||
65
+ allowed_multiple_expression?(node) ||
66
+ allowed_ternary?(node) ||
67
+ node.parent&.range_type?
68
+ end
69
+
70
+ def allowed_ancestor?(node)
71
+ # Don't flag `break(1)`, etc
72
+ keyword_ancestor?(node) && parens_required?(node)
73
+ end
74
+
75
+ def allowed_multiple_expression?(node)
76
+ return false if node.children.one?
77
+
78
+ ancestor = node.ancestors.first
79
+ return false unless ancestor
80
+
81
+ !ancestor.type?(:begin, :any_def, :any_block)
82
+ end
83
+
84
+ def allowed_ternary?(node)
85
+ return false unless node&.parent&.if_type?
86
+
87
+ node.parent.ternary? && ternary_parentheses_required?
88
+ end
89
+
90
+ def ternary_parentheses_required?
91
+ config = @config.for_cop('Style/TernaryParentheses')
92
+ allowed_styles = %w[require_parentheses require_parentheses_when_complex]
93
+
94
+ config.fetch('Enabled') && allowed_styles.include?(config['EnforcedStyle'])
95
+ end
96
+
97
+ def like_method_argument_parentheses?(node)
98
+ return false unless node.type?(:send, :super, :yield)
99
+
100
+ node.arguments.one? && !node.parenthesized? &&
101
+ !node.operator_method? && node.first_argument.begin_type?
102
+ end
103
+
104
+ def multiline_control_flow_statements?(node)
105
+ return false unless (parent = node.parent)
106
+ return false if parent.single_line?
107
+
108
+ parent.type?(:return, :next, :break)
109
+ end
110
+
111
+ def empty_parentheses?(node)
112
+ # Don't flag `()`
113
+ node.children.empty?
114
+ end
115
+
116
+ def first_arg_begins_with_hash_literal?(node)
117
+ # Don't flag `method ({key: value})` or `method ({key: value}.method)`
118
+ hash_literal = method_chain_begins_with_hash_literal(node.children.first)
119
+ if (root_method = node.each_ancestor(:send).to_a.last)
120
+ parenthesized = root_method.parenthesized_call?
121
+ end
122
+ hash_literal && first_argument?(node) && !parentheses?(hash_literal) && !parenthesized
123
+ end
124
+
125
+ def method_chain_begins_with_hash_literal(node)
126
+ return if node.nil?
127
+ return node if node.hash_type?
128
+ return unless node.send_type?
129
+
130
+ method_chain_begins_with_hash_literal(node.children.first)
131
+ end
132
+
133
+ def check(begin_node)
134
+ node = begin_node.children.first
135
+
136
+ if (message = find_offense_message(begin_node, node))
137
+ if node.range_type? && !argument_of_parenthesized_method_call?(begin_node)
138
+ begin_node = begin_node.parent
139
+ end
140
+
141
+ return offense(begin_node, message)
142
+ end
143
+
144
+ check_send(begin_node, node) if node.call_type?
145
+ end
146
+
147
+ # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
148
+ def find_offense_message(begin_node, node)
149
+ return 'a keyword' if keyword_with_redundant_parentheses?(node)
150
+ return 'a literal' if node.literal? && disallowed_literal?(begin_node, node)
151
+ return 'a variable' if node.variable?
152
+ return 'a constant' if node.const_type?
153
+ if node.assignment? && (begin_node.parent.nil? || begin_node.parent.begin_type?)
154
+ return 'an assignment'
155
+ end
156
+ if node.lambda_or_proc? && (node.braces? || node.send_node.lambda_literal?)
157
+ return 'an expression'
158
+ end
159
+ return 'an interpolated expression' if interpolation?(begin_node)
160
+ return 'a method argument' if argument_of_parenthesized_method_call?(begin_node)
161
+
162
+ return if begin_node.chained?
163
+
164
+ if node.operator_keyword?
165
+ return if node.semantic_operator? && begin_node.parent
166
+ return if node.multiline? && allow_in_multiline_conditions?
167
+ return if ALLOWED_NODE_TYPES.include?(begin_node.parent&.type)
168
+ return if !node.and_type? && begin_node.parent&.and_type?
169
+ return if begin_node.parent&.if_type? && begin_node.parent.ternary?
170
+
171
+ 'a logical expression'
172
+ elsif node.respond_to?(:comparison_method?) && node.comparison_method?
173
+ return unless begin_node.parent.nil?
174
+
175
+ 'a comparison expression'
176
+ end
177
+ end
178
+ # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
179
+
180
+ # @!method interpolation?(node)
181
+ def_node_matcher :interpolation?, '[^begin ^^dstr]'
182
+
183
+ def argument_of_parenthesized_method_call?(node)
184
+ return false unless (parent = node.parent)
185
+
186
+ parent.call_type? && parent.parenthesized? && parent.receiver != node
187
+ end
188
+
189
+ def allow_in_multiline_conditions?
190
+ !!config.for_enabled_cop('Style/ParenthesesAroundCondition')['AllowInMultilineConditions']
191
+ end
192
+
193
+ def check_send(begin_node, node)
194
+ return check_unary(begin_node, node) if node.unary_operation?
195
+
196
+ return unless method_call_with_redundant_parentheses?(node)
197
+ return if call_chain_starts_with_int?(begin_node, node) ||
198
+ do_end_block_in_method_chain?(begin_node, node)
199
+
200
+ offense(begin_node, 'a method call')
201
+ end
202
+
203
+ def check_unary(begin_node, node)
204
+ return if begin_node.chained?
205
+
206
+ node = node.children.first while suspect_unary?(node)
207
+
208
+ return if node.send_type? && !method_call_with_redundant_parentheses?(node)
209
+
210
+ offense(begin_node, 'a unary operation')
211
+ end
212
+
213
+ def offense(node, msg)
214
+ add_offense(node, message: "Don't use parentheses around #{msg}.") do |corrector|
215
+ ParenthesesCorrector.correct(corrector, node)
216
+ end
217
+ end
218
+
219
+ def suspect_unary?(node)
220
+ node.send_type? && node.unary_operation? && !node.prefix_not?
221
+ end
222
+
223
+ def keyword_ancestor?(node)
224
+ node.parent&.keyword?
225
+ end
226
+
227
+ def disallowed_literal?(begin_node, node)
228
+ if node.range_type?
229
+ return false unless (parent = begin_node.parent)
230
+
231
+ parent.begin_type? && parent.children.one?
232
+ else
233
+ !raised_to_power_negative_numeric?(begin_node, node)
234
+ end
235
+ end
236
+
237
+ def raised_to_power_negative_numeric?(begin_node, node)
238
+ return false unless node.numeric_type?
239
+
240
+ next_sibling = begin_node.right_sibling
241
+ return false unless next_sibling
242
+
243
+ base_value = node.children.first
244
+
245
+ base_value.negative? && next_sibling == :**
246
+ end
247
+
248
+ def keyword_with_redundant_parentheses?(node)
249
+ return false unless node.keyword?
250
+ return true if node.special_keyword?
251
+
252
+ args = *node
253
+
254
+ if only_begin_arg?(args)
255
+ parentheses?(args.first)
256
+ else
257
+ args.empty? || parentheses?(node)
258
+ end
259
+ end
260
+
261
+ def method_call_with_redundant_parentheses?(node)
262
+ return false unless node.call_type?
263
+ return false if node.prefix_not?
264
+
265
+ send_node, args = method_node_and_args(node)
266
+
267
+ args.empty? || parentheses?(send_node) || square_brackets?(send_node)
268
+ end
269
+
270
+ def only_begin_arg?(args)
271
+ args.one? && args.first&.begin_type?
272
+ end
273
+
274
+ def first_argument?(node)
275
+ if first_send_argument?(node) ||
276
+ first_super_argument?(node) ||
277
+ first_yield_argument?(node)
278
+ return true
279
+ end
280
+
281
+ node.each_ancestor.any? { |ancestor| first_argument?(ancestor) }
282
+ end
283
+
284
+ # @!method first_send_argument?(node)
285
+ def_node_matcher :first_send_argument?, <<~PATTERN
286
+ ^(send _ _ equal?(%0) ...)
287
+ PATTERN
288
+
289
+ # @!method first_super_argument?(node)
290
+ def_node_matcher :first_super_argument?, <<~PATTERN
291
+ ^(super equal?(%0) ...)
292
+ PATTERN
293
+
294
+ # @!method first_yield_argument?(node)
295
+ def_node_matcher :first_yield_argument?, <<~PATTERN
296
+ ^(yield equal?(%0) ...)
297
+ PATTERN
298
+
299
+ def call_chain_starts_with_int?(begin_node, send_node)
300
+ recv = first_part_of_call_chain(send_node)
301
+ recv&.int_type? && (parent = begin_node.parent) &&
302
+ parent.send_type? && (parent.method?(:-@) || parent.method?(:+@))
303
+ end
304
+
305
+ def do_end_block_in_method_chain?(begin_node, node)
306
+ return false unless (block = node.each_descendant(:any_block).first)
307
+
308
+ block.keywords? && begin_node.each_ancestor(:call).any?
309
+ end
310
+ end
311
+ end
312
+ end
313
+ end
@@ -0,0 +1,108 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Style
6
+ # Checks for usage of the %q/%Q syntax when '' or "" would do.
7
+ #
8
+ # @example
9
+ #
10
+ # # bad
11
+ # name = %q(Bruce Wayne)
12
+ # time = %q(8 o'clock)
13
+ # question = %q("What did you say?")
14
+ #
15
+ # # good
16
+ # name = 'Bruce Wayne'
17
+ # time = "8 o'clock"
18
+ # question = '"What did you say?"'
19
+ #
20
+ class RedundantPercentQ < Base
21
+ extend AutoCorrector
22
+
23
+ MSG = 'Use `%<q_type>s` only for strings that contain both ' \
24
+ 'single quotes and double quotes%<extra>s.'
25
+ DYNAMIC_MSG = ', or for dynamic strings that contain double quotes'
26
+ SINGLE_QUOTE = "'"
27
+ QUOTE = '"'
28
+ EMPTY = ''
29
+ PERCENT_Q = '%q'
30
+ PERCENT_CAPITAL_Q = '%Q'
31
+ STRING_INTERPOLATION_REGEXP = /#\{.+\}/.freeze
32
+ ESCAPED_NON_BACKSLASH = /\\[^\\]/.freeze
33
+
34
+ def on_dstr(node)
35
+ return unless string_literal?(node)
36
+
37
+ check(node)
38
+ end
39
+
40
+ def on_str(node)
41
+ # Interpolated strings that contain more than just interpolation
42
+ # will call `on_dstr` for the entire string and `on_str` for the
43
+ # non interpolated portion of the string
44
+ return unless string_literal?(node)
45
+
46
+ check(node)
47
+ end
48
+
49
+ private
50
+
51
+ def check(node)
52
+ return unless start_with_percent_q_variant?(node)
53
+ return if interpolated_quotes?(node) || allowed_percent_q?(node)
54
+
55
+ add_offense(node) do |corrector|
56
+ delimiter = /\A%Q[^"]+\z|'/.match?(node.source) ? QUOTE : SINGLE_QUOTE
57
+
58
+ corrector.replace(node.loc.begin, delimiter)
59
+ corrector.replace(node.loc.end, delimiter)
60
+ end
61
+ end
62
+
63
+ def interpolated_quotes?(node)
64
+ node.source.include?(SINGLE_QUOTE) && node.source.include?(QUOTE)
65
+ end
66
+
67
+ def allowed_percent_q?(node)
68
+ (node.source.start_with?(PERCENT_Q) && acceptable_q?(node)) ||
69
+ (node.source.start_with?(PERCENT_CAPITAL_Q) && acceptable_capital_q?(node))
70
+ end
71
+
72
+ def message(node)
73
+ src = node.source
74
+ extra = if src.start_with?(PERCENT_CAPITAL_Q)
75
+ DYNAMIC_MSG
76
+ else
77
+ EMPTY
78
+ end
79
+ format(MSG, q_type: src[0, 2], extra: extra)
80
+ end
81
+
82
+ def string_literal?(node)
83
+ node.loc.respond_to?(:begin) && node.loc.respond_to?(:end) &&
84
+ node.loc.begin && node.loc.end
85
+ end
86
+
87
+ def start_with_percent_q_variant?(string)
88
+ string.source.start_with?(PERCENT_Q, PERCENT_CAPITAL_Q)
89
+ end
90
+
91
+ def acceptable_q?(node)
92
+ src = node.source
93
+
94
+ return true if STRING_INTERPOLATION_REGEXP.match?(src)
95
+
96
+ src.scan(/\\./).any?(ESCAPED_NON_BACKSLASH)
97
+ end
98
+
99
+ def acceptable_capital_q?(node)
100
+ src = node.source
101
+ src.include?(QUOTE) &&
102
+ (STRING_INTERPOLATION_REGEXP.match?(src) ||
103
+ (node.str_type? && double_quotes_required?(src)))
104
+ end
105
+ end
106
+ end
107
+ end
108
+ end