pub struct PluginThreadHandle { /* private fields */ }Expand description
Handle to the plugin thread for sending requests
Implementations§
Source§impl PluginThreadHandle
impl PluginThreadHandle
Sourcepub fn spawn(services: Arc<dyn PluginServiceBridge>) -> Result<Self>
pub fn spawn(services: Arc<dyn PluginServiceBridge>) -> Result<Self>
Create a new plugin thread and return its handle
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 to detect plugin thread failures.
Sourcepub fn deliver_response(&self, response: PluginResponse)
pub fn deliver_response(&self, response: PluginResponse)
Deliver a response to a pending async operation in the plugin
This is called by the editor after processing a command that requires a response.
Sourcepub fn load_plugin(&self, path: &Path) -> Result<()>
pub fn load_plugin(&self, path: &Path) -> Result<()>
Load a plugin from a file (blocking)
Sourcepub fn load_plugins_from_dir(&self, dir: &Path) -> Vec<String>
pub fn load_plugins_from_dir(&self, dir: &Path) -> Vec<String>
Load all plugins from a directory (blocking)
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 all plugins from a directory with config support (blocking) 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 (blocking)
Sourcepub fn reload_plugin(&self, name: &str) -> Result<()>
pub fn reload_plugin(&self, name: &str) -> Result<()>
Reload a plugin (blocking)
Sourcepub fn execute_action_async(
&self,
action_name: &str,
) -> Result<Receiver<Result<()>>>
pub fn execute_action_async( &self, action_name: &str, ) -> Result<Receiver<Result<()>>>
Execute a plugin action (non-blocking)
Returns a receiver that will receive the result when the action completes. The caller should poll this while processing commands to avoid deadlock.
Sourcepub fn run_hook(&self, hook_name: &str, args: HookArgs)
pub fn run_hook(&self, hook_name: &str, args: HookArgs)
Run a hook (non-blocking, fire-and-forget)
This is the key improvement: hooks are now non-blocking. The plugin thread will execute them asynchronously and any results will come back via the PluginCommand 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)
Sourcepub fn list_plugins(&self) -> Vec<TsPluginInfo>
pub fn list_plugins(&self) -> Vec<TsPluginInfo>
List all loaded plugins (blocking)
Sourcepub fn process_commands(&mut self) -> Vec<PluginCommand>
pub fn process_commands(&mut self) -> Vec<PluginCommand>
Process pending plugin commands (non-blocking)
Returns immediately with any pending commands by polling the command queue directly. This does not require the plugin thread to respond, avoiding deadlocks.
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.
After the render loop fires a hook like lines_changed, the plugin thread
processes it and sends back commands (AddConceal, etc.) followed by a
HookCompleted sentinel. This method waits for that sentinel so the
render has all conceal/overlay updates before painting the frame.
Returns all non-sentinel commands collected while waiting. Falls back to non-blocking drain if the timeout expires.
Sourcepub fn state_snapshot_handle(&self) -> Arc<RwLock<EditorStateSnapshot>>
pub fn state_snapshot_handle(&self) -> Arc<RwLock<EditorStateSnapshot>>
Get the state snapshot handle for editor to update
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 Called by the app when async operations (SpawnProcess, Delay) complete
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 Called by the app when async operations fail
Trait Implementations§
Auto Trait Implementations§
impl Freeze for PluginThreadHandle
impl !RefUnwindSafe for PluginThreadHandle
impl Send for PluginThreadHandle
impl !Sync for PluginThreadHandle
impl Unpin for PluginThreadHandle
impl UnsafeUnpin for PluginThreadHandle
impl !UnwindSafe for PluginThreadHandle
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> 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