import { BaseFilter, type FilterArguments, } from "jsr:@shougo/ddu-vim@^5.0.0/filter"; import type { DduItem } from "jsr:@shougo/ddu-vim@^5.0.0/types"; import { ensure, is } from "jsr:@core/unknownutil@^3.18.1"; export type Params = { ignoredActions: Record; }; const isItem = is.ObjectOf({ items: is.ArrayOf(is.ObjectOf({ __sourceName: is.String, kind: is.String, })), }); const isActionData = is.ObjectOf({ action: is.String }); export class Filter extends BaseFilter { override filter(args: FilterArguments): Promise { if (args.items.length === 0) { return Promise.resolve(args.items); } const { __sourceName, kind } = ensure(args.items.at(0)?.action, isItem) .items.at(0)!; const ignoredActions = args.filterParams.ignoredActions[__sourceName] ?? args.filterParams.ignoredActions[kind]; return Promise.resolve( ignoredActions ? args.items.filter((item) => !ignoredActions.includes(ensure(item.action, isActionData).action) ) : args.items, ); } override params(): Params { return { ignoredActions: { buffer: ["browse", "copy", "executeSystem", "newDirectory", "newFile"], dein: ["browse", "copy", "executeSystem", "newDirectory", "newFile"], mr: ["browse", "copy", "executeSystem", "newDirectory", "newFile"], mrr: ["browse", "copy", "executeSystem", "newDirectory", "newFile"], mrw: ["browse", "copy", "executeSystem", "newDirectory", "newFile"], }, }; } }