Class: Rigor::LanguageServer::BufferTable

Inherits:
Object
  • Object
show all
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

Constructor Details

#initializeBufferTable

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

Returns:

  • (Boolean)


43
44
45
# File 'lib/rigor/language_server/buffer_table.rb', line 43

def open?(uri)
  @entries.key?(uri)
end

#sizeObject



47
48
49
# File 'lib/rigor/language_server/buffer_table.rb', line 47

def size
  @entries.size
end

#urisObject



51
52
53
# File 'lib/rigor/language_server/buffer_table.rb', line 51

def uris
  @entries.keys
end