@@ -31,7 +31,7 @@ import { isDdcCallbackCancelError } from "./callback.ts";
3131import { type BaseUi , defaultUiOptions } from "./base/ui.ts" ;
3232import { type BaseSource , defaultSourceOptions } from "./base/source.ts" ;
3333import { type BaseFilter , defaultFilterOptions } from "./base/filter.ts" ;
34- import { printError } from "./utils.ts" ;
34+ import { callCallback , printError } from "./utils.ts" ;
3535
3636import type { Denops } from "@denops/std" ;
3737
@@ -260,7 +260,42 @@ export async function filterItems(
260260 ) ) ;
261261 }
262262
263- cdd = await callFilters ( loader , sourceOptions . matchers ) ;
263+ type Filters = {
264+ matchers : UserFilter [ ] ;
265+ sorters : UserFilter [ ] ;
266+ converters : UserFilter [ ] ;
267+ } ;
268+
269+ const filters : Filters = {
270+ matchers : sourceOptions . matchers ,
271+ sorters : sourceOptions . sorters ,
272+ converters : sourceOptions . converters ,
273+ } ;
274+
275+ const dynamicFilters = await callCallback (
276+ denops ,
277+ sourceOptions . dynamicFilters ,
278+ {
279+ context,
280+ options,
281+ sourceOptions,
282+ completeStr,
283+ items : cdd ,
284+ } ,
285+ ) as Filters | null ;
286+ if ( dynamicFilters ) {
287+ if ( dynamicFilters . matchers ) {
288+ filters . matchers = dynamicFilters . matchers ;
289+ }
290+ if ( dynamicFilters . sorters ) {
291+ filters . sorters = dynamicFilters . sorters ;
292+ }
293+ if ( dynamicFilters . converters ) {
294+ filters . converters = dynamicFilters . converters ;
295+ }
296+ }
297+
298+ cdd = await callFilters ( loader , filters . matchers ) ;
264299
265300 if ( sourceOptions . matcherKey !== "" ) {
266301 cdd = cdd . map ( ( c ) => (
@@ -272,12 +307,12 @@ export async function filterItems(
272307 ) ) ;
273308 }
274309
275- cdd = await callFilters ( loader , sourceOptions . sorters ) ;
310+ cdd = await callFilters ( loader , filters . sorters ) ;
276311
277312 // Filter by maxItems
278313 cdd = cdd . slice ( 0 , sourceOptions . maxItems ) ;
279314
280- cdd = await callFilters ( loader , sourceOptions . converters ) ;
315+ cdd = await callFilters ( loader , filters . converters ) ;
281316
282317 return cdd ;
283318}
0 commit comments