diff options
author | schneems <richard.schneeman+foo@gmail.com> | 2022-07-26 15:21:09 -0500 |
---|---|---|
committer | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2022-08-19 10:02:24 +0900 |
commit | 490af8dbdb66263f29d0b4e43752fbb298b94862 (patch) | |
tree | 5f161e99d27a1417f446e8b1516263fd76d6f0bc /lib/syntax_suggest/unvisited_lines.rb | |
parent | a50df1ab0eb312e5cdcf010d2c1b362ec41f3c59 (diff) | |
download | ruby-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.rb | 36 |
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 |