fix: preserve configuration completion context

This commit is contained in:
2026-09-01 18:59:16 +09:00
parent 4bba227af5
commit d1e8a827c2
5 changed files with 99 additions and 16 deletions
@@ -328,10 +328,12 @@
</header>
<DecodalSourceEditor
value={source}
readonly={!selectedPath || busy}
readonly={!selectedPath || busy || !analysisReady}
fixedSchemaWrapper={mainSelected}
onChange={(value) => source = value}
onComplete={(value, offset, explicit) => toolchain?.complete(selectedPath, value, offset, explicit) ?? Promise.resolve(null)}
onComplete={(value, offset, explicit) => analysisReady && toolchain
? toolchain.complete(selectedPath, value, offset, explicit)
: Promise.resolve(null)}
/>
<p class="config-source-status" aria-live="polite">{status}</p>
{#if conflict}
@@ -299,6 +299,45 @@ Deno.test("generated WASM returns completion items for the editor adapter", () =
assertEquals(result.items[0].kind, "file");
});
Deno.test("generated WASM completes blank nested schema positions after Unicode", () => {
const source =
'{ description = "日本語"; profile = { }\n} as WorkspaceConfigSchema';
const cursor = source.indexOf("{ }") + 2;
set_snapshot({
...snapshot,
entries: {
...snapshot.entries,
"workspace.dcdl": {
...snapshot.entries["workspace.dcdl"],
content: source,
},
},
});
set_schema_bundle({
contributions: [],
source: "{ profile = { default_profile = String; }; prompts = {}; }",
fingerprint: "sha256:test-schema",
});
const result = complete_current(
"workspace.dcdl",
source,
cursor,
true,
) as {
from: number;
items: Array<{ label: string; kind: string }>;
};
assertEquals(result.from, cursor);
assertEquals(
result.items.some((item) => item.label === "default_profile"),
true,
);
assertEquals(result.items.some((item) => item.label === "profile"), false);
assertEquals(result.items.some((item) => item.label === "prompts"), false);
});
Deno.test("generated WASM completes asserted WorkspaceConfigSchema keys", () => {
const bareSource = "{ pro }";
const source = "{ pro } as WorkspaceConfigSchema";