Class: Rigor::LanguageServer::BufferTable
- Inherits:
-
Object
- Object
- Rigor::LanguageServer::BufferTable
- Defined in:
- lib/rigor/language_server/buffer_table.rb
Overview
Per-session virtual file table. The LSP server maintains the canonical view of every open buffer here; analysis (slice 4+) reads from this table instead of disk so in-flight edits are reflected immediately.
Keyed by DocumentUri (LSP file://... URIs). v1 ships FULL text sync (LSP
TextDocumentSyncKind::Full = 1) so each didChange carries the entire buffer text — there's no
incremental edit application yet. Incremental sync is slice 10 (deferred per the design doc).
Defined Under Namespace
Classes: Entry
Instance Method Summary collapse
- #[](uri) ⇒ Object
-
#change(uri:, bytes:, version:) ⇒ Object
Records a
textDocument/didChangeevent under FULL sync. -
#close(uri:) ⇒ Object
Records a
textDocument/didCloseevent. -
#initialize ⇒ BufferTable
constructor
A new instance of BufferTable.
-
#open(uri:, bytes:, version:) ⇒ Object
Records a
textDocument/didOpenevent. - #open?(uri) ⇒ Boolean
- #size ⇒ Object
- #uris ⇒ Object
Constructor Details
#initialize ⇒ BufferTable
Returns a new instance of BufferTable.
17 18 19 |
# File 'lib/rigor/language_server/buffer_table.rb', line 17 def initialize @entries = {} end |
Instance Method Details
#[](uri) ⇒ Object
39 40 41 |
# File 'lib/rigor/language_server/buffer_table.rb', line 39 def [](uri) @entries[uri] end |
#change(uri:, bytes:, version:) ⇒ Object
Records a textDocument/didChange event under FULL sync. The full new buffer text replaces the entry.
If the client sends a didChange for a URI that was never opened (spec violation), the entry is still
created — defensive.
30 31 32 |
# File 'lib/rigor/language_server/buffer_table.rb', line 30 def change(uri:, bytes:, version:) @entries[uri] = Entry.new(uri: uri, bytes: bytes, version: version) end |
#close(uri:) ⇒ Object
Records a textDocument/didClose event. The entry is removed. Subsequent reads via #[] return nil.
35 36 37 |
# File 'lib/rigor/language_server/buffer_table.rb', line 35 def close(uri:) @entries.delete(uri) end |
#open(uri:, bytes:, version:) ⇒ Object
Records a textDocument/didOpen event. Replaces any existing entry (LSP clients may re-open a
previously closed URI; the new version is authoritative).
23 24 25 |
# File 'lib/rigor/language_server/buffer_table.rb', line 23 def open(uri:, bytes:, version:) @entries[uri] = Entry.new(uri: uri, bytes: bytes, version: version) end |
#open?(uri) ⇒ Boolean
43 44 45 |
# File 'lib/rigor/language_server/buffer_table.rb', line 43 def open?(uri) @entries.key?(uri) end |
#size ⇒ Object
47 48 49 |
# File 'lib/rigor/language_server/buffer_table.rb', line 47 def size @entries.size end |
#uris ⇒ Object
51 52 53 |
# File 'lib/rigor/language_server/buffer_table.rb', line 51 def uris @entries.keys end |