类 SyntaxSuggest::ScanHistory
从给定代码块向上/向下扫描
您可以尝试更改,将其存储或提交以供日后保存
示例
scanner = ScanHistory.new(code_lines: code_lines, block: block) scanner.scan( up: ->(_, _, _) { true }, down: ->(_, _, _) { true } ) scanner.changed? # => true expect(scanner.lines).to eq(code_lines) scanner.stash_changes expect(scanner.lines).to_not eq(code_lines)
属性
after_index[R]
before_index[R]
公共类方法
new(code_lines:, block:) 点击切换源代码
# File lib/syntax_suggest/scan_history.rb, line 24 def initialize(code_lines:, block:) @code_lines = code_lines @history = [block] refresh_index end
公共实例方法
changed?() 点击切换源代码
# File lib/syntax_suggest/scan_history.rb, line 56 def changed? @before_index != current.lines.first.index || @after_index != current.lines.last.index end
commit_if_changed() 点击切换源代码
# File lib/syntax_suggest/scan_history.rb, line 30 def commit_if_changed if changed? @history << CodeBlock.new(lines: @code_lines[before_index..after_index]) end self end
lines() 点击切换源代码
# File lib/syntax_suggest/scan_history.rb, line 110 def lines @code_lines[@before_index..@after_index] end
next_down() 点击切换源代码
# File lib/syntax_suggest/scan_history.rb, line 104 def next_down return nil if @after_index >= @code_lines.length @code_lines[@after_index + 1] end
next_up() 点击切换源代码
# File lib/syntax_suggest/scan_history.rb, line 98 def next_up return nil if @before_index <= 0 @code_lines[@before_index - 1] end
revert_last_commit() 点击切换源代码
丢弃未提交的更改并恢复上次提交
无法恢复第一次提交
# File lib/syntax_suggest/scan_history.rb, line 47 def revert_last_commit if @history.length > 1 @history.pop refresh_index end self end
scan(up:, down:) 点击切换源代码
向上和向下迭代
每次迭代返回行、kw_count、end_count
# File lib/syntax_suggest/scan_history.rb, line 64 def scan(up:, down:) kw_count = 0 end_count = 0 up_index = before_lines.reverse_each.take_while do |line| kw_count += 1 if line.is_kw? end_count += 1 if line.is_end? up.call(line, kw_count, end_count) end.last&.index kw_count = 0 end_count = 0 down_index = after_lines.each.take_while do |line| kw_count += 1 if line.is_kw? end_count += 1 if line.is_end? down.call(line, kw_count, end_count) end.last&.index @before_index = if up_index && up_index < @before_index up_index else @before_index end @after_index = if down_index && down_index > @after_index down_index else @after_index end self end
stash_changes() 点击切换源代码
丢弃任何未提交的更改
# File lib/syntax_suggest/scan_history.rb, line 39 def stash_changes refresh_index self end
私有实例方法
after_lines() 点击切换源代码
返回当前扫描块之后的所有 CodeLines 数组。
# File lib/syntax_suggest/scan_history.rb, line 120 def after_lines @code_lines[@after_index.next..] || [] end
before_lines() 点击切换源代码
# File lib/syntax_suggest/scan_history.rb, line 114 def before_lines @code_lines[0...@before_index] || [] end
current() 点击切换源代码
# File lib/syntax_suggest/scan_history.rb, line 124 def current @history.last end
refresh_index() 点击切换源代码
# File lib/syntax_suggest/scan_history.rb, line 128 def refresh_index @before_index = current.lines.first.index @after_index = current.lines.last.index self end