pub struct TeardownRegistries<'a> {Show 15 fields
pub commands: &'a mut CommandRegistry,
pub pickers: &'a mut PickerRegistry,
pub provider_views: Option<&'a ProviderViewRegistry>,
pub modes: &'a mut ModeRegistry,
pub keymap: &'a KeymapHandle,
pub config: &'a ConfigRegistry,
pub bus: &'a EventBus,
pub decorations: &'a mut GutterDecorationSourceRegistry,
pub media: &'a mut MediaSourceRegistry,
pub agenda: &'a mut ScannedExcerptSourceRegistry,
pub contexts: &'a mut ContextSourceRegistry,
pub theme: &'a dyn ThemeRegistry,
pub signs: Option<&'a SignRegistryHandle>,
pub modeline: Option<&'a ModelineServiceHandle>,
pub parsers: &'a CompilationParserFactoriesHandle,
}Expand description
The host-owned registries a plugin’s contributions live in — the set
PluginTeardown::unload reverses against. Grouped as a borrow struct so
unload takes one argument instead of six, and so the caller passes exactly
the registries a &mut Editor context already holds. All are required: a
plugin can contribute to any surface, and passing the whole set is cheaper
than threading option-ness through the driver (an unexercised surface’s
reversal is already a no-op).
Fields§
§commands: &'a mut CommandRegistry§pickers: &'a mut PickerRegistry§provider_views: Option<&'a ProviderViewRegistry>MV.1: where a plugin’s declared multibuffer views registered their
openers. Option because a headless boot may not publish the seam,
and a teardown must not require a service the load never used.
modes: &'a mut ModeRegistry§keymap: &'a KeymapHandle§config: &'a ConfigRegistry§bus: &'a EventBus§decorations: &'a mut GutterDecorationSourceRegistryPL8.E: the decoration-producer registry (unregister by producer id).
media: &'a mut MediaSourceRegistryIM.6b: the media-producer registry, for the same reversal.
agenda: &'a mut ScannedExcerptSourceRegistryOM.A1: the agenda-producer registry, for the same reversal.
contexts: &'a mut ContextSourceRegistryTC.2: the context-producer registry (unregister by producer id).
theme: &'a dyn ThemeRegistryTC.4: the theme registry (unregister_element by namespaced name).
signs: Option<&'a SignRegistryHandle>SG.3a: the sign registry (undefine by namespaced name).
Option, like modeline and for the same reason: the loader gates the
whole reversal on one all-or-nothing tuple of handles, so making this
required would turn every unload in a harness that has not wired a sign
registry into a silent no-op — options, commands and all. A sign
registry is not a precondition for reversing a config option.
modeline: Option<&'a ModelineServiceHandle>OC.3 / ML.6: the modeline element registry (clear + remove by
namespaced id). A handle, not a &mut — ModelineService is
ArcSwap-backed interior-mutable, like theme above.
Option, unlike its neighbours, and the reason is a bug this field
caused before it was one: the loader gates the whole reversal on a
single all-or-nothing tuple of registry handles, so making the modeline
a required member turned every unload in a harness that had not wired
one into a silent no-op — options, commands and all. A modeline is not a
precondition for reversing a config option. Wired-ness is still checked
where it belongs, in WiredSeams::all(), which the boot pin asserts.
parsers: &'a CompilationParserFactoriesHandleCM.6b: the compilation parser-factory registry (unregister_plugin
by host-issued id, RCU’d like the other ArcSwap-held registries).
Auto Trait Implementations§
impl<'a> !RefUnwindSafe for TeardownRegistries<'a>
impl<'a> !UnwindSafe for TeardownRegistries<'a>
impl<'a> Freeze for TeardownRegistries<'a>
impl<'a> Send for TeardownRegistries<'a>
impl<'a> Sync for TeardownRegistries<'a>
impl<'a> Unpin for TeardownRegistries<'a>
impl<'a> UnsafeUnpin for TeardownRegistries<'a>
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<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