Skip to content

Commit f12d49d

Browse files
committed
Use a proper queue
1 parent e13fae3 commit f12d49d

File tree

1 file changed

+16
-4
lines changed

1 file changed

+16
-4
lines changed

lib/yard-sorbet/node_utils.rb

+16-4
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,24 @@ module NodeUtils
1919
# @yield [YARD::Parser::Ruby::AstNode]
2020
sig { params(node: YARD::Parser::Ruby::AstNode, _blk: T.proc.params(n: YARD::Parser::Ruby::AstNode).void).void }
2121
def self.bfs_traverse(node, &_blk)
22-
queue = [node]
22+
queue = Queue.new([node])
2323
until queue.empty?
24-
n = T.must(queue.shift)
24+
n = queue.shift(true)
2525
yield n
26-
n.children.each { queue.push(_1) }
27-
queue.pop if n.is_a?(YARD::Parser::Ruby::MethodCallNode) && SKIP_METHOD_CONTENTS.include?(n.method_name(true))
26+
enque_children(queue, n)
27+
end
28+
end
29+
30+
# Enqueue the eligible children of a node in the BFS queue
31+
sig { params(queue: Queue, node: YARD::Parser::Ruby::AstNode).void }
32+
def self.enque_children(queue, node)
33+
num_children = node.children.size
34+
node.children.each_with_index do |child, i|
35+
next if i == num_children - 1 &&
36+
node.is_a?(YARD::Parser::Ruby::MethodCallNode) &&
37+
SKIP_METHOD_CONTENTS.include?(node.method_name(true))
38+
39+
queue.push(child)
2840
end
2941
end
3042

0 commit comments

Comments
 (0)