Skip to content

Commit 6616bf4

Browse files
committed
Use a proper queue
1 parent e13fae3 commit 6616bf4

File tree

1 file changed

+18
-4
lines changed

1 file changed

+18
-4
lines changed

lib/yard-sorbet/node_utils.rb

+18-4
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,29 @@ 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)
2828
end
2929
end
3030

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)
40+
end
41+
end
42+
43+
# Delete a node from its parent
44+
3145
sig { params(node: YARD::Parser::Ruby::AstNode).void }
3246
def self.delete_node(node) = node.parent.children.delete(node)
3347

0 commit comments

Comments
 (0)