Files
openidea/wit/decorations.wit
T
Deng Liuanddengliu 22fe1702be feat(plugins): dynamic file and folder icons by path (API 1.8) (#3257)
Static [[contributes.fileIcons]] entries match file names only, so a plugin could not tell a Helm chart folder, its templates or a Kustomize overlay from any other YAML file or folder. API 1.8 adds decorations.set-file-icon and the batched set-file-icons (up to 10,000 paths per set, requires project.read): a plugin assigns one of its declared file icons to an exact file or plain-folder path, shown in the project tree and editor tabs after the user's own file type icons. Under engines.openidea = "^1.8" a fileIcons entry may omit patterns, for icons used only this way. Both WIT copies, the SDK (host functions and mock), the plugins README and the bundled components are updated.

Co-authored-by: dengliu <5108773+dengliu@users.noreply.github.com>
2026-11-14 07:20:33 +08:00

32 lines
2.2 KiB
Plaintext

package openidea:plugin@1.8.0;
/// Editor and project-tree decorations (API 1.4). Requires project.read. An editor set
/// follows its file: the file's own project, or the nearest one when it is outside them all.
/// Tree sets are rooted in an open project. Sets belong to the plugin and disappear when it stops.
/// Styles: highlight, search, added, modified, removed, warning, error, info,
/// typo, weak, underline, strikethrough, muted. Unknown styles are ignored. Theme tokens only.
interface decorations {
use types.{error, range};
/// An editor annotation; after is plain text shown after the range.
record decoration { range: range, style: string, hover: option<string>, after: option<string> }
/// A project-tree annotation; badge is at most two Unicode characters.
record file-decoration { badge: option<string>, style: string, tooltip: option<string> }
/// Replace this set for a file. At most 10,000 items/file and 50 editor sets/plugin.
/// Metadata is bounded to 4 MiB per plugin. Unknown styles are ignored.
set: func(path: string, set-id: string, items: list<decoration>) -> result<_, error>;
/// Remove this editor set from every file/project.
clear: func(set-id: string) -> result<_, error>;
/// Replace this set's tree annotation for a file; at most 50 tree sets/plugin.
set-file: func(path: string, set-id: string, item: file-decoration) -> result<_, error>;
/// Remove this tree set from every file/project.
clear-file: func(set-id: string) -> result<_, error>;
/// Replace this set's tree annotation for a file with a note shown after its name (API 1.7):
/// one line of at most 200 characters, with an optional tooltip.
set-file-note: func(path: string, set-id: string, note: string, tooltip: option<string>) -> result<_, error>;
/// Replace this set's tree icon for a file or folder with an id declared under
/// `[[contributes.fileIcons]]` (API 1.8), with an optional tooltip.
set-file-icon: func(path: string, set-id: string, icon: string, tooltip: option<string>) -> result<_, error>;
/// Replace all `(path, icon)` entries of a tree set at once (API 1.8; at most 10,000 entries).
set-file-icons: func(set-id: string, items: list<tuple<string, string>>) -> result<_, error>;
}