pub struct LspRenderState {
pub document_highlights: Arc<ArcSwapOption<DocumentHighlightCache>>,
pub inlay_hints: PerBufferCache<LspInlayHintCache>,
pub folds: PerBufferCache<LspFoldsCache>,
pub semantic_tokens: PerBufferCache<LspSemanticTokensCache>,
pub code_lens: PerBufferCache<LspCodeLensCache>,
pub document_links: PerBufferCache<LspDocumentLinksCache>,
pub document_color: PerBufferCache<LspDocumentColorCache>,
pub pull_diagnostics: PerBufferCache<LspPullDiagnosticsCache>,
pub supervisor: LspSupervisorHandle,
}Expand description
LSP feature data the renderer reads beyond diagnostics.
Slice 3a stubbed this empty. Slice 3b.0 wires the first
drained subsystem: document_highlights. Subsequent 3b
sub-slices add the remaining LSP caches one at a time
(hovers, signature help, inlay hints, semantic tokens, code
actions, document links, code lenses) following the same
Arc<ArcSwapOption<...>> shape – the spawned request task
writes directly, the renderer reads wait-free.
Fields§
§document_highlights: Arc<ArcSwapOption<DocumentHighlightCache>>textDocument/documentHighlight cache for the active
buffer + symbol position. Cloned Arc shared with
Editor.lsp_document_highlights so the spawned request
task’s .store() is observable by readers without any
republication of RenderState itself.
Renderers read via
rs.lsp.document_highlights.load() and self-validate
cache.buffer_id == active_buffer_id to ignore results
that raced a buffer switch.
inlay_hints: PerBufferCache<LspInlayHintCache>Slice 3b.1: per-buffer textDocument/inlayHint cache.
Spawned request task writes via
PerBufferCacheExt::insert_for; renderers read wait-free
via .get_for(buffer_id) and get a detached
Arc<LspInlayHintCache>.
folds: PerBufferCache<LspFoldsCache>Slice 3b.1: per-buffer textDocument/foldingRange cache.
Same shape as inlay_hints; renderers read via
.get_for(buffer_id).
semantic_tokens: PerBufferCache<LspSemanticTokensCache>Slice 3b.2: per-buffer textDocument/semanticTokens/*
cache. Spawned request task handles Items / Delta-applied /
Empty outcomes by writing directly via insert_for (or
remove_for on Delta result_id mismatch). Renderers read
via .get_for(buffer_id).
code_lens: PerBufferCache<LspCodeLensCache>Slice 3b.3: per-buffer textDocument/codeLens cache.
Spawned request task writes via insert_for; the
codeLens/refresh drain evicts per-server entries via
PerBufferCacheExt::retain. Renderers read via
.get_for(buffer_id).
document_links: PerBufferCache<LspDocumentLinksCache>Slice 3b.4: per-buffer textDocument/documentLink cache.
document_color: PerBufferCache<LspDocumentColorCache>Slice 3b.4: per-buffer textDocument/documentColor cache.
pull_diagnostics: PerBufferCache<LspPullDiagnosticsCache>Slice 3b.5: per-buffer textDocument/diagnostic (pull)
result_id cache. The actual diagnostics live in
diagnostics.layer (DiagnosticsLayer); this slot tracks
only the (version, result_id) pair the next pump uses for
the previousResultId short-circuit.
supervisor: LspSupervisorHandleSlice 3c.final.B (group 4): LSP supervisor handle clone.
The handle is internally Arc<ArcSwap<SupervisorSnapshot>>-
backed so Clone is one Arc bump and servers_for(uri)
stays wait-free. Renderers query
rs.lsp.supervisor.servers_for(&uri) for the modeline’s
[lsp:rust] indicator instead of app.editor.lsp.servers_for(...).
Trait Implementations§
Source§impl Clone for LspRenderState
impl Clone for LspRenderState
Source§fn clone(&self) -> LspRenderState
fn clone(&self) -> LspRenderState
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for LspRenderState
impl Debug for LspRenderState
Source§impl Default for LspRenderState
impl Default for LspRenderState
Source§fn default() -> LspRenderState
fn default() -> LspRenderState
Auto Trait Implementations§
impl !RefUnwindSafe for LspRenderState
impl !UnwindSafe for LspRenderState
impl Freeze for LspRenderState
impl Send for LspRenderState
impl Sync for LspRenderState
impl Unpin for LspRenderState
impl UnsafeUnpin for LspRenderState
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more