pub struct PluginManager { /* private fields */ }Expand description
Unified plugin manager that abstracts over the plugin system.
When the plugins feature is enabled, this wraps PluginThreadHandle.
When disabled, all methods are no-ops.
Implementations§
Source§impl PluginManager
impl PluginManager
Sourcepub fn new(
enable: bool,
command_registry: Arc<RwLock<CommandRegistry>>,
dir_context: DirectoryContext,
theme_cache: Arc<RwLock<HashMap<String, Value>>>,
) -> Self
pub fn new( enable: bool, command_registry: Arc<RwLock<CommandRegistry>>, dir_context: DirectoryContext, theme_cache: Arc<RwLock<HashMap<String, Value>>>, ) -> Self
Create a new plugin manager.
When plugins feature is enabled and enable is true, spawns the plugin thread.
Otherwise, creates a no-op manager.
Sourcepub fn test_inject_command(&mut self, command: PluginCommand)
pub fn test_inject_command(&mut self, command: PluginCommand)
Inject a PluginCommand into the
manager’s pending queue as if it had arrived from the plugin
thread. Returned by the next process_commands() call.
Intended for tests that need to deterministically reproduce
renderer/plugin races (e.g. the mid-render process_commands
path in Editor::render) without spinning up the real plugin
runtime. Production code should not call this.
Sourcepub fn is_active(&self) -> bool
pub fn is_active(&self) -> bool
Check if the plugin system is active (has a running plugin thread,
or — in tests — has commands queued via Self::test_inject_command).
Sourcepub fn check_thread_health(&mut self)
pub fn check_thread_health(&mut self)
Check thread health and panic if the plugin thread died due to a panic. This propagates plugin thread panics to the calling thread. Call this periodically (e.g., in wait loops) to fail fast on plugin errors.
Sourcepub fn load_plugins_from_dir(&self, dir: &Path) -> Vec<String>
pub fn load_plugins_from_dir(&self, dir: &Path) -> Vec<String>
Load plugins from a directory.
Sourcepub fn load_plugins_from_dir_with_config(
&self,
dir: &Path,
plugin_configs: &HashMap<String, PluginConfig>,
) -> (Vec<String>, HashMap<String, PluginConfig>)
pub fn load_plugins_from_dir_with_config( &self, dir: &Path, plugin_configs: &HashMap<String, PluginConfig>, ) -> (Vec<String>, HashMap<String, PluginConfig>)
Load plugins from a directory with config support. Returns (errors, discovered_plugins) where discovered_plugins is a map of plugin name -> PluginConfig with paths populated.
Sourcepub fn unload_plugin(&self, name: &str) -> Result<()>
pub fn unload_plugin(&self, name: &str) -> Result<()>
Unload a plugin by name.
Sourcepub fn load_plugin(&self, path: &Path) -> Result<()>
pub fn load_plugin(&self, path: &Path) -> Result<()>
Load a single plugin by path.
Sourcepub fn load_plugin_from_source(
&self,
source: &str,
name: &str,
is_typescript: bool,
) -> Result<()>
pub fn load_plugin_from_source( &self, source: &str, name: &str, is_typescript: bool, ) -> Result<()>
Load a plugin from source code directly (no file I/O).
If a plugin with the same name is already loaded, it will be unloaded first (hot-reload semantics). This is used for “Load Plugin from Buffer”.
Sourcepub fn deliver_response(&self, response: PluginResponse)
pub fn deliver_response(&self, response: PluginResponse)
Deliver a response to a pending async plugin operation.
Sourcepub fn process_commands(&mut self) -> Vec<PluginCommand>
pub fn process_commands(&mut self) -> Vec<PluginCommand>
Process pending plugin commands (non-blocking).
Sourcepub fn process_commands_until_hook_completed(
&mut self,
hook_name: &str,
timeout: Duration,
) -> Vec<PluginCommand>
pub fn process_commands_until_hook_completed( &mut self, hook_name: &str, timeout: Duration, ) -> Vec<PluginCommand>
Process commands, blocking until HookCompleted for the given hook arrives.
See PluginThreadHandle::process_commands_until_hook_completed for details.
Sourcepub fn state_snapshot_handle(&self) -> Option<Arc<RwLock<EditorStateSnapshot>>>
pub fn state_snapshot_handle(&self) -> Option<Arc<RwLock<EditorStateSnapshot>>>
Get the state snapshot handle for updating editor state.
Sourcepub fn search_handles_handle(&self) -> Option<SearchHandleRegistry>
pub fn search_handles_handle(&self) -> Option<SearchHandleRegistry>
Streaming-search handle registry shared with the plugin runtime.
Producers spawned by BeginSearch look up the handle here and write
directly into its SearchHandleState; consumers (the plugin) drain
the same state via _searchHandleTake.
Sourcepub fn execute_action_async(
&self,
action_name: &str,
) -> Option<Result<Receiver<Result<()>>>>
pub fn execute_action_async( &self, action_name: &str, ) -> Option<Result<Receiver<Result<()>>>>
Execute a plugin action asynchronously.
Sourcepub fn list_plugins(&self) -> Vec<TsPluginInfo>
pub fn list_plugins(&self) -> Vec<TsPluginInfo>
List all loaded plugins.
Sourcepub fn plugin_declarations(&self) -> Vec<(String, String)>
pub fn plugin_declarations(&self) -> Vec<(String, String)>
Collect the isolated-declarations .d.ts emit of every loaded
plugin that produced one. Returns (plugin_name, d_ts_source)
pairs — callers use this to assemble plugins.d.ts.
Available in all builds: without the plugins feature it
returns an empty vec, letting editor_init call this
unconditionally.
Sourcepub fn reload_plugin(&self, name: &str) -> Result<()>
pub fn reload_plugin(&self, name: &str) -> Result<()>
Reload a plugin by name.
Sourcepub fn load_plugins_from_dir_with_config_request(
&self,
dir: &Path,
plugin_configs: &HashMap<String, PluginConfig>,
) -> Option<Receiver<PluginsDirLoadResult>>
pub fn load_plugins_from_dir_with_config_request( &self, dir: &Path, plugin_configs: &HashMap<String, PluginConfig>, ) -> Option<Receiver<PluginsDirLoadResult>>
Submit a “load plugins from dir with config” request without
blocking. Returns None when the plugin runtime is inactive (no
thread), or when the request couldn’t be submitted. Used by the
startup async-load path.
Sourcepub fn load_plugin_from_source_request(
&self,
source: &str,
name: &str,
is_typescript: bool,
) -> Option<Receiver<Result<()>>>
pub fn load_plugin_from_source_request( &self, source: &str, name: &str, is_typescript: bool, ) -> Option<Receiver<Result<()>>>
Submit a “load plugin from source” request without blocking.
Returns None when the plugin runtime is inactive.
Sourcepub fn list_plugins_request(&self) -> Option<Receiver<Vec<TsPluginInfo>>>
pub fn list_plugins_request(&self) -> Option<Receiver<Vec<TsPluginInfo>>>
Submit a “list plugins” request without blocking. Submitted after a batch of dir-load requests, this guarantees the response covers every plugin loaded by that batch (FIFO request channel).
Sourcepub fn has_hook_handlers(&self, hook_name: &str) -> bool
pub fn has_hook_handlers(&self, hook_name: &str) -> bool
Check if any handlers are registered for a hook.
Blocking call (round-trips through the plugin thread). Suitable for
rare events (mouse clicks, command dispatch). For per-render gating
use has_subscribers instead — it reads a shared registry directly.
Sourcepub fn has_subscribers(&self, hook_name: &str) -> bool
pub fn has_subscribers(&self, hook_name: &str) -> bool
Non-blocking variant of has_hook_handlers. Reads the shared
event_handlers registry directly — safe to call on the hot
render path. Returns false when plugins are disabled.
Sourcepub fn resolve_callback(&self, callback_id: JsCallbackId, result_json: String)
pub fn resolve_callback(&self, callback_id: JsCallbackId, result_json: String)
Resolve an async callback in the plugin runtime
Sourcepub fn reject_callback(&self, callback_id: JsCallbackId, error: String)
pub fn reject_callback(&self, callback_id: JsCallbackId, error: String)
Reject an async callback in the plugin runtime
Auto Trait Implementations§
impl !RefUnwindSafe for PluginManager
impl !Sync for PluginManager
impl !UnwindSafe for PluginManager
impl Freeze for PluginManager
impl Send for PluginManager
impl Unpin for PluginManager
impl UnsafeUnpin for PluginManager
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
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§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.Source§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.Source§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.Source§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.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> 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 moreSource§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more