From 29bdd147e0241e0b1f11fc51c990d6302f19155d Mon Sep 17 00:00:00 2001 From: Shougo Matsushita Date: Wed, 25 Sep 2024 20:36:22 +0900 Subject: [PATCH] Add getFilter() --- denops/ddc/app.ts | 24 +++++++++++++++++++++++- denops/ddc/base/filter.ts | 1 + denops/ddc/base/source.ts | 1 + denops/ddc/base/ui.ts | 1 + denops/ddc/loader.ts | 3 +++ 5 files changed, 29 insertions(+), 1 deletion(-) diff --git a/denops/ddc/app.ts b/denops/ddc/app.ts index 0c22fc4..bf9b23e 100644 --- a/denops/ddc/app.ts +++ b/denops/ddc/app.ts @@ -1,11 +1,13 @@ import { Ddc } from "./ddc.ts"; import { ContextBuilderImpl } from "./context.ts"; import type { + BaseParams, ContextCallbacks, DdcEvent, DdcExtType, DdcItem, DdcOptions, + FilterOptions, Item, PreviewContext, Previewer, @@ -14,7 +16,7 @@ import type { import { Loader } from "./loader.ts"; import { isDenoCacheIssueError } from "./utils.ts"; import { createCallbackContext } from "./callback.ts"; -import { getPreviewer, onCompleteDone, onEvent } from "./ext.ts"; +import { getFilter, getPreviewer, onCompleteDone, onEvent } from "./ext.ts"; import type { Denops, Entrypoint } from "jsr:@denops/std@~7.1.0"; import * as vars from "jsr:@denops/std@~7.1.0/variable"; @@ -294,6 +296,26 @@ export const main: Entrypoint = (denops: Denops) => { ); return await ddc.visible(denops, context, options); }, + async getFilter(arg1: unknown): Promise< + [ + string, + FilterOptions, + BaseParams, + ] + > { + const filterName = ensure(arg1, is.String) as string; + const [_, _context, options] = await contextBuilder.createContext( + denops, + "Manual", + ); + const [filter, filterOptions, filterParams] = await getFilter( + denops, + loader, + options, + filterName, + ); + return [filter?.path ?? "", filterOptions, filterParams]; + }, }; async function _onEvent(event: DdcEvent): Promise { diff --git a/denops/ddc/base/filter.ts b/denops/ddc/base/filter.ts index e1c998d..7c251b9 100644 --- a/denops/ddc/base/filter.ts +++ b/denops/ddc/base/filter.ts @@ -40,6 +40,7 @@ export type FilterArguments = { export abstract class BaseFilter { name = ""; + path = ""; isInitialized = false; apiVersion = 4; diff --git a/denops/ddc/base/source.ts b/denops/ddc/base/source.ts index 0757c75..2c25a1c 100644 --- a/denops/ddc/base/source.ts +++ b/denops/ddc/base/source.ts @@ -82,6 +82,7 @@ export abstract class BaseSource< UserData extends unknown = unknown, > { name = ""; + path = ""; isInitialized = false; apiVersion = 6; diff --git a/denops/ddc/base/ui.ts b/denops/ddc/base/ui.ts index 148a8f4..3c54b72 100644 --- a/denops/ddc/base/ui.ts +++ b/denops/ddc/base/ui.ts @@ -50,6 +50,7 @@ export type VisibleArguments = { export abstract class BaseUi { name = ""; + path = ""; isInitialized = false; apiVersion = 2; diff --git a/denops/ddc/loader.ts b/denops/ddc/loader.ts index f64f896..d531873 100644 --- a/denops/ddc/loader.ts +++ b/denops/ddc/loader.ts @@ -158,6 +158,7 @@ export class Loader { add = (name: string) => { const ui = new mod.Ui(); ui.name = name; + ui.path = path; this.#uis[ui.name] = ui; }; break; @@ -165,6 +166,7 @@ export class Loader { add = (name: string) => { const source = new mod.Source(); source.name = name; + source.path = path; this.#sources[source.name] = source; }; break; @@ -172,6 +174,7 @@ export class Loader { add = (name: string) => { const filter = new mod.Filter(); filter.name = name; + filter.path = path; this.#filters[filter.name] = filter; }; break;