Template
feat: Complete plugin lifecycle management with lazy loading and runtime reload
Major changes: - Add unload() method to all plugins for proper cleanup (unregister commands/providers/LSP clients, destroy widgets, clear state) - Implement lazy widget loading via "show" signal across all containers - Add autoload: false manifest option for manual/conditional plugin loading - Add Plugins UI with runtime load/unload toggle via Ctrl+Shift+p - Implement controller unregistration system with proper signal disconnection - Add new events: UnregisterCommandEvent, GetFilesEvent, GetSourceViewsEvent, TogglePluginsUiEvent - Fix signal leaks by tracking and disconnecting handlers in widgets (search/replace, LSP manager, tabs, telescope, markdown preview) - Add Save/Save As to tabs context menu - Improve search/replace behavior (selection handling, focus management) - Add telescope file initialization from existing loaded files - Refactor plugin reload watcher to dynamically add/remove plugins on filesystem changes - Add new plugins: file_history, extend_source_view_menu, godot_lsp_client - Fix bug in prettify_json (undefined variable reference
This commit is contained in:
+12
-12
@@ -12,21 +12,21 @@ class SingletonError(Exception):
|
||||
|
||||
|
||||
|
||||
T = TypeVar('T', bound='Singleton')
|
||||
T = TypeVar('T', bound = 'Singleton')
|
||||
|
||||
|
||||
|
||||
class Singleton:
|
||||
__instance = None
|
||||
_instances = {}
|
||||
|
||||
def __new__(cls: Type[T], *args: Any, **kwargs: Any) -> T:
|
||||
if cls.__instance is not None:
|
||||
logger.debug(f"'{cls.__name__}' is a Singleton. Returning instance...")
|
||||
return cls.__instance
|
||||
if cls in cls._instances: return cls._instances[cls]
|
||||
|
||||
cls.__instance = super(Singleton, cls).__new__(cls)
|
||||
return cls.__instance
|
||||
instance = super().__new__(cls)
|
||||
cls._instances[cls] = instance
|
||||
return instance
|
||||
|
||||
def __init__(self) -> None:
|
||||
if self.__instance is not None:
|
||||
return
|
||||
|
||||
super(Singleton, self).__init__()
|
||||
@classmethod
|
||||
def destroy(cls):
|
||||
if cls in cls._instances:
|
||||
del cls._instances[cls]
|
||||
|
||||
Reference in New Issue
Block a user