summaryrefslogtreecommitdiff
path: root/lib/syntax_suggest/unvisited_lines.rb
diff options
context:
space:
mode:
authorschneems <richard.schneeman+foo@gmail.com>2022-07-26 15:21:09 -0500
committerHiroshi SHIBATA <hsbt@ruby-lang.org>2022-08-19 10:02:24 +0900
commit490af8dbdb66263f29d0b4e43752fbb298b94862 (patch)
tree5f161e99d27a1417f446e8b1516263fd76d6f0bc /lib/syntax_suggest/unvisited_lines.rb
parenta50df1ab0eb312e5cdcf010d2c1b362ec41f3c59 (diff)
downloadruby-490af8dbdb66263f29d0b4e43752fbb298b94862.tar.gz
Sync SyntaxSuggest
``` $ tool/sync_default_gems.rb syntax_suggest ```
Diffstat (limited to 'lib/syntax_suggest/unvisited_lines.rb')
-rw-r--r--lib/syntax_suggest/unvisited_lines.rb36
1 files changed, 36 insertions, 0 deletions
diff --git a/lib/syntax_suggest/unvisited_lines.rb b/lib/syntax_suggest/unvisited_lines.rb
new file mode 100644
index 0000000000..32808db634
--- /dev/null
+++ b/lib/syntax_suggest/unvisited_lines.rb
@@ -0,0 +1,36 @@
+# frozen_string_literal: true
+
+module SyntaxSuggest
+ # Tracks which lines various code blocks have expanded to
+ # and which are still unexplored
+ class UnvisitedLines
+ def initialize(code_lines:)
+ @unvisited = code_lines.sort_by(&:indent_index)
+ @visited_lines = {}
+ @visited_lines.compare_by_identity
+ end
+
+ def empty?
+ @unvisited.empty?
+ end
+
+ def peek
+ @unvisited.last
+ end
+
+ def pop
+ @unvisited.pop
+ end
+
+ def visit_block(block)
+ block.lines.each do |line|
+ next if @visited_lines[line]
+ @visited_lines[line] = true
+ end
+
+ while @visited_lines[@unvisited.last]
+ @unvisited.pop
+ end
+ end
+ end
+end