Class: SyntaxSuggest::ScanHistory
- Inherits:
-
Object
- Object
- SyntaxSuggest::ScanHistory
- Defined in:
- lib/syntax_suggest/scan_history.rb
Overview
Scans up/down from the given block
You can try out a change, stash it, or commit it to save for later
Example:
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)
Instance Attribute Summary collapse
-
#after_index ⇒ Object
readonly
Returns the value of attribute after_index.
-
#before_index ⇒ Object
readonly
Returns the value of attribute before_index.
Instance Method Summary collapse
- #changed? ⇒ Boolean
- #commit_if_changed ⇒ Object
-
#initialize(code_lines:, block:) ⇒ ScanHistory
constructor
A new instance of ScanHistory.
- #lines ⇒ Object
- #next_down ⇒ Object
- #next_up ⇒ Object
-
#revert_last_commit ⇒ Object
Discard changes that have not been committed and revert the last commit.
-
#scan(up:, down:) ⇒ Object
Iterates up and down.
-
#stash_changes ⇒ Object
Discards any changes that have not been committed.
Constructor Details
#initialize(code_lines:, block:) ⇒ ScanHistory
Returns a new instance of ScanHistory.
24 25 26 27 28 |
# File 'lib/syntax_suggest/scan_history.rb', line 24 def initialize(code_lines:, block:) @code_lines = code_lines @history = [block] refresh_index end |
Instance Attribute Details
#after_index ⇒ Object (readonly)
Returns the value of attribute after_index.
22 23 24 |
# File 'lib/syntax_suggest/scan_history.rb', line 22 def after_index @after_index end |
#before_index ⇒ Object (readonly)
Returns the value of attribute before_index.
22 23 24 |
# File 'lib/syntax_suggest/scan_history.rb', line 22 def before_index @before_index end |
Instance Method Details
#changed? ⇒ Boolean
56 57 58 59 |
# 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 ⇒ Object
30 31 32 33 34 35 36 |
# 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 ⇒ Object
110 111 112 |
# File 'lib/syntax_suggest/scan_history.rb', line 110 def lines @code_lines[@before_index..@after_index] end |
#next_down ⇒ Object
104 105 106 107 108 |
# 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 ⇒ Object
98 99 100 101 102 |
# 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 ⇒ Object
Discard changes that have not been committed and revert the last commit
Cannot revert the first commit
47 48 49 50 51 52 53 54 |
# 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:) ⇒ Object
Iterates up and down
Returns line, kw_count, end_count for each iteration
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# 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 ⇒ Object
Discards any changes that have not been committed
39 40 41 42 |
# File 'lib/syntax_suggest/scan_history.rb', line 39 def stash_changes refresh_index self end |