package openidea:plugin@1.1.0; /// Workbench events, delivered in batches to `event-handler.handle`. interface events { use types.{error, extension}; record action-performed { /// Action id (`editor.duplicate-line`). action: string, title: string, /// How the user started it: `keyboard`, `menu`, `toolbar`, /// `context-menu`, `search` or `other` (more may be added). source: string, /// Its keyboard shortcut, when it has one (`Ctrl+D`). shortcut: option, } variant event { file-opened(string), file-saved(string), editor-focused(option), action-performed(action-performed), vcs-changed(string), scheduled, /// A kind added after 1.0 (subscribed to by its name). other(extension), } /// Delivers `kind` events from now on, for the rest of the session (also /// across idle reclaim: an event activates the plugin again). Declare /// `activation = ["on-event:"]` to get them before first use. /// Kinds: `file-opened`, `file-saved`, `editor-focused` (the focused editor /// changed), `vcs-changed` (a repository's state changed: commit, /// checkout, fetch…), `action-performed` (an IDE action ran) and /// `scheduled` (the `on-schedule` period elapsed); later IDEs add more, /// and an IDE that doesn't know one fails with `invalid`. /// Requires `events` (`events.input` for `action-performed`). subscribe: func(kind: string) -> result<_, error>; unsubscribe: func(kind: string); } /// Long-running work with a progress indicator. While a task is open, the /// call that began it may run for the background budget (60 s) instead of 5 s. interface tasks { resource task { /// `done` of `total` units (`none`: indeterminate), with a short status. report: func(done: u32, total: option, message: option); /// The user cancelled it: stop soon and return. is-cancelled: func() -> bool; } /// Starts a task shown in the status bar; dropping it ends it. begin: func(title: string, cancellable: bool) -> task; }