simvx.ide.editor_integration

Editor integration – injects IDE features into the editor’s CodeEditorPanel.

This lives in simvx.ide (not simvx.editor) because the dependency must point ide -> editor: ide may know about the editor’s extension points, but the editor (a sibling package) must never import ide at module load.

No panel swapping: the editor already has a CodeEditorPanel from core. The bridge injects IDE capabilities (LSP, diagnostics, breakpoints, completions) and adds IDE-only panels (Terminal, Output, Problems, Search). The editor side references this class lazily – it is constructed by integration code that has both packages available, never at editor import time.

Module Contents

Classes

IDEBridgePlugin

Bridges the editor’s State <-> IDEState.

Data

API

simvx.ide.editor_integration.log

‘getLogger(…)’

simvx.ide.editor_integration.__all__

[‘IDEBridgePlugin’]

class simvx.ide.editor_integration.IDEBridgePlugin(editor_state: simvx.editor.state.State, bottom_tabs: simvx.core.ui.tabs.TabContainer, code_panel: simvx.core.ui.code_editor_panel.CodeEditorPanel | None = None)[source]

Bridges the editor’s State <-> IDEState.

Instead of swapping panels, injects IDE callbacks into the editor’s existing CodeEditorPanel and adds IDE-only bottom panels.

Lifecycle::

bridge = IDEBridgePlugin(editor_state, bottom_tabs, code_panel)
bridge.activate()      # wire signals, inject callbacks, start LSP
bridge.poll(dt)        # call each frame
bridge.deactivate()    # cleanup

Initialization

property ide_state: simvx.ide.state.State[source]
property ide_config: simvx.ide.config.Config[source]
activate()[source]

Wire signals, inject IDE callbacks, start LSP and lint runner.

deactivate()[source]

Disconnect signals, remove panels, stop LSP.

poll(dt: float)[source]

Per-frame update – poll LSP client for messages.