package openidea:plugin@1.3.0; /// What the pane beside the Services tree shows for a plugin's node. interface detail-types { /// A switch above a log; when on, `args` are appended and the program /// starts again. record log-toggle { id: string, label: string, args: list, } /// A program the IDE runs, its output followed in a log (ANSI stripped, /// the last 5000 lines) until it exits or the pane closes. Needs the /// plugin's `process:` grant; runs in the project root. record process-log { program: string, args: list, toggles: list, } /// The body of a tab. variant pane { /// A centred message: an empty state or why there is nothing to show. message(string), /// Read-only text the user can select and copy, at most 1 MiB. text(string), log(process-log), } /// A tab of a node's pane; the IDE switches tabs without calling the plugin. record tab { id: string, label: string, body: pane, } } /// The detail pane of the nodes of a plugin's `location = "services"` views. /// The nodes themselves, the toolbar and their events come from /// `view-provider` (`render` / `handle` of the view). interface detail-provider { use types.{error}; use invocation.{invocation}; use detail-types.{tab}; /// The tabs of node `key` of view `view` (at most 8), rendered when the /// node is selected and again after `views.refresh(view)`. detail: func(view: string, key: string, ctx: borrow) -> result, error>; }