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) ⇒ IncrementalParseSession
constructor
A new instance of IncrementalParseSession.
-
#observe(&observer) ⇒ Object
Observe parser and incremental runtime events.
- #unobserve(subscription) ⇒ Object
Constructor Details
#initialize(parser_class, source_text, resource_limits: nil, blender: true) ⇒ IncrementalParseSession
Returns a new instance of IncrementalParseSession.
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/ibex/runtime/cst/incremental/session.rb', line 26 def initialize(parser_class, source_text, resource_limits: nil, blender: true) 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! @cache = NodeCache.new #: NodeCache @source_text = source_text @last_relex_result = nil #: RelexResult? @last_blender = nil #: Blender? @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.
46 47 48 |
# File 'lib/ibex/runtime/cst/incremental/session.rb', line 46 def edit(edits) @mutex.synchronize { edit_locked(TextEdit.normalize(edits)) } end |
#observe(&observer) ⇒ Object
Observe parser and incremental runtime events.
52 53 54 |
# File 'lib/ibex/runtime/cst/incremental/session.rb', line 52 def observe(&observer) @parser.observe(&observer) end |
#unobserve(subscription) ⇒ Object
57 58 59 |
# File 'lib/ibex/runtime/cst/incremental/session.rb', line 57 def unobserve(subscription) @parser.unobserve(subscription) end |