rubocop 0.82.0 → 0.86.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (280) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +27 -19
  3. data/config/default.yml +111 -23
  4. data/lib/rubocop.rb +16 -59
  5. data/lib/rubocop/ast_aliases.rb +8 -0
  6. data/lib/rubocop/cli.rb +3 -3
  7. data/lib/rubocop/cli/command/auto_genenerate_config.rb +2 -2
  8. data/lib/rubocop/cli/command/init_dotfile.rb +1 -1
  9. data/lib/rubocop/cli/command/show_cops.rb +2 -6
  10. data/lib/rubocop/comment_config.rb +1 -1
  11. data/lib/rubocop/config.rb +6 -2
  12. data/lib/rubocop/config_loader.rb +19 -24
  13. data/lib/rubocop/config_loader_resolver.rb +45 -6
  14. data/lib/rubocop/config_store.rb +12 -2
  15. data/lib/rubocop/config_validator.rb +2 -1
  16. data/lib/rubocop/cop/autocorrect_logic.rb +1 -2
  17. data/lib/rubocop/cop/bundler/gem_comment.rb +70 -1
  18. data/lib/rubocop/cop/commissioner.rb +0 -21
  19. data/lib/rubocop/cop/cop.rb +36 -21
  20. data/lib/rubocop/cop/correctors/alignment_corrector.rb +2 -6
  21. data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +1 -1
  22. data/lib/rubocop/cop/correctors/space_corrector.rb +1 -3
  23. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -3
  24. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +1 -1
  25. data/lib/rubocop/cop/generator.rb +4 -3
  26. data/lib/rubocop/cop/generator/configuration_injector.rb +1 -1
  27. data/lib/rubocop/cop/ignored_node.rb +1 -3
  28. data/lib/rubocop/cop/layout/case_indentation.rb +3 -3
  29. data/lib/rubocop/cop/layout/class_structure.rb +19 -16
  30. data/lib/rubocop/cop/layout/comment_indentation.rb +3 -3
  31. data/lib/rubocop/cop/layout/condition_position.rb +12 -2
  32. data/lib/rubocop/cop/layout/empty_comment.rb +1 -1
  33. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +2 -6
  34. data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +128 -0
  35. data/lib/rubocop/cop/layout/end_of_line.rb +3 -3
  36. data/lib/rubocop/cop/layout/first_argument_indentation.rb +2 -4
  37. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +1 -3
  38. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -1
  39. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -3
  40. data/lib/rubocop/cop/layout/first_parameter_indentation.rb +2 -2
  41. data/lib/rubocop/cop/layout/hash_alignment.rb +7 -7
  42. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +3 -7
  43. data/lib/rubocop/cop/layout/heredoc_indentation.rb +20 -103
  44. data/lib/rubocop/cop/layout/indentation_width.rb +1 -3
  45. data/lib/rubocop/cop/layout/line_length.rb +21 -18
  46. data/lib/rubocop/cop/layout/multiline_block_layout.rb +1 -1
  47. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -3
  48. data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +13 -4
  49. data/lib/rubocop/cop/layout/space_after_colon.rb +1 -1
  50. data/lib/rubocop/cop/layout/space_around_keyword.rb +2 -2
  51. data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +1 -3
  52. data/lib/rubocop/cop/layout/space_around_operators.rb +19 -2
  53. data/lib/rubocop/cop/layout/space_before_block_braces.rb +14 -0
  54. data/lib/rubocop/cop/layout/space_before_comment.rb +1 -3
  55. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +2 -4
  56. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +1 -1
  57. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +2 -2
  58. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +1 -3
  59. data/lib/rubocop/cop/layout/trailing_whitespace.rb +2 -2
  60. data/lib/rubocop/cop/lint/ambiguous_operator.rb +41 -0
  61. data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +14 -0
  62. data/lib/rubocop/cop/lint/constant_resolution.rb +89 -0
  63. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +137 -0
  64. data/lib/rubocop/cop/lint/duplicate_methods.rb +1 -5
  65. data/lib/rubocop/cop/lint/empty_when.rb +29 -6
  66. data/lib/rubocop/cop/lint/ensure_return.rb +19 -2
  67. data/lib/rubocop/cop/lint/erb_new_arguments.rb +1 -3
  68. data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -1
  69. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +38 -2
  70. data/lib/rubocop/cop/lint/literal_as_condition.rb +10 -13
  71. data/lib/rubocop/cop/lint/loop.rb +1 -1
  72. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +69 -0
  73. data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -1
  74. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +7 -7
  75. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +33 -11
  76. data/lib/rubocop/cop/lint/percent_string_array.rb +2 -4
  77. data/lib/rubocop/cop/lint/percent_symbol_array.rb +1 -1
  78. data/lib/rubocop/cop/lint/raise_exception.rb +12 -4
  79. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +5 -8
  80. data/lib/rubocop/cop/lint/redundant_require_statement.rb +3 -3
  81. data/lib/rubocop/cop/lint/regexp_as_condition.rb +6 -0
  82. data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
  83. data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +1 -1
  84. data/lib/rubocop/cop/lint/suppressed_exception.rb +11 -4
  85. data/lib/rubocop/cop/lint/syntax.rb +1 -3
  86. data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
  87. data/lib/rubocop/cop/lint/useless_access_modifier.rb +13 -3
  88. data/lib/rubocop/cop/lint/useless_assignment.rb +3 -2
  89. data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +6 -1
  90. data/lib/rubocop/cop/lint/useless_setter_call.rb +1 -1
  91. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +35 -3
  92. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +1 -1
  93. data/lib/rubocop/cop/metrics/utils/iterating_block.rb +61 -0
  94. data/lib/rubocop/cop/migration/department_name.rb +7 -7
  95. data/lib/rubocop/cop/mixin/alignment.rb +1 -3
  96. data/lib/rubocop/cop/mixin/array_min_size.rb +1 -3
  97. data/lib/rubocop/cop/mixin/check_line_breakable.rb +3 -9
  98. data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +1 -3
  99. data/lib/rubocop/cop/mixin/configurable_formatting.rb +2 -4
  100. data/lib/rubocop/cop/mixin/configurable_naming.rb +1 -1
  101. data/lib/rubocop/cop/mixin/documentation_comment.rb +2 -2
  102. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -1
  103. data/lib/rubocop/cop/mixin/first_element_line_break.rb +1 -1
  104. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +10 -1
  105. data/lib/rubocop/cop/mixin/hash_transform_method.rb +8 -1
  106. data/lib/rubocop/cop/mixin/ignored_pattern.rb +1 -1
  107. data/lib/rubocop/cop/mixin/line_length_help.rb +3 -2
  108. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +1 -1
  109. data/lib/rubocop/cop/mixin/parentheses.rb +1 -2
  110. data/lib/rubocop/cop/mixin/parser_diagnostic.rb +1 -1
  111. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +1 -1
  112. data/lib/rubocop/cop/mixin/range_help.rb +1 -1
  113. data/lib/rubocop/cop/mixin/regexp_literal_help.rb +43 -0
  114. data/lib/rubocop/cop/mixin/statement_modifier.rb +7 -23
  115. data/lib/rubocop/cop/mixin/string_literals_help.rb +1 -1
  116. data/lib/rubocop/cop/mixin/surrounding_space.rb +3 -3
  117. data/lib/rubocop/cop/mixin/target_ruby_version.rb +5 -1
  118. data/lib/rubocop/cop/mixin/trailing_comma.rb +2 -4
  119. data/lib/rubocop/cop/mixin/uncommunicative_name.rb +3 -3
  120. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -1
  121. data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +11 -1
  122. data/lib/rubocop/cop/naming/file_name.rb +28 -17
  123. data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +1 -1
  124. data/lib/rubocop/cop/naming/method_name.rb +1 -5
  125. data/lib/rubocop/cop/naming/predicate_name.rb +1 -1
  126. data/lib/rubocop/cop/registry.rb +63 -10
  127. data/lib/rubocop/cop/severity.rb +1 -3
  128. data/lib/rubocop/cop/style/and_or.rb +2 -2
  129. data/lib/rubocop/cop/style/array_join.rb +1 -1
  130. data/lib/rubocop/cop/style/attr.rb +1 -3
  131. data/lib/rubocop/cop/style/bare_percent_literals.rb +2 -2
  132. data/lib/rubocop/cop/style/block_delimiters.rb +4 -12
  133. data/lib/rubocop/cop/style/case_equality.rb +1 -1
  134. data/lib/rubocop/cop/style/class_and_module_children.rb +1 -1
  135. data/lib/rubocop/cop/style/command_literal.rb +1 -1
  136. data/lib/rubocop/cop/style/commented_keyword.rb +2 -2
  137. data/lib/rubocop/cop/style/conditional_assignment.rb +2 -4
  138. data/lib/rubocop/cop/style/copyright.rb +5 -5
  139. data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +1 -1
  140. data/lib/rubocop/cop/style/documentation.rb +2 -2
  141. data/lib/rubocop/cop/style/double_negation.rb +41 -4
  142. data/lib/rubocop/cop/style/empty_case_condition.rb +8 -6
  143. data/lib/rubocop/cop/style/empty_literal.rb +1 -3
  144. data/lib/rubocop/cop/style/empty_method.rb +1 -5
  145. data/lib/rubocop/cop/style/encoding.rb +1 -1
  146. data/lib/rubocop/cop/style/exponential_notation.rb +5 -5
  147. data/lib/rubocop/cop/style/format_string_token.rb +2 -3
  148. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -6
  149. data/lib/rubocop/cop/style/guard_clause.rb +25 -2
  150. data/lib/rubocop/cop/style/hash_each_methods.rb +1 -1
  151. data/lib/rubocop/cop/style/hash_syntax.rb +16 -7
  152. data/lib/rubocop/cop/style/identical_conditional_branches.rb +1 -1
  153. data/lib/rubocop/cop/style/if_inside_else.rb +1 -1
  154. data/lib/rubocop/cop/style/if_with_semicolon.rb +16 -0
  155. data/lib/rubocop/cop/style/inline_comment.rb +1 -1
  156. data/lib/rubocop/cop/style/inverse_methods.rb +1 -1
  157. data/lib/rubocop/cop/style/ip_addresses.rb +1 -1
  158. data/lib/rubocop/cop/style/lambda_call.rb +0 -20
  159. data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +1 -3
  160. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -3
  161. data/lib/rubocop/cop/style/multiline_if_then.rb +1 -1
  162. data/lib/rubocop/cop/style/multiline_memoization.rb +1 -1
  163. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +17 -6
  164. data/lib/rubocop/cop/style/multiline_when_then.rb +16 -1
  165. data/lib/rubocop/cop/style/negated_if.rb +3 -3
  166. data/lib/rubocop/cop/style/negated_unless.rb +3 -3
  167. data/lib/rubocop/cop/style/nested_ternary_operator.rb +27 -0
  168. data/lib/rubocop/cop/style/next.rb +2 -2
  169. data/lib/rubocop/cop/style/non_nil_check.rb +1 -1
  170. data/lib/rubocop/cop/style/numeric_literal_prefix.rb +2 -2
  171. data/lib/rubocop/cop/style/one_line_conditional.rb +2 -6
  172. data/lib/rubocop/cop/style/optional_arguments.rb +1 -1
  173. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -1
  174. data/lib/rubocop/cop/style/redundant_conditional.rb +4 -3
  175. data/lib/rubocop/cop/style/redundant_fetch_block.rb +103 -0
  176. data/lib/rubocop/cop/style/redundant_parentheses.rb +3 -7
  177. data/lib/rubocop/cop/style/redundant_percent_q.rb +3 -3
  178. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +89 -0
  179. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +121 -0
  180. data/lib/rubocop/cop/style/redundant_self.rb +6 -9
  181. data/lib/rubocop/cop/style/safe_navigation.rb +2 -6
  182. data/lib/rubocop/cop/style/sample.rb +1 -1
  183. data/lib/rubocop/cop/style/semicolon.rb +1 -1
  184. data/lib/rubocop/cop/style/slicing_with_range.rb +39 -0
  185. data/lib/rubocop/cop/style/special_global_vars.rb +2 -6
  186. data/lib/rubocop/cop/style/struct_inheritance.rb +21 -0
  187. data/lib/rubocop/cop/style/symbol_array.rb +5 -5
  188. data/lib/rubocop/cop/style/ternary_parentheses.rb +2 -4
  189. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +3 -3
  190. data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +3 -3
  191. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +13 -13
  192. data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +3 -3
  193. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +1 -3
  194. data/lib/rubocop/cop/style/unless_else.rb +1 -1
  195. data/lib/rubocop/cop/style/when_then.rb +1 -1
  196. data/lib/rubocop/cop/style/word_array.rb +1 -1
  197. data/lib/rubocop/cop/style/yoda_condition.rb +18 -1
  198. data/lib/rubocop/cop/team.rb +69 -25
  199. data/lib/rubocop/cop/util.rb +27 -3
  200. data/lib/rubocop/cop/utils/format_string.rb +18 -0
  201. data/lib/rubocop/cop/variable_force.rb +3 -9
  202. data/lib/rubocop/cop/variable_force/assignment.rb +1 -0
  203. data/lib/rubocop/cop/variable_force/branch.rb +1 -3
  204. data/lib/rubocop/cop/variable_force/scope.rb +1 -0
  205. data/lib/rubocop/cop/variable_force/variable.rb +3 -6
  206. data/lib/rubocop/ext/processed_source.rb +18 -0
  207. data/lib/rubocop/formatter/base_formatter.rb +0 -4
  208. data/lib/rubocop/formatter/disabled_config_formatter.rb +5 -13
  209. data/lib/rubocop/formatter/formatter_set.rb +2 -4
  210. data/lib/rubocop/formatter/junit_formatter.rb +14 -4
  211. data/lib/rubocop/magic_comment.rb +1 -1
  212. data/lib/rubocop/name_similarity.rb +18 -9
  213. data/lib/rubocop/options.rb +26 -11
  214. data/lib/rubocop/path_util.rb +2 -2
  215. data/lib/rubocop/platform.rb +1 -1
  216. data/lib/rubocop/remote_config.rb +1 -3
  217. data/lib/rubocop/result_cache.rb +5 -7
  218. data/lib/rubocop/rspec/cop_helper.rb +2 -25
  219. data/lib/rubocop/rspec/expect_offense.rb +58 -15
  220. data/lib/rubocop/rspec/shared_contexts.rb +54 -16
  221. data/lib/rubocop/runner.rb +20 -13
  222. data/lib/rubocop/target_finder.rb +8 -8
  223. data/lib/rubocop/target_ruby.rb +4 -1
  224. data/lib/rubocop/version.rb +5 -3
  225. metadata +51 -74
  226. data/lib/rubocop/ast/builder.rb +0 -85
  227. data/lib/rubocop/ast/node.rb +0 -637
  228. data/lib/rubocop/ast/node/alias_node.rb +0 -24
  229. data/lib/rubocop/ast/node/and_node.rb +0 -29
  230. data/lib/rubocop/ast/node/args_node.rb +0 -29
  231. data/lib/rubocop/ast/node/array_node.rb +0 -70
  232. data/lib/rubocop/ast/node/block_node.rb +0 -121
  233. data/lib/rubocop/ast/node/break_node.rb +0 -17
  234. data/lib/rubocop/ast/node/case_match_node.rb +0 -56
  235. data/lib/rubocop/ast/node/case_node.rb +0 -56
  236. data/lib/rubocop/ast/node/class_node.rb +0 -31
  237. data/lib/rubocop/ast/node/def_node.rb +0 -82
  238. data/lib/rubocop/ast/node/defined_node.rb +0 -17
  239. data/lib/rubocop/ast/node/ensure_node.rb +0 -17
  240. data/lib/rubocop/ast/node/float_node.rb +0 -12
  241. data/lib/rubocop/ast/node/for_node.rb +0 -53
  242. data/lib/rubocop/ast/node/forward_args_node.rb +0 -18
  243. data/lib/rubocop/ast/node/hash_node.rb +0 -109
  244. data/lib/rubocop/ast/node/if_node.rb +0 -175
  245. data/lib/rubocop/ast/node/int_node.rb +0 -12
  246. data/lib/rubocop/ast/node/keyword_splat_node.rb +0 -45
  247. data/lib/rubocop/ast/node/mixin/basic_literal_node.rb +0 -16
  248. data/lib/rubocop/ast/node/mixin/binary_operator_node.rb +0 -43
  249. data/lib/rubocop/ast/node/mixin/collection_node.rb +0 -15
  250. data/lib/rubocop/ast/node/mixin/conditional_node.rb +0 -45
  251. data/lib/rubocop/ast/node/mixin/hash_element_node.rb +0 -125
  252. data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +0 -269
  253. data/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +0 -114
  254. data/lib/rubocop/ast/node/mixin/modifier_node.rb +0 -17
  255. data/lib/rubocop/ast/node/mixin/numeric_node.rb +0 -21
  256. data/lib/rubocop/ast/node/mixin/parameterized_node.rb +0 -61
  257. data/lib/rubocop/ast/node/mixin/predicate_operator_node.rb +0 -35
  258. data/lib/rubocop/ast/node/module_node.rb +0 -24
  259. data/lib/rubocop/ast/node/or_node.rb +0 -29
  260. data/lib/rubocop/ast/node/pair_node.rb +0 -63
  261. data/lib/rubocop/ast/node/range_node.rb +0 -18
  262. data/lib/rubocop/ast/node/regexp_node.rb +0 -33
  263. data/lib/rubocop/ast/node/resbody_node.rb +0 -24
  264. data/lib/rubocop/ast/node/retry_node.rb +0 -17
  265. data/lib/rubocop/ast/node/return_node.rb +0 -24
  266. data/lib/rubocop/ast/node/self_class_node.rb +0 -24
  267. data/lib/rubocop/ast/node/send_node.rb +0 -13
  268. data/lib/rubocop/ast/node/str_node.rb +0 -16
  269. data/lib/rubocop/ast/node/super_node.rb +0 -21
  270. data/lib/rubocop/ast/node/symbol_node.rb +0 -12
  271. data/lib/rubocop/ast/node/until_node.rb +0 -35
  272. data/lib/rubocop/ast/node/when_node.rb +0 -53
  273. data/lib/rubocop/ast/node/while_node.rb +0 -35
  274. data/lib/rubocop/ast/node/yield_node.rb +0 -21
  275. data/lib/rubocop/ast/sexp.rb +0 -16
  276. data/lib/rubocop/ast/traversal.rb +0 -202
  277. data/lib/rubocop/node_pattern.rb +0 -887
  278. data/lib/rubocop/processed_source.rb +0 -213
  279. data/lib/rubocop/string_util.rb +0 -14
  280. data/lib/rubocop/token.rb +0 -114
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RuboCop
4
- module AST
5
- # A node extension for `alias` nodes. This will be used in place of a plain
6
- # node when the builder constructs the AST, making its methods available
7
- # to all `alias` nodes within RuboCop.
8
- class AliasNode < Node
9
- # Returns the old identifier as specified by the `alias`.
10
- #
11
- # @return [SymbolNode] the old identifier
12
- def old_identifier
13
- node_parts[1]
14
- end
15
-
16
- # Returns the new identifier as specified by the `alias`.
17
- #
18
- # @return [SymbolNode] the new identifier
19
- def new_identifier
20
- node_parts[0]
21
- end
22
- end
23
- end
24
- end
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RuboCop
4
- module AST
5
- # A node extension for `until` nodes. This will be used in place of a plain
6
- # node when the builder constructs the AST, making its methods available
7
- # to all `until` nodes within RuboCop.
8
- class AndNode < Node
9
- include BinaryOperatorNode
10
- include PredicateOperatorNode
11
-
12
- # Returns the alternate operator of the `and` as a string.
13
- # Returns `and` for `&&` and vice versa.
14
- #
15
- # @return [String] the alternate of the `and` operator
16
- def alternate_operator
17
- logical_operator? ? SEMANTIC_AND : LOGICAL_AND
18
- end
19
-
20
- # Returns the inverse keyword of the `and` node as a string.
21
- # Returns `||` for `&&` and `or` for `and`.
22
- #
23
- # @return [String] the inverse of the `and` operator
24
- def inverse_operator
25
- logical_operator? ? LOGICAL_OR : SEMANTIC_OR
26
- end
27
- end
28
- end
29
- end
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RuboCop
4
- module AST
5
- # A node extension for `args` nodes. This will be used in place of a plain
6
- # node when the builder constructs the AST, making its methods available
7
- # to all `args` nodes within RuboCop.
8
- class ArgsNode < Node
9
- include CollectionNode
10
-
11
- # It returns true if arguments are empty and delimiters do not exist.
12
- # @example:
13
- # # true
14
- # def x; end
15
- # x { }
16
- # -> {}
17
- #
18
- # # false
19
- # def x(); end
20
- # def x a; end
21
- # x { || }
22
- # -> () {}
23
- # -> a {}
24
- def empty_and_without_delimiters?
25
- loc.expression.nil?
26
- end
27
- end
28
- end
29
- end
@@ -1,70 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RuboCop
4
- module AST
5
- # A node extension for `array` nodes. This will be used in place of a plain
6
- # node when the builder constructs the AST, making its methods available
7
- # to all `array` nodes within RuboCop.
8
- class ArrayNode < Node
9
- PERCENT_LITERAL_TYPES = {
10
- string: /^%[wW]/,
11
- symbol: /^%[iI]/
12
- }.freeze
13
-
14
- # Returns an array of all value nodes in the `array` literal.
15
- #
16
- # @return [Array<Node>] an array of value nodes
17
- def values
18
- each_child_node.to_a
19
- end
20
-
21
- # Calls the given block for all values in the `array` literal.
22
- #
23
- # @yieldparam [Node] node each node
24
- # @return [self] if a block is given
25
- # @return [Enumerator] if no block is given
26
- def each_value(&block)
27
- return to_enum(__method__) unless block_given?
28
-
29
- values.each(&block)
30
-
31
- self
32
- end
33
-
34
- # Checks whether the `array` literal is delimited by square brackets.
35
- #
36
- # @return [Boolean] whether the array is enclosed in square brackets
37
- def square_brackets?
38
- loc.begin&.is?('[')
39
- end
40
-
41
- # Checks whether the `array` literal is delimited by percent brackets.
42
- #
43
- # @overload percent_literal?
44
- # Check for any percent literal.
45
- #
46
- # @overload percent_literal?(type)
47
- # Check for percent literal of type `type`.
48
- #
49
- # @param type [Symbol] an optional percent literal type
50
- #
51
- # @return [Boolean] whether the array is enclosed in percent brackets
52
- def percent_literal?(type = nil)
53
- if type
54
- loc.begin && loc.begin.source =~ PERCENT_LITERAL_TYPES[type]
55
- else
56
- loc.begin&.source&.start_with?('%')
57
- end
58
- end
59
-
60
- # Checks whether the `array` literal is delimited by either percent or
61
- # square brackets
62
- #
63
- # @return [Boolean] whether the array is enclosed in percent or square
64
- # brackets
65
- def bracketed?
66
- square_brackets? || percent_literal?
67
- end
68
- end
69
- end
70
- end
@@ -1,121 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RuboCop
4
- module AST
5
- # A node extension for `block` nodes. This will be used in place of a plain
6
- # node when the builder constructs the AST, making its methods available
7
- # to all `send` nodes within RuboCop.
8
- #
9
- # A `block` node is essentially a method send with a block. Parser nests
10
- # the `send` node inside the `block` node.
11
- class BlockNode < Node
12
- include MethodIdentifierPredicates
13
-
14
- VOID_CONTEXT_METHODS = %i[each tap].freeze
15
-
16
- # The `send` node associated with this block.
17
- #
18
- # @return [SendNode] the `send` node associated with the `block` node
19
- def send_node
20
- node_parts[0]
21
- end
22
-
23
- # The arguments of this block.
24
- #
25
- # @return [Array<Node>]
26
- def arguments
27
- if numblock_type?
28
- [] # Numbered parameters have no block arguments.
29
- else
30
- node_parts[1]
31
- end
32
- end
33
-
34
- # The body of this block.
35
- #
36
- # @return [Node, nil] the body of the `block` node or `nil`
37
- def body
38
- node_parts[2]
39
- end
40
-
41
- # The name of the dispatched method as a symbol.
42
- #
43
- # @return [Symbol] the name of the dispatched method
44
- def method_name
45
- send_node.method_name
46
- end
47
-
48
- # Checks whether this block takes any arguments.
49
- #
50
- # @return [Boolean] whether this `block` node takes any arguments
51
- def arguments?
52
- !arguments.empty?
53
- end
54
-
55
- # Checks whether the `block` literal is delimited by curly braces.
56
- #
57
- # @return [Boolean] whether the `block` literal is enclosed in braces
58
- def braces?
59
- loc.end&.is?('}')
60
- end
61
-
62
- # Checks whether the `block` literal is delimited by `do`-`end` keywords.
63
- #
64
- # @return [Boolean] whether the `block` literal is enclosed in `do`-`end`
65
- def keywords?
66
- loc.end&.is?('end')
67
- end
68
-
69
- # The delimiters for this `block` literal.
70
- #
71
- # @return [Array<String>] the delimiters for the `block` literal
72
- def delimiters
73
- [loc.begin.source, loc.end.source].freeze
74
- end
75
-
76
- # The opening delimiter for this `block` literal.
77
- #
78
- # @return [String] the opening delimiter for the `block` literal
79
- def opening_delimiter
80
- delimiters.first
81
- end
82
-
83
- # The closing delimiter for this `block` literal.
84
- #
85
- # @return [String] the closing delimiter for the `block` literal
86
- def closing_delimiter
87
- delimiters.last
88
- end
89
-
90
- # Checks whether this is a single line block. This is overridden here
91
- # because the general version in `Node` does not work for `block` nodes.
92
- #
93
- # @return [Boolean] whether the `block` literal is on a single line
94
- def single_line?
95
- loc.begin.line == loc.end.line
96
- end
97
-
98
- # Checks whether this is a multiline block. This is overridden here
99
- # because the general version in `Node` does not work for `block` nodes.
100
- #
101
- # @return [Boolean] whether the `block` literal is on a several lines
102
- def multiline?
103
- !single_line?
104
- end
105
-
106
- # Checks whether this `block` literal belongs to a lambda.
107
- #
108
- # @return [Boolean] whether the `block` literal belongs to a lambda
109
- def lambda?
110
- send_node.method?(:lambda)
111
- end
112
-
113
- # Checks whether this node body is a void context.
114
- #
115
- # @return [Boolean] whether the `block` node body is a void context
116
- def void_context?
117
- VOID_CONTEXT_METHODS.include?(method_name)
118
- end
119
- end
120
- end
121
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RuboCop
4
- module AST
5
- # A node extension for `break` nodes. This will be used in place of a
6
- # plain node when the builder constructs the AST, making its methods
7
- # available to all `break` nodes within RuboCop.
8
- class BreakNode < Node
9
- include MethodDispatchNode
10
- include ParameterizedNode
11
-
12
- def arguments
13
- []
14
- end
15
- end
16
- end
17
- end
@@ -1,56 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RuboCop
4
- module AST
5
- # A node extension for `case_match` nodes. This will be used in place of
6
- # a plain node when the builder constructs the AST, making its methods
7
- # available to all `case_match` nodes within RuboCop.
8
- class CaseMatchNode < Node
9
- include ConditionalNode
10
-
11
- # Returns the keyword of the `case` statement as a string.
12
- #
13
- # @return [String] the keyword of the `case` statement
14
- def keyword
15
- 'case'
16
- end
17
-
18
- # Calls the given block for each `in_pattern` node in the `in` statement.
19
- # If no block is given, an `Enumerator` is returned.
20
- #
21
- # @return [self] if a block is given
22
- # @return [Enumerator] if no block is given
23
- def each_in_pattern
24
- return in_pattern_branches.to_enum(__method__) unless block_given?
25
-
26
- in_pattern_branches.each do |condition|
27
- yield condition
28
- end
29
-
30
- self
31
- end
32
-
33
- # Returns an array of all the when branches in the `case` statement.
34
- #
35
- # @return [Array<Node>] an array of `in_pattern` nodes
36
- def in_pattern_branches
37
- node_parts[1...-1]
38
- end
39
-
40
- # Returns the else branch of the `case` statement, if any.
41
- #
42
- # @return [Node] the else branch node of the `case` statement
43
- # @return [nil] if the case statement does not have an else branch.
44
- def else_branch
45
- node_parts[-1]
46
- end
47
-
48
- # Checks whether this case statement has an `else` branch.
49
- #
50
- # @return [Boolean] whether the `case` statement has an `else` branch
51
- def else?
52
- !loc.else.nil?
53
- end
54
- end
55
- end
56
- end
@@ -1,56 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RuboCop
4
- module AST
5
- # A node extension for `case` nodes. This will be used in place of a plain
6
- # node when the builder constructs the AST, making its methods available
7
- # to all `case` nodes within RuboCop.
8
- class CaseNode < Node
9
- include ConditionalNode
10
-
11
- # Returns the keyword of the `case` statement as a string.
12
- #
13
- # @return [String] the keyword of the `case` statement
14
- def keyword
15
- 'case'
16
- end
17
-
18
- # Calls the given block for each `when` node in the `case` statement.
19
- # If no block is given, an `Enumerator` is returned.
20
- #
21
- # @return [self] if a block is given
22
- # @return [Enumerator] if no block is given
23
- def each_when
24
- return when_branches.to_enum(__method__) unless block_given?
25
-
26
- when_branches.each do |condition|
27
- yield condition
28
- end
29
-
30
- self
31
- end
32
-
33
- # Returns an array of all the when branches in the `case` statement.
34
- #
35
- # @return [Array<WhenNode>] an array of `when` nodes
36
- def when_branches
37
- node_parts[1...-1]
38
- end
39
-
40
- # Returns the else branch of the `case` statement, if any.
41
- #
42
- # @return [Node] the else branch node of the `case` statement
43
- # @return [nil] if the case statement does not have an else branch.
44
- def else_branch
45
- node_parts[-1]
46
- end
47
-
48
- # Checks whether this case statement has an `else` branch.
49
- #
50
- # @return [Boolean] whether the `case` statement has an `else` branch
51
- def else?
52
- loc.else
53
- end
54
- end
55
- end
56
- end
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RuboCop
4
- module AST
5
- # A node extension for `class` nodes. This will be used in place of a plain
6
- # node when the builder constructs the AST, making its methods available
7
- # to all `class` nodes within RuboCop.
8
- class ClassNode < Node
9
- # The identifer for this `class` node.
10
- #
11
- # @return [Node] the identifer of the class
12
- def identifier
13
- node_parts[0]
14
- end
15
-
16
- # The parent class for this `class` node.
17
- #
18
- # @return [Node, nil] the parent class of the class
19
- def parent_class
20
- node_parts[1]
21
- end
22
-
23
- # The body of this `class` node.
24
- #
25
- # @return [Node, nil] the body of the class
26
- def body
27
- node_parts[2]
28
- end
29
- end
30
- end
31
- end
@@ -1,82 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RuboCop
4
- module AST
5
- # A node extension for `def` nodes. This will be used in place of a plain
6
- # node when the builder constructs the AST, making its methods available
7
- # to all `def` nodes within RuboCop.
8
- class DefNode < Node
9
- include ParameterizedNode
10
- include MethodIdentifierPredicates
11
-
12
- # Checks whether this node body is a void context.
13
- #
14
- # @return [Boolean] whether the `def` node body is a void context
15
- def void_context?
16
- method?(:initialize) || assignment_method?
17
- end
18
-
19
- # Checks whether this method definition node forwards its arguments
20
- # as per the feature added in Ruby 2.7.
21
- #
22
- # @note This is written in a way that may support lead arguments
23
- # which are rumored to be added in a later version of Ruby.
24
- #
25
- # @return [Boolean] whether the `def` node uses argument forwarding
26
- def argument_forwarding?
27
- arguments.any?(&:forward_args_type?)
28
- end
29
-
30
- # The name of the defined method as a symbol.
31
- #
32
- # @return [Symbol] the name of the defined method
33
- def method_name
34
- node_parts[2]
35
- end
36
-
37
- # An array containing the arguments of the method definition.
38
- #
39
- # @return [Array<Node>] the arguments of the method definition
40
- def arguments
41
- node_parts[1]
42
- end
43
-
44
- # The body of the method definition.
45
- #
46
- # @note this can be either a `begin` node, if the method body contains
47
- # multiple expressions, or any other node, if it contains a single
48
- # expression.
49
- #
50
- # @return [Node] the body of the method definition
51
- def body
52
- node_parts[0]
53
- end
54
-
55
- # The receiver of the method definition, if any.
56
- #
57
- # @return [Node, nil] the receiver of the method definition, or `nil`.
58
- def receiver
59
- node_parts[3]
60
- end
61
-
62
- # Custom destructuring method. This can be used to normalize
63
- # destructuring for different variations of the node.
64
- #
65
- # In this case, the `def` node destructures into:
66
- #
67
- # `method_name, arguments, body`
68
- #
69
- # while the `defs` node destructures into:
70
- #
71
- # `receiver, method_name, arguments, body`
72
- #
73
- # so we reverse the destructured array to get the optional receiver
74
- # at the end, where it can be discarded.
75
- #
76
- # @return [Array] the different parts of the `def` or `defs` node
77
- def node_parts
78
- to_a.reverse
79
- end
80
- end
81
- end
82
- end