Class: Ibex::Runtime::CST::IncrementalParseSession
- Inherits:
-
Object
- Object
- Ibex::Runtime::CST::IncrementalParseSession
- Defined in:
- lib/ibex/runtime/cst/incremental/session.rb
Overview
A mutable, single-owner session around immutable source and syntax results.
Instance Attribute Summary collapse
-
#last_blender ⇒ Object
readonly
: Blender?.
-
#last_relex_result ⇒ Object
readonly
: RelexResult?.
-
#parse_memo ⇒ Object
readonly
: ParseMemo.
-
#result ⇒ Object
readonly
: SyntaxResult.
-
#source_text ⇒ Object
readonly
: SourceText.
-
#token_memo ⇒ Object
readonly
: TokenMemo.
Instance Method Summary collapse
-
#edit(edits) ⇒ Object
Apply edits expressed against the current source and return syntax only.
-
#initialize(parser_class, source_text, resource_limits: nil, blender: true, event_observer: nil) ⇒ IncrementalParseSession
constructor
A new instance of IncrementalParseSession.
-
#last_full_fallback? ⇒ Boolean
Whether the last completed edit discarded all incremental reuse and reparsed the current source from a fresh token stream.
-
#observe(&observer) ⇒ Object
Observe parser and incremental runtime events.
- #unobserve(subscription) ⇒ Object
Constructor Details
#initialize(parser_class, source_text, resource_limits: nil, blender: true, event_observer: nil) ⇒ IncrementalParseSession
Returns a new instance of IncrementalParseSession.
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/ibex/runtime/cst/incremental/session.rb', line 27 def initialize(parser_class, source_text, resource_limits: nil, blender: true, event_observer: nil) unless source_text.is_a?(SourceText) raise ArgumentError, "incremental_session requires an Ibex::Runtime::CST::SourceText" end @resource_limits = resource_limits || ResourceLimits.new #: ResourceLimits @parser = parser_class.__send__(:new, resource_limits: @resource_limits) #: Parser validate_parser! @parser.observe { |event| event_observer.call(event, @parser) } if event_observer @cache = NodeCache.new #: NodeCache @source_text = source_text @last_relex_result = nil #: RelexResult? @last_blender = nil #: Blender? @last_full_fallback = false #: bool @blender_enabled = blender @mutex = Mutex.new @result, @token_memo, @parse_memo = parse_current(0.0) enforce_memo_budget! end |
Instance Attribute Details
#last_blender ⇒ Object (readonly)
: Blender?
17 18 19 |
# File 'lib/ibex/runtime/cst/incremental/session.rb', line 17 def last_blender @last_blender end |
#last_relex_result ⇒ Object (readonly)
: RelexResult?
16 17 18 |
# File 'lib/ibex/runtime/cst/incremental/session.rb', line 16 def last_relex_result @last_relex_result end |
#parse_memo ⇒ Object (readonly)
: ParseMemo
15 16 17 |
# File 'lib/ibex/runtime/cst/incremental/session.rb', line 15 def parse_memo @parse_memo end |
#result ⇒ Object (readonly)
: SyntaxResult
13 14 15 |
# File 'lib/ibex/runtime/cst/incremental/session.rb', line 13 def result @result end |
#source_text ⇒ Object (readonly)
: SourceText
12 13 14 |
# File 'lib/ibex/runtime/cst/incremental/session.rb', line 12 def source_text @source_text end |
#token_memo ⇒ Object (readonly)
: TokenMemo
14 15 16 |
# File 'lib/ibex/runtime/cst/incremental/session.rb', line 14 def token_memo @token_memo end |
Instance Method Details
#edit(edits) ⇒ Object
Apply edits expressed against the current source and return syntax only.
49 50 51 |
# File 'lib/ibex/runtime/cst/incremental/session.rb', line 49 def edit(edits) @mutex.synchronize { edit_locked(TextEdit.normalize(edits)) } end |
#last_full_fallback? ⇒ Boolean
Whether the last completed edit discarded all incremental reuse and reparsed the current source from a fresh token stream.
67 |
# File 'lib/ibex/runtime/cst/incremental/session.rb', line 67 def last_full_fallback? = @last_full_fallback |
#observe(&observer) ⇒ Object
Observe parser and incremental runtime events.
55 56 57 |
# File 'lib/ibex/runtime/cst/incremental/session.rb', line 55 def observe(&observer) @parser.observe(&observer) end |
#unobserve(subscription) ⇒ Object
60 61 62 |
# File 'lib/ibex/runtime/cst/incremental/session.rb', line 60 def unobserve(subscription) @parser.unobserve(subscription) end |