rubocop 0.75.1

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 (602) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +20 -0
  3. data/README.md +217 -0
  4. data/assets/logo.png +0 -0
  5. data/assets/output.html.erb +261 -0
  6. data/bin/console +10 -0
  7. data/bin/setup +7 -0
  8. data/config/default.yml +3939 -0
  9. data/exe/rubocop +17 -0
  10. data/lib/rubocop.rb +608 -0
  11. data/lib/rubocop/ast/builder.rb +81 -0
  12. data/lib/rubocop/ast/node.rb +640 -0
  13. data/lib/rubocop/ast/node/alias_node.rb +24 -0
  14. data/lib/rubocop/ast/node/and_node.rb +29 -0
  15. data/lib/rubocop/ast/node/args_node.rb +29 -0
  16. data/lib/rubocop/ast/node/array_node.rb +57 -0
  17. data/lib/rubocop/ast/node/block_node.rb +115 -0
  18. data/lib/rubocop/ast/node/break_node.rb +17 -0
  19. data/lib/rubocop/ast/node/case_node.rb +56 -0
  20. data/lib/rubocop/ast/node/class_node.rb +31 -0
  21. data/lib/rubocop/ast/node/def_node.rb +71 -0
  22. data/lib/rubocop/ast/node/defined_node.rb +17 -0
  23. data/lib/rubocop/ast/node/ensure_node.rb +17 -0
  24. data/lib/rubocop/ast/node/float_node.rb +12 -0
  25. data/lib/rubocop/ast/node/for_node.rb +53 -0
  26. data/lib/rubocop/ast/node/hash_node.rb +109 -0
  27. data/lib/rubocop/ast/node/if_node.rb +175 -0
  28. data/lib/rubocop/ast/node/int_node.rb +12 -0
  29. data/lib/rubocop/ast/node/keyword_splat_node.rb +45 -0
  30. data/lib/rubocop/ast/node/mixin/basic_literal_node.rb +16 -0
  31. data/lib/rubocop/ast/node/mixin/binary_operator_node.rb +43 -0
  32. data/lib/rubocop/ast/node/mixin/collection_node.rb +15 -0
  33. data/lib/rubocop/ast/node/mixin/conditional_node.rb +45 -0
  34. data/lib/rubocop/ast/node/mixin/hash_element_node.rb +125 -0
  35. data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +261 -0
  36. data/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +114 -0
  37. data/lib/rubocop/ast/node/mixin/modifier_node.rb +17 -0
  38. data/lib/rubocop/ast/node/mixin/numeric_node.rb +21 -0
  39. data/lib/rubocop/ast/node/mixin/parameterized_node.rb +61 -0
  40. data/lib/rubocop/ast/node/mixin/predicate_operator_node.rb +35 -0
  41. data/lib/rubocop/ast/node/module_node.rb +24 -0
  42. data/lib/rubocop/ast/node/or_node.rb +29 -0
  43. data/lib/rubocop/ast/node/pair_node.rb +63 -0
  44. data/lib/rubocop/ast/node/range_node.rb +18 -0
  45. data/lib/rubocop/ast/node/regexp_node.rb +35 -0
  46. data/lib/rubocop/ast/node/resbody_node.rb +24 -0
  47. data/lib/rubocop/ast/node/retry_node.rb +17 -0
  48. data/lib/rubocop/ast/node/self_class_node.rb +24 -0
  49. data/lib/rubocop/ast/node/send_node.rb +13 -0
  50. data/lib/rubocop/ast/node/str_node.rb +16 -0
  51. data/lib/rubocop/ast/node/super_node.rb +21 -0
  52. data/lib/rubocop/ast/node/symbol_node.rb +12 -0
  53. data/lib/rubocop/ast/node/until_node.rb +35 -0
  54. data/lib/rubocop/ast/node/when_node.rb +53 -0
  55. data/lib/rubocop/ast/node/while_node.rb +35 -0
  56. data/lib/rubocop/ast/node/yield_node.rb +21 -0
  57. data/lib/rubocop/ast/sexp.rb +16 -0
  58. data/lib/rubocop/ast/traversal.rb +183 -0
  59. data/lib/rubocop/cached_data.rb +58 -0
  60. data/lib/rubocop/cli.rb +343 -0
  61. data/lib/rubocop/comment_config.rb +201 -0
  62. data/lib/rubocop/config.rb +244 -0
  63. data/lib/rubocop/config_loader.rb +273 -0
  64. data/lib/rubocop/config_loader_resolver.rb +194 -0
  65. data/lib/rubocop/config_obsoletion.rb +213 -0
  66. data/lib/rubocop/config_store.rb +48 -0
  67. data/lib/rubocop/config_validator.rb +239 -0
  68. data/lib/rubocop/cop/autocorrect_logic.rb +103 -0
  69. data/lib/rubocop/cop/badge.rb +73 -0
  70. data/lib/rubocop/cop/bundler/duplicated_gem.rb +73 -0
  71. data/lib/rubocop/cop/bundler/gem_comment.rb +64 -0
  72. data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +69 -0
  73. data/lib/rubocop/cop/bundler/ordered_gems.rb +73 -0
  74. data/lib/rubocop/cop/commissioner.rb +137 -0
  75. data/lib/rubocop/cop/cop.rb +271 -0
  76. data/lib/rubocop/cop/corrector.rb +171 -0
  77. data/lib/rubocop/cop/correctors/alignment_corrector.rb +146 -0
  78. data/lib/rubocop/cop/correctors/condition_corrector.rb +28 -0
  79. data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +53 -0
  80. data/lib/rubocop/cop/correctors/empty_line_corrector.rb +26 -0
  81. data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +73 -0
  82. data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +136 -0
  83. data/lib/rubocop/cop/correctors/line_break_corrector.rb +61 -0
  84. data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +68 -0
  85. data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +44 -0
  86. data/lib/rubocop/cop/correctors/parentheses_corrector.rb +31 -0
  87. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +117 -0
  88. data/lib/rubocop/cop/correctors/punctuation_corrector.rb +29 -0
  89. data/lib/rubocop/cop/correctors/space_corrector.rb +49 -0
  90. data/lib/rubocop/cop/correctors/string_literal_corrector.rb +25 -0
  91. data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +43 -0
  92. data/lib/rubocop/cop/force.rb +42 -0
  93. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +104 -0
  94. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +106 -0
  95. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +85 -0
  96. data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +55 -0
  97. data/lib/rubocop/cop/generator.rb +223 -0
  98. data/lib/rubocop/cop/generator/configuration_injector.rb +66 -0
  99. data/lib/rubocop/cop/generator/require_file_injector.rb +78 -0
  100. data/lib/rubocop/cop/ignored_node.rb +38 -0
  101. data/lib/rubocop/cop/internal_affairs.rb +8 -0
  102. data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +44 -0
  103. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +44 -0
  104. data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +54 -0
  105. data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +48 -0
  106. data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +73 -0
  107. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +52 -0
  108. data/lib/rubocop/cop/layout/access_modifier_indentation.rb +98 -0
  109. data/lib/rubocop/cop/layout/align_arguments.rb +93 -0
  110. data/lib/rubocop/cop/layout/align_array.rb +39 -0
  111. data/lib/rubocop/cop/layout/align_hash.rb +358 -0
  112. data/lib/rubocop/cop/layout/align_parameters.rb +118 -0
  113. data/lib/rubocop/cop/layout/block_alignment.rb +244 -0
  114. data/lib/rubocop/cop/layout/block_end_newline.rb +62 -0
  115. data/lib/rubocop/cop/layout/case_indentation.rb +161 -0
  116. data/lib/rubocop/cop/layout/class_structure.rb +340 -0
  117. data/lib/rubocop/cop/layout/closing_heredoc_indentation.rb +126 -0
  118. data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +203 -0
  119. data/lib/rubocop/cop/layout/comment_indentation.rb +144 -0
  120. data/lib/rubocop/cop/layout/condition_position.rb +56 -0
  121. data/lib/rubocop/cop/layout/def_end_alignment.rb +74 -0
  122. data/lib/rubocop/cop/layout/dot_position.rb +105 -0
  123. data/lib/rubocop/cop/layout/else_alignment.rb +134 -0
  124. data/lib/rubocop/cop/layout/empty_comment.rb +160 -0
  125. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +157 -0
  126. data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +64 -0
  127. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +151 -0
  128. data/lib/rubocop/cop/layout/empty_lines.rb +76 -0
  129. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +215 -0
  130. data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +99 -0
  131. data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +45 -0
  132. data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +41 -0
  133. data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +88 -0
  134. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +136 -0
  135. data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +45 -0
  136. data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +62 -0
  137. data/lib/rubocop/cop/layout/end_alignment.rb +189 -0
  138. data/lib/rubocop/cop/layout/end_of_line.rb +87 -0
  139. data/lib/rubocop/cop/layout/extra_spacing.rb +201 -0
  140. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +45 -0
  141. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +37 -0
  142. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +55 -0
  143. data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +46 -0
  144. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +289 -0
  145. data/lib/rubocop/cop/layout/indent_assignment.rb +55 -0
  146. data/lib/rubocop/cop/layout/indent_first_argument.rb +247 -0
  147. data/lib/rubocop/cop/layout/indent_first_array_element.rb +167 -0
  148. data/lib/rubocop/cop/layout/indent_first_hash_element.rb +184 -0
  149. data/lib/rubocop/cop/layout/indent_first_parameter.rb +100 -0
  150. data/lib/rubocop/cop/layout/indent_heredoc.rb +256 -0
  151. data/lib/rubocop/cop/layout/indentation_consistency.rb +202 -0
  152. data/lib/rubocop/cop/layout/indentation_width.rb +364 -0
  153. data/lib/rubocop/cop/layout/initial_indentation.rb +59 -0
  154. data/lib/rubocop/cop/layout/leading_blank_lines.rb +53 -0
  155. data/lib/rubocop/cop/layout/leading_comment_space.rb +88 -0
  156. data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +118 -0
  157. data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +39 -0
  158. data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +95 -0
  159. data/lib/rubocop/cop/layout/multiline_block_layout.rb +146 -0
  160. data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +122 -0
  161. data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +50 -0
  162. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +54 -0
  163. data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +134 -0
  164. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +220 -0
  165. data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +131 -0
  166. data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +114 -0
  167. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +189 -0
  168. data/lib/rubocop/cop/layout/space_after_colon.rb +47 -0
  169. data/lib/rubocop/cop/layout/space_after_comma.rb +35 -0
  170. data/lib/rubocop/cop/layout/space_after_method_name.rb +42 -0
  171. data/lib/rubocop/cop/layout/space_after_not.rb +40 -0
  172. data/lib/rubocop/cop/layout/space_after_semicolon.rb +32 -0
  173. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +169 -0
  174. data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +92 -0
  175. data/lib/rubocop/cop/layout/space_around_keyword.rb +232 -0
  176. data/lib/rubocop/cop/layout/space_around_operators.rb +182 -0
  177. data/lib/rubocop/cop/layout/space_before_block_braces.rb +119 -0
  178. data/lib/rubocop/cop/layout/space_before_comma.rb +31 -0
  179. data/lib/rubocop/cop/layout/space_before_comment.rb +35 -0
  180. data/lib/rubocop/cop/layout/space_before_first_arg.rb +67 -0
  181. data/lib/rubocop/cop/layout/space_before_semicolon.rb +27 -0
  182. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +80 -0
  183. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +228 -0
  184. data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +53 -0
  185. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +248 -0
  186. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +207 -0
  187. data/lib/rubocop/cop/layout/space_inside_parens.rb +113 -0
  188. data/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb +65 -0
  189. data/lib/rubocop/cop/layout/space_inside_range_literal.rb +63 -0
  190. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +150 -0
  191. data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +65 -0
  192. data/lib/rubocop/cop/layout/tab.rb +75 -0
  193. data/lib/rubocop/cop/layout/trailing_blank_lines.rb +113 -0
  194. data/lib/rubocop/cop/layout/trailing_whitespace.rb +61 -0
  195. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +62 -0
  196. data/lib/rubocop/cop/lint/ambiguous_operator.rb +55 -0
  197. data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +43 -0
  198. data/lib/rubocop/cop/lint/assignment_in_condition.rb +97 -0
  199. data/lib/rubocop/cop/lint/big_decimal_new.rb +44 -0
  200. data/lib/rubocop/cop/lint/boolean_symbol.rb +38 -0
  201. data/lib/rubocop/cop/lint/circular_argument_reference.rb +72 -0
  202. data/lib/rubocop/cop/lint/debugger.rb +77 -0
  203. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +111 -0
  204. data/lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb +81 -0
  205. data/lib/rubocop/cop/lint/duplicate_case_condition.rb +53 -0
  206. data/lib/rubocop/cop/lint/duplicate_methods.rb +239 -0
  207. data/lib/rubocop/cop/lint/duplicated_key.rb +38 -0
  208. data/lib/rubocop/cop/lint/each_with_object_argument.rb +42 -0
  209. data/lib/rubocop/cop/lint/else_layout.rb +66 -0
  210. data/lib/rubocop/cop/lint/empty_ensure.rb +60 -0
  211. data/lib/rubocop/cop/lint/empty_expression.rb +42 -0
  212. data/lib/rubocop/cop/lint/empty_interpolation.rb +36 -0
  213. data/lib/rubocop/cop/lint/empty_when.rb +38 -0
  214. data/lib/rubocop/cop/lint/end_in_method.rb +40 -0
  215. data/lib/rubocop/cop/lint/ensure_return.rb +46 -0
  216. data/lib/rubocop/cop/lint/erb_new_arguments.rb +163 -0
  217. data/lib/rubocop/cop/lint/flip_flop.rb +32 -0
  218. data/lib/rubocop/cop/lint/float_out_of_range.rb +35 -0
  219. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +159 -0
  220. data/lib/rubocop/cop/lint/handle_exceptions.rb +95 -0
  221. data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +156 -0
  222. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +101 -0
  223. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +127 -0
  224. data/lib/rubocop/cop/lint/inherit_exception.rb +100 -0
  225. data/lib/rubocop/cop/lint/interpolation_check.rb +40 -0
  226. data/lib/rubocop/cop/lint/literal_as_condition.rb +138 -0
  227. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +98 -0
  228. data/lib/rubocop/cop/lint/loop.rb +63 -0
  229. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +84 -0
  230. data/lib/rubocop/cop/lint/multiple_compare.rb +48 -0
  231. data/lib/rubocop/cop/lint/nested_method_definition.rb +104 -0
  232. data/lib/rubocop/cop/lint/nested_percent_literal.rb +51 -0
  233. data/lib/rubocop/cop/lint/next_without_accumulator.rb +50 -0
  234. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +83 -0
  235. data/lib/rubocop/cop/lint/number_conversion.rb +81 -0
  236. data/lib/rubocop/cop/lint/ordered_magic_comments.rb +86 -0
  237. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +64 -0
  238. data/lib/rubocop/cop/lint/percent_string_array.rb +73 -0
  239. data/lib/rubocop/cop/lint/percent_symbol_array.rb +69 -0
  240. data/lib/rubocop/cop/lint/rand_one.rb +45 -0
  241. data/lib/rubocop/cop/lint/redundant_with_index.rb +82 -0
  242. data/lib/rubocop/cop/lint/redundant_with_object.rb +83 -0
  243. data/lib/rubocop/cop/lint/regexp_as_condition.rb +29 -0
  244. data/lib/rubocop/cop/lint/require_parentheses.rb +66 -0
  245. data/lib/rubocop/cop/lint/rescue_exception.rb +46 -0
  246. data/lib/rubocop/cop/lint/rescue_type.rb +94 -0
  247. data/lib/rubocop/cop/lint/return_in_void_context.rb +74 -0
  248. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +66 -0
  249. data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +94 -0
  250. data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +38 -0
  251. data/lib/rubocop/cop/lint/script_permission.rb +70 -0
  252. data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +91 -0
  253. data/lib/rubocop/cop/lint/shadowed_argument.rb +182 -0
  254. data/lib/rubocop/cop/lint/shadowed_exception.rb +178 -0
  255. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +53 -0
  256. data/lib/rubocop/cop/lint/string_conversion_in_interpolation.rb +59 -0
  257. data/lib/rubocop/cop/lint/syntax.rb +59 -0
  258. data/lib/rubocop/cop/lint/to_json.rb +41 -0
  259. data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +82 -0
  260. data/lib/rubocop/cop/lint/unified_integer.rb +45 -0
  261. data/lib/rubocop/cop/lint/unneeded_cop_disable_directive.rb +263 -0
  262. data/lib/rubocop/cop/lint/unneeded_cop_enable_directive.rb +116 -0
  263. data/lib/rubocop/cop/lint/unneeded_require_statement.rb +50 -0
  264. data/lib/rubocop/cop/lint/unneeded_splat_expansion.rb +172 -0
  265. data/lib/rubocop/cop/lint/unreachable_code.rb +99 -0
  266. data/lib/rubocop/cop/lint/unused_block_argument.rb +165 -0
  267. data/lib/rubocop/cop/lint/unused_method_argument.rb +86 -0
  268. data/lib/rubocop/cop/lint/uri_escape_unescape.rb +76 -0
  269. data/lib/rubocop/cop/lint/uri_regexp.rb +73 -0
  270. data/lib/rubocop/cop/lint/useless_access_modifier.rb +240 -0
  271. data/lib/rubocop/cop/lint/useless_assignment.rb +129 -0
  272. data/lib/rubocop/cop/lint/useless_comparison.rb +28 -0
  273. data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +49 -0
  274. data/lib/rubocop/cop/lint/useless_setter_call.rb +164 -0
  275. data/lib/rubocop/cop/lint/void.rb +151 -0
  276. data/lib/rubocop/cop/message_annotator.rb +129 -0
  277. data/lib/rubocop/cop/metrics/abc_size.rb +24 -0
  278. data/lib/rubocop/cop/metrics/block_length.rb +50 -0
  279. data/lib/rubocop/cop/metrics/block_nesting.rb +65 -0
  280. data/lib/rubocop/cop/metrics/class_length.rb +36 -0
  281. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +32 -0
  282. data/lib/rubocop/cop/metrics/line_length.rb +321 -0
  283. data/lib/rubocop/cop/metrics/method_length.rb +36 -0
  284. data/lib/rubocop/cop/metrics/module_length.rb +36 -0
  285. data/lib/rubocop/cop/metrics/parameter_lists.rb +54 -0
  286. data/lib/rubocop/cop/metrics/perceived_complexity.rb +61 -0
  287. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +67 -0
  288. data/lib/rubocop/cop/migration/department_name.rb +44 -0
  289. data/lib/rubocop/cop/mixin/alignment.rb +74 -0
  290. data/lib/rubocop/cop/mixin/annotation_comment.rb +37 -0
  291. data/lib/rubocop/cop/mixin/array_min_size.rb +59 -0
  292. data/lib/rubocop/cop/mixin/array_syntax.rb +17 -0
  293. data/lib/rubocop/cop/mixin/check_assignment.rb +44 -0
  294. data/lib/rubocop/cop/mixin/check_line_breakable.rb +190 -0
  295. data/lib/rubocop/cop/mixin/classish_length.rb +37 -0
  296. data/lib/rubocop/cop/mixin/code_length.rb +38 -0
  297. data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +98 -0
  298. data/lib/rubocop/cop/mixin/configurable_formatting.rb +47 -0
  299. data/lib/rubocop/cop/mixin/configurable_max.rb +23 -0
  300. data/lib/rubocop/cop/mixin/configurable_naming.rb +16 -0
  301. data/lib/rubocop/cop/mixin/configurable_numbering.rb +17 -0
  302. data/lib/rubocop/cop/mixin/def_node.rb +33 -0
  303. data/lib/rubocop/cop/mixin/documentation_comment.rb +52 -0
  304. data/lib/rubocop/cop/mixin/duplication.rb +46 -0
  305. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +172 -0
  306. data/lib/rubocop/cop/mixin/empty_parameter.rb +24 -0
  307. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +67 -0
  308. data/lib/rubocop/cop/mixin/enforce_superclass.rb +30 -0
  309. data/lib/rubocop/cop/mixin/first_element_line_break.rb +46 -0
  310. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +53 -0
  311. data/lib/rubocop/cop/mixin/hash_alignment.rb +147 -0
  312. data/lib/rubocop/cop/mixin/heredoc.rb +32 -0
  313. data/lib/rubocop/cop/mixin/ignored_methods.rb +19 -0
  314. data/lib/rubocop/cop/mixin/ignored_pattern.rb +29 -0
  315. data/lib/rubocop/cop/mixin/integer_node.rb +14 -0
  316. data/lib/rubocop/cop/mixin/interpolation.rb +27 -0
  317. data/lib/rubocop/cop/mixin/match_range.rb +26 -0
  318. data/lib/rubocop/cop/mixin/method_complexity.rb +56 -0
  319. data/lib/rubocop/cop/mixin/method_preference.rb +31 -0
  320. data/lib/rubocop/cop/mixin/min_body_length.rb +21 -0
  321. data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +86 -0
  322. data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +33 -0
  323. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +255 -0
  324. data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +141 -0
  325. data/lib/rubocop/cop/mixin/negative_conditional.rb +32 -0
  326. data/lib/rubocop/cop/mixin/nil_methods.rb +25 -0
  327. data/lib/rubocop/cop/mixin/on_normal_if_unless.rb +14 -0
  328. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +56 -0
  329. data/lib/rubocop/cop/mixin/parentheses.rb +17 -0
  330. data/lib/rubocop/cop/mixin/parser_diagnostic.rb +37 -0
  331. data/lib/rubocop/cop/mixin/percent_array.rb +52 -0
  332. data/lib/rubocop/cop/mixin/percent_literal.rb +38 -0
  333. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +181 -0
  334. data/lib/rubocop/cop/mixin/preferred_delimiters.rb +53 -0
  335. data/lib/rubocop/cop/mixin/range_help.rb +117 -0
  336. data/lib/rubocop/cop/mixin/rescue_node.rb +22 -0
  337. data/lib/rubocop/cop/mixin/safe_assignment.rb +23 -0
  338. data/lib/rubocop/cop/mixin/safe_mode.rb +24 -0
  339. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +55 -0
  340. data/lib/rubocop/cop/mixin/space_before_punctuation.rb +49 -0
  341. data/lib/rubocop/cop/mixin/statement_modifier.rb +68 -0
  342. data/lib/rubocop/cop/mixin/string_help.rb +35 -0
  343. data/lib/rubocop/cop/mixin/string_literals_help.rb +23 -0
  344. data/lib/rubocop/cop/mixin/surrounding_space.rb +146 -0
  345. data/lib/rubocop/cop/mixin/target_ruby_version.rb +16 -0
  346. data/lib/rubocop/cop/mixin/too_many_lines.rb +35 -0
  347. data/lib/rubocop/cop/mixin/trailing_body.rb +26 -0
  348. data/lib/rubocop/cop/mixin/trailing_comma.rb +216 -0
  349. data/lib/rubocop/cop/mixin/uncommunicative_name.rb +111 -0
  350. data/lib/rubocop/cop/mixin/unused_argument.rb +33 -0
  351. data/lib/rubocop/cop/naming/accessor_method_name.rb +55 -0
  352. data/lib/rubocop/cop/naming/ascii_identifiers.rb +72 -0
  353. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +43 -0
  354. data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +33 -0
  355. data/lib/rubocop/cop/naming/constant_name.rb +81 -0
  356. data/lib/rubocop/cop/naming/file_name.rb +205 -0
  357. data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +62 -0
  358. data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +55 -0
  359. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +171 -0
  360. data/lib/rubocop/cop/naming/method_name.rb +53 -0
  361. data/lib/rubocop/cop/naming/predicate_name.rb +108 -0
  362. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +112 -0
  363. data/lib/rubocop/cop/naming/uncommunicative_block_param_name.rb +49 -0
  364. data/lib/rubocop/cop/naming/uncommunicative_method_param_name.rb +58 -0
  365. data/lib/rubocop/cop/naming/variable_name.rb +52 -0
  366. data/lib/rubocop/cop/naming/variable_number.rb +61 -0
  367. data/lib/rubocop/cop/offense.rb +205 -0
  368. data/lib/rubocop/cop/registry.rb +211 -0
  369. data/lib/rubocop/cop/security/eval.rb +31 -0
  370. data/lib/rubocop/cop/security/json_load.rb +46 -0
  371. data/lib/rubocop/cop/security/marshal_load.rb +39 -0
  372. data/lib/rubocop/cop/security/open.rb +71 -0
  373. data/lib/rubocop/cop/security/yaml_load.rb +37 -0
  374. data/lib/rubocop/cop/severity.rb +77 -0
  375. data/lib/rubocop/cop/style/access_modifier_declarations.rb +112 -0
  376. data/lib/rubocop/cop/style/alias.rb +147 -0
  377. data/lib/rubocop/cop/style/and_or.rb +146 -0
  378. data/lib/rubocop/cop/style/array_join.rb +39 -0
  379. data/lib/rubocop/cop/style/ascii_comments.rb +61 -0
  380. data/lib/rubocop/cop/style/attr.rb +62 -0
  381. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +51 -0
  382. data/lib/rubocop/cop/style/bare_percent_literals.rb +78 -0
  383. data/lib/rubocop/cop/style/begin_block.rb +22 -0
  384. data/lib/rubocop/cop/style/block_comments.rb +70 -0
  385. data/lib/rubocop/cop/style/block_delimiters.rb +331 -0
  386. data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +209 -0
  387. data/lib/rubocop/cop/style/case_equality.rb +30 -0
  388. data/lib/rubocop/cop/style/character_literal.rb +53 -0
  389. data/lib/rubocop/cop/style/class_and_module_children.rb +151 -0
  390. data/lib/rubocop/cop/style/class_check.rb +59 -0
  391. data/lib/rubocop/cop/style/class_methods.rb +60 -0
  392. data/lib/rubocop/cop/style/class_vars.rb +48 -0
  393. data/lib/rubocop/cop/style/collection_methods.rb +77 -0
  394. data/lib/rubocop/cop/style/colon_method_call.rb +48 -0
  395. data/lib/rubocop/cop/style/colon_method_definition.rb +37 -0
  396. data/lib/rubocop/cop/style/command_literal.rb +187 -0
  397. data/lib/rubocop/cop/style/comment_annotation.rb +97 -0
  398. data/lib/rubocop/cop/style/commented_keyword.rb +73 -0
  399. data/lib/rubocop/cop/style/conditional_assignment.rb +668 -0
  400. data/lib/rubocop/cop/style/constant_visibility.rb +77 -0
  401. data/lib/rubocop/cop/style/copyright.rb +95 -0
  402. data/lib/rubocop/cop/style/date_time.rb +77 -0
  403. data/lib/rubocop/cop/style/def_with_parentheses.rb +57 -0
  404. data/lib/rubocop/cop/style/dir.rb +48 -0
  405. data/lib/rubocop/cop/style/documentation.rb +97 -0
  406. data/lib/rubocop/cop/style/documentation_method.rb +125 -0
  407. data/lib/rubocop/cop/style/double_cop_disable_directive.rb +55 -0
  408. data/lib/rubocop/cop/style/double_negation.rb +35 -0
  409. data/lib/rubocop/cop/style/each_for_simple_loop.rb +58 -0
  410. data/lib/rubocop/cop/style/each_with_object.rb +110 -0
  411. data/lib/rubocop/cop/style/empty_block_parameter.rb +48 -0
  412. data/lib/rubocop/cop/style/empty_case_condition.rb +107 -0
  413. data/lib/rubocop/cop/style/empty_else.rb +175 -0
  414. data/lib/rubocop/cop/style/empty_lambda_parameter.rb +45 -0
  415. data/lib/rubocop/cop/style/empty_literal.rb +123 -0
  416. data/lib/rubocop/cop/style/empty_method.rb +115 -0
  417. data/lib/rubocop/cop/style/encoding.rb +56 -0
  418. data/lib/rubocop/cop/style/end_block.rb +25 -0
  419. data/lib/rubocop/cop/style/eval_with_location.rb +148 -0
  420. data/lib/rubocop/cop/style/even_odd.rb +58 -0
  421. data/lib/rubocop/cop/style/expand_path_arguments.rb +194 -0
  422. data/lib/rubocop/cop/style/float_division.rb +94 -0
  423. data/lib/rubocop/cop/style/for.rb +88 -0
  424. data/lib/rubocop/cop/style/format_string.rb +124 -0
  425. data/lib/rubocop/cop/style/format_string_token.rb +119 -0
  426. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +149 -0
  427. data/lib/rubocop/cop/style/global_vars.rb +80 -0
  428. data/lib/rubocop/cop/style/guard_clause.rb +121 -0
  429. data/lib/rubocop/cop/style/hash_syntax.rb +214 -0
  430. data/lib/rubocop/cop/style/identical_conditional_branches.rb +130 -0
  431. data/lib/rubocop/cop/style/if_inside_else.rb +87 -0
  432. data/lib/rubocop/cop/style/if_unless_modifier.rb +127 -0
  433. data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +39 -0
  434. data/lib/rubocop/cop/style/if_with_semicolon.rb +30 -0
  435. data/lib/rubocop/cop/style/implicit_runtime_error.rb +32 -0
  436. data/lib/rubocop/cop/style/infinite_loop.rb +127 -0
  437. data/lib/rubocop/cop/style/inline_comment.rb +34 -0
  438. data/lib/rubocop/cop/style/inverse_methods.rb +187 -0
  439. data/lib/rubocop/cop/style/ip_addresses.rb +76 -0
  440. data/lib/rubocop/cop/style/lambda.rb +131 -0
  441. data/lib/rubocop/cop/style/lambda_call.rb +93 -0
  442. data/lib/rubocop/cop/style/line_end_concatenation.rb +121 -0
  443. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +388 -0
  444. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +77 -0
  445. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +46 -0
  446. data/lib/rubocop/cop/style/method_def_parentheses.rb +158 -0
  447. data/lib/rubocop/cop/style/method_missing_super.rb +34 -0
  448. data/lib/rubocop/cop/style/min_max.rb +68 -0
  449. data/lib/rubocop/cop/style/missing_else.rb +180 -0
  450. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +46 -0
  451. data/lib/rubocop/cop/style/mixin_grouping.rb +148 -0
  452. data/lib/rubocop/cop/style/mixin_usage.rb +90 -0
  453. data/lib/rubocop/cop/style/module_function.rb +104 -0
  454. data/lib/rubocop/cop/style/multiline_block_chain.rb +40 -0
  455. data/lib/rubocop/cop/style/multiline_if_modifier.rb +67 -0
  456. data/lib/rubocop/cop/style/multiline_if_then.rb +50 -0
  457. data/lib/rubocop/cop/style/multiline_memoization.rb +94 -0
  458. data/lib/rubocop/cop/style/multiline_method_signature.rb +61 -0
  459. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +38 -0
  460. data/lib/rubocop/cop/style/multiline_when_then.rb +55 -0
  461. data/lib/rubocop/cop/style/multiple_comparison.rb +92 -0
  462. data/lib/rubocop/cop/style/mutable_constant.rb +174 -0
  463. data/lib/rubocop/cop/style/negated_if.rb +99 -0
  464. data/lib/rubocop/cop/style/negated_unless.rb +89 -0
  465. data/lib/rubocop/cop/style/negated_while.rb +48 -0
  466. data/lib/rubocop/cop/style/nested_modifier.rb +105 -0
  467. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +67 -0
  468. data/lib/rubocop/cop/style/nested_ternary_operator.rb +32 -0
  469. data/lib/rubocop/cop/style/next.rb +244 -0
  470. data/lib/rubocop/cop/style/nil_comparison.rb +75 -0
  471. data/lib/rubocop/cop/style/non_nil_check.rb +124 -0
  472. data/lib/rubocop/cop/style/not.rb +82 -0
  473. data/lib/rubocop/cop/style/numeric_literal_prefix.rb +124 -0
  474. data/lib/rubocop/cop/style/numeric_literals.rb +110 -0
  475. data/lib/rubocop/cop/style/numeric_predicate.rb +137 -0
  476. data/lib/rubocop/cop/style/one_line_conditional.rb +101 -0
  477. data/lib/rubocop/cop/style/option_hash.rb +55 -0
  478. data/lib/rubocop/cop/style/optional_arguments.rb +58 -0
  479. data/lib/rubocop/cop/style/or_assignment.rb +95 -0
  480. data/lib/rubocop/cop/style/parallel_assignment.rb +287 -0
  481. data/lib/rubocop/cop/style/parentheses_around_condition.rb +117 -0
  482. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +127 -0
  483. data/lib/rubocop/cop/style/percent_q_literals.rb +73 -0
  484. data/lib/rubocop/cop/style/perl_backrefs.rb +38 -0
  485. data/lib/rubocop/cop/style/preferred_hash_methods.rb +75 -0
  486. data/lib/rubocop/cop/style/proc.rb +34 -0
  487. data/lib/rubocop/cop/style/raise_args.rb +145 -0
  488. data/lib/rubocop/cop/style/random_with_offset.rb +158 -0
  489. data/lib/rubocop/cop/style/redundant_begin.rb +91 -0
  490. data/lib/rubocop/cop/style/redundant_conditional.rb +97 -0
  491. data/lib/rubocop/cop/style/redundant_exception.rb +60 -0
  492. data/lib/rubocop/cop/style/redundant_freeze.rb +67 -0
  493. data/lib/rubocop/cop/style/redundant_parentheses.rb +231 -0
  494. data/lib/rubocop/cop/style/redundant_return.rb +173 -0
  495. data/lib/rubocop/cop/style/redundant_self.rb +171 -0
  496. data/lib/rubocop/cop/style/redundant_sort_by.rb +50 -0
  497. data/lib/rubocop/cop/style/regexp_literal.rb +228 -0
  498. data/lib/rubocop/cop/style/rescue_modifier.rb +73 -0
  499. data/lib/rubocop/cop/style/rescue_standard_error.rb +124 -0
  500. data/lib/rubocop/cop/style/return_nil.rb +89 -0
  501. data/lib/rubocop/cop/style/safe_navigation.rb +272 -0
  502. data/lib/rubocop/cop/style/sample.rb +144 -0
  503. data/lib/rubocop/cop/style/self_assignment.rb +97 -0
  504. data/lib/rubocop/cop/style/semicolon.rb +101 -0
  505. data/lib/rubocop/cop/style/send.rb +31 -0
  506. data/lib/rubocop/cop/style/signal_exception.rb +211 -0
  507. data/lib/rubocop/cop/style/single_line_block_params.rb +95 -0
  508. data/lib/rubocop/cop/style/single_line_methods.rb +83 -0
  509. data/lib/rubocop/cop/style/special_global_vars.rb +213 -0
  510. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +86 -0
  511. data/lib/rubocop/cop/style/stderr_puts.rb +61 -0
  512. data/lib/rubocop/cop/style/string_hash_keys.rb +50 -0
  513. data/lib/rubocop/cop/style/string_literals.rb +129 -0
  514. data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +49 -0
  515. data/lib/rubocop/cop/style/string_methods.rb +46 -0
  516. data/lib/rubocop/cop/style/strip.rb +46 -0
  517. data/lib/rubocop/cop/style/struct_inheritance.rb +39 -0
  518. data/lib/rubocop/cop/style/symbol_array.rb +119 -0
  519. data/lib/rubocop/cop/style/symbol_literal.rb +32 -0
  520. data/lib/rubocop/cop/style/symbol_proc.rb +110 -0
  521. data/lib/rubocop/cop/style/ternary_parentheses.rb +223 -0
  522. data/lib/rubocop/cop/style/trailing_body_on_class.rb +43 -0
  523. data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +54 -0
  524. data/lib/rubocop/cop/style/trailing_body_on_module.rb +43 -0
  525. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +96 -0
  526. data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +58 -0
  527. data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +56 -0
  528. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +91 -0
  529. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +161 -0
  530. data/lib/rubocop/cop/style/trivial_accessors.rb +191 -0
  531. data/lib/rubocop/cop/style/unless_else.rb +55 -0
  532. data/lib/rubocop/cop/style/unneeded_capital_w.rb +51 -0
  533. data/lib/rubocop/cop/style/unneeded_condition.rb +112 -0
  534. data/lib/rubocop/cop/style/unneeded_interpolation.rb +98 -0
  535. data/lib/rubocop/cop/style/unneeded_percent_q.rb +112 -0
  536. data/lib/rubocop/cop/style/unneeded_sort.rb +165 -0
  537. data/lib/rubocop/cop/style/unpack_first.rb +65 -0
  538. data/lib/rubocop/cop/style/variable_interpolation.rb +48 -0
  539. data/lib/rubocop/cop/style/when_then.rb +37 -0
  540. data/lib/rubocop/cop/style/while_until_do.rb +59 -0
  541. data/lib/rubocop/cop/style/while_until_modifier.rb +61 -0
  542. data/lib/rubocop/cop/style/word_array.rb +102 -0
  543. data/lib/rubocop/cop/style/yoda_condition.rb +141 -0
  544. data/lib/rubocop/cop/style/zero_length_predicate.rb +117 -0
  545. data/lib/rubocop/cop/team.rb +191 -0
  546. data/lib/rubocop/cop/util.rb +127 -0
  547. data/lib/rubocop/cop/utils/format_string.rb +128 -0
  548. data/lib/rubocop/cop/variable_force.rb +464 -0
  549. data/lib/rubocop/cop/variable_force/assignment.rb +96 -0
  550. data/lib/rubocop/cop/variable_force/branch.rb +322 -0
  551. data/lib/rubocop/cop/variable_force/branchable.rb +23 -0
  552. data/lib/rubocop/cop/variable_force/reference.rb +49 -0
  553. data/lib/rubocop/cop/variable_force/scope.rb +109 -0
  554. data/lib/rubocop/cop/variable_force/variable.rb +117 -0
  555. data/lib/rubocop/cop/variable_force/variable_table.rb +129 -0
  556. data/lib/rubocop/core_ext/string.rb +23 -0
  557. data/lib/rubocop/error.rb +34 -0
  558. data/lib/rubocop/file_finder.rb +42 -0
  559. data/lib/rubocop/formatter/auto_gen_config_formatter.rb +16 -0
  560. data/lib/rubocop/formatter/base_formatter.rb +123 -0
  561. data/lib/rubocop/formatter/clang_style_formatter.rb +59 -0
  562. data/lib/rubocop/formatter/colorizable.rb +41 -0
  563. data/lib/rubocop/formatter/disabled_config_formatter.rb +224 -0
  564. data/lib/rubocop/formatter/disabled_lines_formatter.rb +57 -0
  565. data/lib/rubocop/formatter/emacs_style_formatter.rb +37 -0
  566. data/lib/rubocop/formatter/file_list_formatter.rb +20 -0
  567. data/lib/rubocop/formatter/formatter_set.rb +106 -0
  568. data/lib/rubocop/formatter/fuubar_style_formatter.rb +80 -0
  569. data/lib/rubocop/formatter/html_formatter.rb +141 -0
  570. data/lib/rubocop/formatter/json_formatter.rb +80 -0
  571. data/lib/rubocop/formatter/offense_count_formatter.rb +74 -0
  572. data/lib/rubocop/formatter/pacman_formatter.rb +80 -0
  573. data/lib/rubocop/formatter/progress_formatter.rb +63 -0
  574. data/lib/rubocop/formatter/quiet_formatter.rb +13 -0
  575. data/lib/rubocop/formatter/simple_text_formatter.rb +138 -0
  576. data/lib/rubocop/formatter/tap_formatter.rb +84 -0
  577. data/lib/rubocop/formatter/text_util.rb +20 -0
  578. data/lib/rubocop/formatter/worst_offenders_formatter.rb +62 -0
  579. data/lib/rubocop/magic_comment.rb +214 -0
  580. data/lib/rubocop/name_similarity.rb +21 -0
  581. data/lib/rubocop/node_pattern.rb +799 -0
  582. data/lib/rubocop/options.rb +454 -0
  583. data/lib/rubocop/path_util.rb +85 -0
  584. data/lib/rubocop/platform.rb +11 -0
  585. data/lib/rubocop/processed_source.rb +216 -0
  586. data/lib/rubocop/rake_task.rb +79 -0
  587. data/lib/rubocop/remote_config.rb +106 -0
  588. data/lib/rubocop/result_cache.rb +191 -0
  589. data/lib/rubocop/rspec/cop_helper.rb +94 -0
  590. data/lib/rubocop/rspec/expect_offense.rb +240 -0
  591. data/lib/rubocop/rspec/host_environment_simulation_helper.rb +28 -0
  592. data/lib/rubocop/rspec/shared_contexts.rb +90 -0
  593. data/lib/rubocop/rspec/support.rb +13 -0
  594. data/lib/rubocop/runner.rb +358 -0
  595. data/lib/rubocop/string_interpreter.rb +57 -0
  596. data/lib/rubocop/string_util.rb +14 -0
  597. data/lib/rubocop/target_finder.rb +190 -0
  598. data/lib/rubocop/token.rb +114 -0
  599. data/lib/rubocop/version.rb +21 -0
  600. data/lib/rubocop/warning.rb +11 -0
  601. data/lib/rubocop/yaml_duplication_checker.rb +39 -0
  602. metadata +770 -0
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Lint
6
+ # This cop looks for use of the same name as outer local variables
7
+ # for block arguments or block local variables.
8
+ # This is a mimic of the warning
9
+ # "shadowing outer local variable - foo" from `ruby -cw`.
10
+ #
11
+ # @example
12
+ #
13
+ # # bad
14
+ #
15
+ # def some_method
16
+ # foo = 1
17
+ #
18
+ # 2.times do |foo| # shadowing outer `foo`
19
+ # do_something(foo)
20
+ # end
21
+ # end
22
+ #
23
+ # @example
24
+ #
25
+ # # good
26
+ #
27
+ # def some_method
28
+ # foo = 1
29
+ #
30
+ # 2.times do |bar|
31
+ # do_something(bar)
32
+ # end
33
+ # end
34
+ class ShadowingOuterLocalVariable < Cop
35
+ MSG = 'Shadowing outer local variable - `%<variable>s`.'
36
+
37
+ def join_force?(force_class)
38
+ force_class == VariableForce
39
+ end
40
+
41
+ def before_declaring_variable(variable, variable_table)
42
+ return if variable.should_be_unused?
43
+
44
+ outer_local_variable = variable_table.find_variable(variable.name)
45
+ return unless outer_local_variable
46
+
47
+ message = format(MSG, variable: variable.name)
48
+ add_offense(variable.declaration_node, message: message)
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Lint
6
+ # This cop checks for string conversion in string interpolation,
7
+ # which is redundant.
8
+ #
9
+ # @example
10
+ #
11
+ # # bad
12
+ #
13
+ # "result is #{something.to_s}"
14
+ #
15
+ # @example
16
+ #
17
+ # # good
18
+ #
19
+ # "result is #{something}"
20
+ class StringConversionInInterpolation < Cop
21
+ include Interpolation
22
+
23
+ MSG_DEFAULT = 'Redundant use of `Object#to_s` in interpolation.'
24
+ MSG_SELF = 'Use `self` instead of `Object#to_s` in ' \
25
+ 'interpolation.'
26
+
27
+ def_node_matcher :to_s_without_args?, '(send _ :to_s)'
28
+
29
+ def on_interpolation(begin_node)
30
+ final_node = begin_node.children.last
31
+
32
+ return unless to_s_without_args?(final_node)
33
+
34
+ add_offense(final_node, location: :selector)
35
+ end
36
+
37
+ def autocorrect(node)
38
+ lambda do |corrector|
39
+ receiver = node.receiver
40
+ corrector.replace(
41
+ node.source_range,
42
+ if receiver
43
+ receiver.source
44
+ else
45
+ 'self'
46
+ end
47
+ )
48
+ end
49
+ end
50
+
51
+ private
52
+
53
+ def message(node)
54
+ node.receiver ? MSG_DEFAULT : MSG_SELF
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Lint
6
+ # This is not actually a cop. It does not inspect anything. It just
7
+ # provides methods to repack Parser's diagnostics/errors
8
+ # into RuboCop's offenses.
9
+ class Syntax < Cop
10
+ PseudoSourceRange = Struct.new(:line, :column, :source_line, :begin_pos,
11
+ :end_pos)
12
+
13
+ ERROR_SOURCE_RANGE = PseudoSourceRange.new(1, 0, '', 0, 1).freeze
14
+
15
+ def self.offenses_from_processed_source(processed_source,
16
+ config, options)
17
+ cop = new(config, options)
18
+
19
+ if processed_source.parser_error
20
+ cop.add_offense_from_error(processed_source.parser_error)
21
+ end
22
+
23
+ processed_source.diagnostics.each do |diagnostic|
24
+ cop.add_offense_from_diagnostic(diagnostic,
25
+ processed_source.ruby_version)
26
+ end
27
+
28
+ cop.offenses
29
+ end
30
+
31
+ def add_offense_from_diagnostic(diagnostic, ruby_version)
32
+ message =
33
+ "#{diagnostic.message}\n(Using Ruby #{ruby_version} parser; " \
34
+ 'configure using `TargetRubyVersion` parameter, under `AllCops`)'
35
+ add_offense(nil,
36
+ location: diagnostic.location,
37
+ message: message,
38
+ severity: diagnostic.level)
39
+ end
40
+
41
+ def add_offense_from_error(error)
42
+ message = beautify_message(error.message)
43
+ add_offense(nil,
44
+ location: ERROR_SOURCE_RANGE,
45
+ message: message,
46
+ severity: :fatal)
47
+ end
48
+
49
+ private
50
+
51
+ def beautify_message(message)
52
+ message = message.capitalize
53
+ message << '.' unless message.end_with?('.')
54
+ message
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Lint
6
+ # This cop checks to make sure `#to_json` includes an optional argument.
7
+ # When overriding `#to_json`, callers may invoke JSON
8
+ # generation via `JSON.generate(your_obj)`. Since `JSON#generate` allows
9
+ # for an optional argument, your method should too.
10
+ #
11
+ # @example
12
+ # # bad
13
+ # def to_json
14
+ # end
15
+ #
16
+ # # good
17
+ # def to_json(*_args)
18
+ # end
19
+ #
20
+ class ToJSON < Cop
21
+ MSG = ' `#to_json` requires an optional argument to be parsable ' \
22
+ 'via JSON.generate(obj).'
23
+
24
+ def on_def(node)
25
+ return unless node.method?(:to_json) && node.arguments.empty?
26
+
27
+ add_offense(node)
28
+ end
29
+
30
+ def autocorrect(node)
31
+ lambda do |corrector|
32
+ # The following used `*_args` because `to_json(*args)` has
33
+ # an offense of `Lint/UnusedMethodArgument` cop if `*args`
34
+ # is not used.
35
+ corrector.insert_after(node.loc.name, '(*_args)')
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Lint
6
+ # This cop checks for underscore-prefixed variables that are actually
7
+ # used.
8
+ #
9
+ # Since block keyword arguments cannot be arbitrarily named at call
10
+ # sites, the `AllowKeywordBlockArguments` will allow use of underscore-
11
+ # prefixed block keyword arguments.
12
+ #
13
+ # @example AllowKeywordBlockArguments: false (default)
14
+ #
15
+ # # bad
16
+ #
17
+ # [1, 2, 3].each do |_num|
18
+ # do_something(_num)
19
+ # end
20
+ #
21
+ # query(:sales) do |_id:, revenue:, cost:|
22
+ # {_id: _id, profit: revenue - cost}
23
+ # end
24
+ #
25
+ # # good
26
+ #
27
+ # [1, 2, 3].each do |num|
28
+ # do_something(num)
29
+ # end
30
+ #
31
+ # [1, 2, 3].each do |_num|
32
+ # do_something # not using `_num`
33
+ # end
34
+ #
35
+ # @example AllowKeywordBlockArguments: true
36
+ #
37
+ # # good
38
+ #
39
+ # query(:sales) do |_id:, revenue:, cost:|
40
+ # {_id: _id, profit: revenue - cost}
41
+ # end
42
+ #
43
+ class UnderscorePrefixedVariableName < Cop
44
+ MSG = 'Do not use prefix `_` for a variable that is used.'
45
+
46
+ def join_force?(force_class)
47
+ force_class == VariableForce
48
+ end
49
+
50
+ def after_leaving_scope(scope, _variable_table)
51
+ scope.variables.each_value do |variable|
52
+ check_variable(variable)
53
+ end
54
+ end
55
+
56
+ def check_variable(variable)
57
+ return unless variable.should_be_unused?
58
+ return if variable.references.none?(&:explicit?)
59
+ return if allowed_keyword_block_argument?(variable)
60
+
61
+ node = variable.declaration_node
62
+
63
+ location = if node.match_with_lvasgn_type?
64
+ node.children.first.source_range
65
+ else
66
+ node.loc.name
67
+ end
68
+
69
+ add_offense(nil, location: location)
70
+ end
71
+
72
+ private
73
+
74
+ def allowed_keyword_block_argument?(variable)
75
+ variable.block_argument? &&
76
+ variable.keyword_argument? &&
77
+ cop_config['AllowKeywordBlockArguments']
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Lint
6
+ # This cop checks for using Fixnum or Bignum constant.
7
+ #
8
+ # @example
9
+ #
10
+ # # bad
11
+ #
12
+ # 1.is_a?(Fixnum)
13
+ # 1.is_a?(Bignum)
14
+ #
15
+ # @example
16
+ #
17
+ # # good
18
+ #
19
+ # 1.is_a?(Integer)
20
+ class UnifiedInteger < Cop
21
+ MSG = 'Use `Integer` instead of `%<klass>s`.'
22
+
23
+ def_node_matcher :fixnum_or_bignum_const, <<~PATTERN
24
+ (:const {nil? (:cbase)} ${:Fixnum :Bignum})
25
+ PATTERN
26
+
27
+ def on_const(node)
28
+ klass = fixnum_or_bignum_const(node)
29
+
30
+ return unless klass
31
+
32
+ add_offense(node, message: format(MSG, klass: klass))
33
+ end
34
+
35
+ def autocorrect(node)
36
+ return false if target_ruby_version <= 2.3
37
+
38
+ lambda do |corrector|
39
+ corrector.replace(node.loc.name, 'Integer')
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,263 @@
1
+ # frozen_string_literal: true
2
+
3
+ # The Lint/UnneededCopDisableDirective cop needs to be disabled so as
4
+ # to be able to provide a (bad) example of an unneeded disable.
5
+ # rubocop:disable Lint/UnneededCopDisableDirective
6
+ module RuboCop
7
+ module Cop
8
+ module Lint
9
+ # This cop detects instances of rubocop:disable comments that can be
10
+ # removed without causing any offenses to be reported. It's implemented
11
+ # as a cop in that it inherits from the Cop base class and calls
12
+ # add_offense. The unusual part of its implementation is that it doesn't
13
+ # have any on_* methods or an investigate method. This means that it
14
+ # doesn't take part in the investigation phase when the other cops do
15
+ # their work. Instead, it waits until it's called in a later stage of the
16
+ # execution. The reason it can't be implemented as a normal cop is that
17
+ # it depends on the results of all other cops to do its work.
18
+ #
19
+ #
20
+ # @example
21
+ # # bad
22
+ # # rubocop:disable Metrics/LineLength
23
+ # x += 1
24
+ # # rubocop:enable Metrics/LineLength
25
+ #
26
+ # # good
27
+ # x += 1
28
+ class UnneededCopDisableDirective < Cop
29
+ include NameSimilarity
30
+ include RangeHelp
31
+
32
+ COP_NAME = 'Lint/UnneededCopDisableDirective'
33
+
34
+ def check(offenses, cop_disabled_line_ranges, comments)
35
+ unneeded_cops = Hash.new { |h, k| h[k] = Set.new }
36
+
37
+ each_unneeded_disable(cop_disabled_line_ranges,
38
+ offenses, comments) do |comment, unneeded_cop|
39
+ unneeded_cops[comment].add(unneeded_cop)
40
+ end
41
+
42
+ add_offenses(unneeded_cops)
43
+ end
44
+
45
+ def autocorrect(args)
46
+ lambda do |corrector|
47
+ ranges, range = *args # Ranges are sorted by position.
48
+
49
+ range = if range.source.start_with?('#')
50
+ comment_range_with_surrounding_space(range)
51
+ else
52
+ directive_range_in_list(range, ranges)
53
+ end
54
+
55
+ corrector.remove(range)
56
+ end
57
+ end
58
+
59
+ private
60
+
61
+ def comment_range_with_surrounding_space(range)
62
+ # Eat the entire comment, the preceding space, and the preceding
63
+ # newline if there is one.
64
+ original_begin = range.begin_pos
65
+ range = range_with_surrounding_space(range: range,
66
+ side: :left,
67
+ newlines: true)
68
+ range_with_surrounding_space(range: range,
69
+ side: :right,
70
+ # Special for a comment that
71
+ # begins the file: remove
72
+ # the newline at the end.
73
+ newlines: original_begin.zero?)
74
+ end
75
+
76
+ def directive_range_in_list(range, ranges)
77
+ # Is there any cop between this one and the end of the line, which
78
+ # is NOT being removed?
79
+ if ends_its_line?(ranges.last) && trailing_range?(ranges, range)
80
+ # Eat the comma on the left.
81
+ range = range_with_surrounding_space(range: range, side: :left)
82
+ range = range_with_surrounding_comma(range, :left)
83
+ end
84
+
85
+ range = range_with_surrounding_comma(range, :right)
86
+ # Eat following spaces up to EOL, but not the newline itself.
87
+ range_with_surrounding_space(range: range,
88
+ side: :right,
89
+ newlines: false)
90
+ end
91
+
92
+ def each_unneeded_disable(cop_disabled_line_ranges, offenses, comments,
93
+ &block)
94
+ disabled_ranges = cop_disabled_line_ranges[COP_NAME] || [0..0]
95
+
96
+ cop_disabled_line_ranges.each do |cop, line_ranges|
97
+ each_already_disabled(line_ranges,
98
+ disabled_ranges, comments) do |comment|
99
+ yield comment, cop
100
+ end
101
+
102
+ each_line_range(line_ranges, disabled_ranges, offenses, comments,
103
+ cop, &block)
104
+ end
105
+ end
106
+
107
+ def each_line_range(line_ranges, disabled_ranges, offenses, comments,
108
+ cop)
109
+ line_ranges.each_with_index do |line_range, ix|
110
+ comment = comments.find { |c| c.loc.line == line_range.begin }
111
+ next if ignore_offense?(disabled_ranges, line_range)
112
+
113
+ unneeded_cop = find_unneeded(comment, offenses, cop, line_range,
114
+ line_ranges[ix + 1])
115
+ yield comment, unneeded_cop if unneeded_cop
116
+ end
117
+ end
118
+
119
+ def each_already_disabled(line_ranges, disabled_ranges, comments)
120
+ line_ranges.each_cons(2) do |previous_range, range|
121
+ next if ignore_offense?(disabled_ranges, range)
122
+ next if previous_range.end != range.begin
123
+
124
+ # If a cop is disabled in a range that begins on the same line as
125
+ # the end of the previous range, it means that the cop was
126
+ # already disabled by an earlier comment. So it's unneeded
127
+ # whether there are offenses or not.
128
+ unneeded_comment = comments.find do |c|
129
+ c.loc.line == range.begin &&
130
+ # Comments disabling all cops don't count since it's reasonable
131
+ # to disable a few select cops first and then all cops further
132
+ # down in the code.
133
+ !all_disabled?(c)
134
+ end
135
+ yield unneeded_comment if unneeded_comment
136
+ end
137
+ end
138
+
139
+ def find_unneeded(comment, offenses, cop, line_range, next_line_range)
140
+ if all_disabled?(comment)
141
+ # If there's a disable all comment followed by a comment
142
+ # specifically disabling `cop`, we don't report the `all`
143
+ # comment. If the disable all comment is truly unneeded, we will
144
+ # detect that when examining the comments of another cop, and we
145
+ # get the full line range for the disable all.
146
+ if (next_line_range.nil? ||
147
+ line_range.last != next_line_range.first) &&
148
+ offenses.none? { |o| line_range.cover?(o.line) }
149
+ 'all'
150
+ end
151
+ else
152
+ cop_offenses = offenses.select { |o| o.cop_name == cop }
153
+ cop if cop_offenses.none? { |o| line_range.cover?(o.line) }
154
+ end
155
+ end
156
+
157
+ def all_disabled?(comment)
158
+ comment.text =~ /rubocop\s*:\s*(?:disable|todo)\s+all\b/
159
+ end
160
+
161
+ def ignore_offense?(disabled_ranges, line_range)
162
+ disabled_ranges.any? do |range|
163
+ range.cover?(line_range.min) && range.cover?(line_range.max)
164
+ end
165
+ end
166
+
167
+ def directive_count(comment)
168
+ match = comment.text.match(CommentConfig::COMMENT_DIRECTIVE_REGEXP)
169
+ _, cops_string = match.captures
170
+ cops_string.split(/,\s*/).size
171
+ end
172
+
173
+ def add_offenses(unneeded_cops)
174
+ unneeded_cops.each do |comment, cops|
175
+ if all_disabled?(comment) ||
176
+ directive_count(comment) == cops.size
177
+ add_offense_for_entire_comment(comment, cops)
178
+ else
179
+ add_offense_for_some_cops(comment, cops)
180
+ end
181
+ end
182
+ end
183
+
184
+ def add_offense_for_entire_comment(comment, cops)
185
+ location = comment.loc.expression
186
+ cop_list = cops.sort.map { |c| describe(c) }
187
+
188
+ add_offense(
189
+ [[location], location],
190
+ location: location,
191
+ message: "Unnecessary disabling of #{cop_list.join(', ')}."
192
+ )
193
+ end
194
+
195
+ def add_offense_for_some_cops(comment, cops)
196
+ cop_ranges = cops.map { |c| [c, cop_range(comment, c)] }
197
+ cop_ranges.sort_by! { |_, r| r.begin_pos }
198
+ ranges = cop_ranges.map { |_, r| r }
199
+
200
+ cop_ranges.each do |cop, range|
201
+ add_offense(
202
+ [ranges, range],
203
+ location: range,
204
+ message: "Unnecessary disabling of #{describe(cop)}."
205
+ )
206
+ end
207
+ end
208
+
209
+ def cop_range(comment, cop)
210
+ matching_range(comment.loc.expression, cop) ||
211
+ matching_range(comment.loc.expression, Badge.parse(cop).cop_name) ||
212
+ raise("Couldn't find #{cop} in comment: #{comment.text}")
213
+ end
214
+
215
+ def matching_range(haystack, needle)
216
+ offset = (haystack.source =~ Regexp.new(Regexp.escape(needle)))
217
+ return unless offset
218
+
219
+ offset += haystack.begin_pos
220
+ Parser::Source::Range.new(haystack.source_buffer, offset,
221
+ offset + needle.size)
222
+ end
223
+
224
+ def trailing_range?(ranges, range)
225
+ ranges
226
+ .drop_while { |r| !r.equal?(range) }
227
+ .each_cons(2)
228
+ .map { |range1, range2| range1.end.join(range2.begin).source }
229
+ .all? { |intervening| intervening =~ /\A\s*,\s*\Z/ }
230
+ end
231
+
232
+ def describe(cop)
233
+ if cop == 'all'
234
+ 'all cops'
235
+ elsif all_cop_names.include?(cop)
236
+ "`#{cop}`"
237
+ else
238
+ similar = find_similar_name(cop, [])
239
+ if similar
240
+ "`#{cop}` (did you mean `#{similar}`?)"
241
+ else
242
+ "`#{cop}` (unknown cop)"
243
+ end
244
+ end
245
+ end
246
+
247
+ def collect_variable_like_names(scope)
248
+ all_cop_names.each { |name| scope << name }
249
+ end
250
+
251
+ def all_cop_names
252
+ @all_cop_names ||= Cop.registry.names
253
+ end
254
+
255
+ def ends_its_line?(range)
256
+ line = range.source_buffer.source_line(range.last_line)
257
+ (line =~ /\s*\z/) == range.last_column
258
+ end
259
+ end
260
+ end
261
+ end
262
+ end
263
+ # rubocop:enable Lint/UnneededCopDisableDirective