rubocop-ast 1.44.1 → 1.47.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9310771bd0730e0408e6db665c1f0db5d52ae370aa7eb761ac3942777f4d6cee
4
- data.tar.gz: ccd0f8b884bc0f3d8404e46db57cabd956ac8e808873ead64c4ba38a2d2387fe
3
+ metadata.gz: 1bffbd470297f3e2a3ef1db00d3259258c7ced492c848913d5df487c7283b395
4
+ data.tar.gz: 39db744fd59f6a5f326ffa22516194f2b2c0666ebf3d8fc9211caed06aeacfd6
5
5
  SHA512:
6
- metadata.gz: 74c053c8bcba554f9816b44b58f1d8b531c643d615961c9ffb56e79177d59a596477565b13d6317de7e7132dd7c70d9428ae8381a1757c9836073515edad8740
7
- data.tar.gz: cd6d7101a68f5ccb8657acf28d094c07a44bbd6312b8a381e16f34f8a4211929a00c26d6f5adced13ef7da085d704ffd8d303d7ae0ade38d41de0792aa5c6898
6
+ metadata.gz: 693ddec9b2ab60ded1ab59f4a344d92dab3d72d9c14fdf7ea6222bc1ae5ce58066ed504946095d6b770d3bfb0bdd4cbb0212f51889f2713b347097887b13b63d
7
+ data.tar.gz: c19c8995d2de5c654ae169ac036d501042b808a487aa767ff93bdd3e4f2b5b452e79e80c7f57be92e9957e47a39149fcae5c932feb1dc1e001b1a6a2fce96836
data/README.md CHANGED
@@ -2,8 +2,6 @@
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/rubocop-ast.svg)](https://badge.fury.io/rb/rubocop-ast)
4
4
  [![CI](https://github.com/rubocop/rubocop-ast/actions/workflows/rubocop.yml/badge.svg)](https://github.com/rubocop/rubocop-ast/actions/workflows/rubocop.yml)
5
- [![Test Coverage](https://api.codeclimate.com/v1/badges/a29666e6373bc41bc0a9/test_coverage)](https://codeclimate.com/github/rubocop/rubocop-ast/test_coverage)
6
- [![Maintainability](https://api.codeclimate.com/v1/badges/a29666e6373bc41bc0a9/maintainability)](https://codeclimate.com/github/rubocop/rubocop-ast/maintainability)
7
5
 
8
6
  Contains the classes needed by [RuboCop](https://github.com/rubocop/rubocop) to deal with Ruby's AST, in particular:
9
7
 
@@ -38,6 +38,7 @@ module RuboCop
38
38
  casgn: CasgnNode,
39
39
  case: CaseNode,
40
40
  class: ClassNode,
41
+ complex: ComplexNode,
41
42
  const: ConstNode,
42
43
  def: DefNode,
43
44
  defined?: DefinedNode,
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module AST
5
+ # A node extension for `complex` nodes. This will be used in place of a plain
6
+ # node when the builder constructs the AST, making its methods available to
7
+ # all `complex` nodes within RuboCop.
8
+ class ComplexNode < Node
9
+ include BasicLiteralNode
10
+ include NumericNode
11
+ end
12
+ end
13
+ end
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module AST
5
5
  # Common functionality for primitive literal nodes: `sym`, `str`,
6
- # `int`, `float`, `rational`...
6
+ # `int`, `float`, `rational`, `complex`...
7
7
  module BasicLiteralNode
8
8
  # Returns the value of the literal.
9
9
  #
@@ -2,7 +2,7 @@
2
2
 
3
3
  module RuboCop
4
4
  module AST
5
- # Common functionality for primitive numeric nodes: `int`, `float`, `rational`...
5
+ # Common functionality for primitive numeric nodes: `int`, `float`, `rational`, `complex`...
6
6
  module NumericNode
7
7
  SIGN_REGEX = /\A[+-]/.freeze
8
8
  private_constant :SIGN_REGEX
@@ -15,7 +15,7 @@ module RuboCop
15
15
  #
16
16
  # @return [Boolean] whether this literal has a sign.
17
17
  def sign?
18
- source.match(SIGN_REGEX)
18
+ source.match?(SIGN_REGEX)
19
19
  end
20
20
  end
21
21
  end
@@ -65,6 +65,7 @@ module RuboCop
65
65
  # arguments
66
66
  module WrappedArguments
67
67
  include ParameterizedNode
68
+
68
69
  # @return [Array] The arguments of the node.
69
70
  def arguments
70
71
  first = children.first
@@ -108,6 +108,13 @@ module RuboCop
108
108
  rational: :numeric,
109
109
  complex: :numeric,
110
110
 
111
+ str: :any_str,
112
+ dstr: :any_str,
113
+ xstr: :any_str,
114
+
115
+ sym: :any_sym,
116
+ dsym: :any_sym,
117
+
111
118
  irange: :range,
112
119
  erange: :range,
113
120
 
@@ -116,7 +123,10 @@ module RuboCop
116
123
 
117
124
  block: :any_block,
118
125
  numblock: :any_block,
119
- itblock: :any_block
126
+ itblock: :any_block,
127
+
128
+ match_pattern: :any_match_pattern,
129
+ match_pattern_p: :any_match_pattern
120
130
  }.freeze
121
131
  private_constant :GROUP_FOR_TYPE
122
132
 
@@ -269,7 +279,7 @@ module RuboCop
269
279
  def right_siblings
270
280
  return [].freeze unless parent
271
281
 
272
- parent.children[sibling_index + 1..].freeze
282
+ parent.children[(sibling_index + 1)..].freeze
273
283
  end
274
284
 
275
285
  # Common destructuring method. This can be used to normalize
@@ -540,6 +550,18 @@ module RuboCop
540
550
  GROUP_FOR_TYPE[type] == :any_block
541
551
  end
542
552
 
553
+ def any_match_pattern_type?
554
+ GROUP_FOR_TYPE[type] == :any_match_pattern
555
+ end
556
+
557
+ def any_str_type?
558
+ GROUP_FOR_TYPE[type] == :any_str
559
+ end
560
+
561
+ def any_sym_type?
562
+ GROUP_FOR_TYPE[type] == :any_sym
563
+ end
564
+
543
565
  def guard_clause?
544
566
  node = operator_keyword? ? rhs : self
545
567
 
@@ -15,10 +15,12 @@ module RuboCop
15
15
  @visit = {}
16
16
  end
17
17
 
18
+ # rubocop:disable Naming/PredicateMethod
18
19
  def enter(node_id)
19
20
  @visit[node_id] = false
20
21
  true
21
22
  end
23
+ # rubocop:enable Naming/PredicateMethod
22
24
 
23
25
  def success(node_id)
24
26
  @visit[node_id] = true
@@ -261,7 +261,7 @@ module RuboCop
261
261
  arities = children
262
262
  .reverse
263
263
  .map(&:arity_range)
264
- .map { |r| last = last.begin + r.begin..last.max + r.max }
264
+ .map { |r| last = (last.begin + r.begin)..(last.max + r.max) }
265
265
  .reverse!
266
266
  arities.push last_arity
267
267
  end
@@ -10,6 +10,7 @@ module RuboCop
10
10
  # /docs/modules/ROOT/pages/node_pattern.adoc
11
11
  class Compiler
12
12
  extend SimpleForwardable
13
+
13
14
  attr_reader :captures, :named_parameters, :positional_parameters, :binding
14
15
 
15
16
  def initialize
@@ -21,7 +21,7 @@ macros
21
21
  rules
22
22
  /\s+/
23
23
  /:(#{SYMBOL_NAME})/o { emit :tSYMBOL, &:to_sym }
24
- /"(.+?)"/ { emit :tSTRING }
24
+ /"(.*?)"/ { emit :tSTRING }
25
25
  /[-+]?\d+\.\d+/ { emit :tNUMBER, &:to_f }
26
26
  /[-+]?\d+/ { emit :tNUMBER, &:to_i }
27
27
  /#{Regexp.union(
@@ -122,7 +122,7 @@ class RuboCop::AST::NodePattern::LexerRex
122
122
  # do nothing
123
123
  when ss.skip(/:(#{SYMBOL_NAME})/o) then
124
124
  action { emit :tSYMBOL, &:to_sym }
125
- when ss.skip(/"(.+?)"/) then
125
+ when ss.skip(/"(.*?)"/) then
126
126
  action { emit :tSTRING }
127
127
  when ss.skip(/[-+]?\d+\.\d+/) then
128
128
  action { emit :tNUMBER, &:to_f }
@@ -179,7 +179,7 @@ module RuboCop
179
179
  class AnyOrder < Node
180
180
  include ForbidInSeqHead
181
181
 
182
- ARITIES = Hash.new { |h, k| h[k] = k - 1..Float::INFINITY }
182
+ ARITIES = Hash.new { |h, k| h[k] = (k - 1)..Float::INFINITY }
183
183
  private_constant :ARITIES
184
184
 
185
185
  def term_nodes
@@ -50,6 +50,7 @@ module RuboCop
50
50
 
51
51
  extend SimpleForwardable
52
52
  include MethodDefiner
53
+
53
54
  Invalid = Class.new(StandardError)
54
55
 
55
56
  VAR = 'node'
@@ -256,7 +256,8 @@ module RuboCop
256
256
  [ast, comments, tokens]
257
257
  end
258
258
 
259
- def parser_class(ruby_version, parser_engine) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
259
+ # rubocop:disable Lint/FloatComparison, Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
260
+ def parser_class(ruby_version, parser_engine)
260
261
  case parser_engine
261
262
  when :parser_whitequark
262
263
  case ruby_version
@@ -323,6 +324,7 @@ module RuboCop
323
324
  end
324
325
  end
325
326
  end
327
+ # rubocop:enable Lint/FloatComparison, Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
326
328
 
327
329
  def builder_class(parser_engine)
328
330
  case parser_engine
@@ -339,7 +341,7 @@ module RuboCop
339
341
 
340
342
  parser_class = parser_class(ruby_version, parser_engine)
341
343
 
342
- parser_instance = if prism_result
344
+ parser_instance = if parser_engine == :parser_prism && prism_result
343
345
  # NOTE: Since it is intended for use with Ruby LSP, it targets only Prism.
344
346
  # If there is no reuse of a pre-parsed result, such as in Ruby LSP,
345
347
  # regular parsing with Prism occurs, and `else` branch will be executed.
@@ -79,6 +79,7 @@ module RuboCop
79
79
  end
80
80
  private_constant :CallbackCompiler
81
81
  extend CallbackCompiler
82
+
82
83
  send_code = CallbackCompiler::SEND
83
84
 
84
85
  ### children count == 0
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module AST
5
5
  module Version
6
- STRING = '1.44.1'
6
+ STRING = '1.47.1'
7
7
  end
8
8
  end
9
9
  end
data/lib/rubocop/ast.rb CHANGED
@@ -48,6 +48,7 @@ require_relative 'ast/node/case_match_node'
48
48
  require_relative 'ast/node/case_node'
49
49
  require_relative 'ast/node/casgn_node'
50
50
  require_relative 'ast/node/class_node'
51
+ require_relative 'ast/node/complex_node'
51
52
  require_relative 'ast/node/const_node'
52
53
  require_relative 'ast/node/def_node'
53
54
  require_relative 'ast/node/defined_node'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop-ast
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.44.1
4
+ version: 1.47.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bozhidar Batsov
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2025-04-11 00:00:00.000000000 Z
13
+ date: 2025-09-22 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: parser
@@ -69,6 +69,7 @@ files:
69
69
  - lib/rubocop/ast/node/case_node.rb
70
70
  - lib/rubocop/ast/node/casgn_node.rb
71
71
  - lib/rubocop/ast/node/class_node.rb
72
+ - lib/rubocop/ast/node/complex_node.rb
72
73
  - lib/rubocop/ast/node/const_node.rb
73
74
  - lib/rubocop/ast/node/csend_node.rb
74
75
  - lib/rubocop/ast/node/def_node.rb