// ref: https://github.com/Shougo/shougo-s-github/blob/78f2690dfa162cceee43a81babe540a7df604b19/vim/rc/dpp.ts // : https://github.com/Shougo/shougo-s-github/blob/313d998ce4ddd8e0ac8cdc30b9968ff0824d12a5/vim/rc/dpp.ts import { BaseConfig, ConfigReturn, ContextBuilder, Dpp, Plugin, } from "https://deno.land/x/dpp_vim@v0.0.7/types.ts"; import { Denops, fn } from "https://deno.land/x/dpp_vim@v0.0.7/deps.ts"; type Toml = { hooks_file?: string; ftplugins?: Record<string, string>; plugins?: Plugin[]; }; type LazyMakeStateResult = { plugins: Plugin[]; stateLines: string[]; }; export class Config extends BaseConfig { override async config(args: { denops: Denops; contextBuilder: ContextBuilder; basePath: string; dpp: Dpp; }): Promise<ConfigReturn> { args.contextBuilder.setGlobal({ protocols: ["git"], }); const [context, options] = await args.contextBuilder.get(args.denops); // Load toml plugins const tomls: Toml[] = []; for ( const tomlFile of [ "~/.cache/dpp/dpp.toml", ] ) { tomls.push( await args.dpp.extAction( args.denops, context, options, "toml", "load", { path: tomlFile, options: { lazy: false, }, }, ) as Toml, ); } // Merge toml results const recordPlugins: Record<string, Plugin> = {}; const ftplugins: Record<string, string> = {}; const hooksFiles: string[] = []; for (const toml of tomls) { for (const plugin of toml.plugins ?? []) { recordPlugins[plugin.name] = plugin; } if (toml.ftplugins) { for (const filetype of Object.keys(toml.ftplugins)) { if (ftplugins[filetype]) { ftplugins[filetype] += `\n${toml.ftplugins[filetype]}`; } else { ftplugins[filetype] = toml.ftplugins[filetype]; } } } if (toml.hooks_file) { hooksFiles.push(toml.hooks_file); } } const lazyResult = await args.dpp.extAction( args.denops, context, options, "lazy", "makeState", { plugins: Object.values(recordPlugins), }, ) as LazyMakeStateResult; return { ftplugins, hooksFiles, plugins: lazyResult.plugins, stateLines: lazyResult.stateLines, }; } }