Skip to content

Commit 2965c6d

Browse files
committed
Use a proper queue
1 parent e13fae3 commit 2965c6d

File tree

1 file changed

+17
-4
lines changed

1 file changed

+17
-4
lines changed

lib/yard-sorbet/node_utils.rb

+17-4
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,25 @@ 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
23+
queue.push(node)
2324
until queue.empty?
24-
n = T.must(queue.shift)
25+
n = queue.shift(true)
2526
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))
27+
enque_children(queue, n)
28+
end
29+
end
30+
31+
# Enqueue the eligible children of a node in the BFS queue
32+
sig { params(queue: Queue, node: YARD::Parser::Ruby::AstNode).void }
33+
def self.enque_children(queue, node)
34+
num_children = node.children.size
35+
node.children.each_with_index do |child, i|
36+
next if i == num_children - 1 &&
37+
node.is_a?(YARD::Parser::Ruby::MethodCallNode) &&
38+
SKIP_METHOD_CONTENTS.include?(node.method_name(true))
39+
40+
queue.push(child)
2841
end
2942
end
3043

0 commit comments

Comments
 (0)