From 69a90699c456954a591724c52492d87e7d6c09d9 Mon Sep 17 00:00:00 2001 From: Shougo Matsushita Date: Mon, 7 Oct 2024 22:36:49 +0900 Subject: [PATCH] Improve exists() check --- .github/workflows/jsr.yml | 1 - denops/dpp/ext.ts | 24 ++++++++++++------------ denops/dpp/loader.ts | 8 ++++++-- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/.github/workflows/jsr.yml b/.github/workflows/jsr.yml index 45da0ee..2de3f3a 100644 --- a/.github/workflows/jsr.yml +++ b/.github/workflows/jsr.yml @@ -25,4 +25,3 @@ jobs: - name: Publish run: | deno run -A jsr:@david/publish-on-tag@0.1.3 - diff --git a/denops/dpp/ext.ts b/denops/dpp/ext.ts index 2e2b6e0..2c20d45 100644 --- a/denops/dpp/ext.ts +++ b/denops/dpp/ext.ts @@ -118,17 +118,17 @@ export async function getExt( ] > { if (!loader.getExt(name)) { - await loader.autoload(denops, "ext", name); - } - - const ext = loader.getExt(name); - if (!ext) { - if (name.length !== 0) { + const exists = await loader.autoload(denops, "ext", name); + if (!exists) { await printError( denops, `Not found ext: "${name}"`, ); } + } + + const ext = loader.getExt(name); + if (!ext) { return [ undefined, defaultExtOptions(), @@ -155,17 +155,17 @@ async function getProtocol( ] > { if (!loader.getProtocol(name)) { - await loader.autoload(denops, "protocol", name); - } - - const protocol = loader.getProtocol(name); - if (!protocol) { - if (name.length !== 0) { + const exists = await loader.autoload(denops, "protocol", name); + if (!exists) { await printError( denops, `Not found protocol: "${name}"`, ); } + } + + const protocol = loader.getProtocol(name); + if (!protocol) { return [ undefined, defaultProtocolOptions(), diff --git a/denops/dpp/loader.ts b/denops/dpp/loader.ts index 5c201ed..4ebd0eb 100644 --- a/denops/dpp/loader.ts +++ b/denops/dpp/loader.ts @@ -33,7 +33,7 @@ export class Loader { denops: Denops, type: DppExtType, name: string, - ) { + ): Promise { const runtimepath = await op.runtimepath.getGlobal(denops); if (runtimepath !== this.#prevRuntimepath) { this.#cachedPaths = await globpath( @@ -46,10 +46,14 @@ export class Loader { const key = `@dpp-${type}s/${name}`; if (!this.#cachedPaths[key]) { - return; + return this.#prevRuntimepath === ""; } await this.registerPath(type, this.#cachedPaths[key]); + + // NOTE: this.#prevRuntimepath may be true if initialized. + // NOTE: If not found, it returns false, . + return this.#prevRuntimepath === "" || this.#cachedPaths[key] !== undefined; } async registerPath(type: DppExtType, path: string) {