diff --git a/packages/language-service/src/language-plugin.ts b/packages/language-service/src/language-plugin.ts index c8bd09f..5ed4856 100644 --- a/packages/language-service/src/language-plugin.ts +++ b/packages/language-service/src/language-plugin.ts @@ -191,19 +191,17 @@ function* getTempblotEmbeddedCodes( }); }); - if (tsMappings.length > 0) { - yield { - id: "combined_context", - languageId: "typescript", - snapshot: { - getText: (start, end) => combinedText.substring(start, end), - getLength: () => combinedText.length, - getChangeRange: () => undefined, - }, - mappings: tsMappings, - embeddedCodes: [], - }; - } + yield { + id: "combined_context", + languageId: "typescript", + snapshot: { + getText: (start, end) => combinedText.substring(start, end), + getLength: () => combinedText.length, + getChangeRange: () => undefined, + }, + mappings: tsMappings, + embeddedCodes: [], + }; if (!output) { return; diff --git a/packages/language-service/tests/language-plugin.spec.ts b/packages/language-service/tests/language-plugin.spec.ts index fe9a8b7..1730ace 100644 --- a/packages/language-service/tests/language-plugin.spec.ts +++ b/packages/language-service/tests/language-plugin.spec.ts @@ -52,6 +52,28 @@ test("creates output embedded code for output-only files", () => { .toContain('{"value": null}'); }); +test("creates empty TypeScript embedded code for output-only files without interpolations", () => { + const source = ` +{ + "test": "a" +} +`; + + const virtualCode = createVirtualCode(source); + const combinedContext = virtualCode.embeddedCodes.find( + (code) => code.id === "combined_context", + ); + const outputJson = virtualCode.embeddedCodes.find( + (code) => code.id === "output_json", + ); + + expect(combinedContext?.snapshot.getText(0, combinedContext.snapshot.getLength())) + .toBe("export {}; // Make this file a module\n\n"); + expect(combinedContext?.mappings).toEqual([]); + expect(outputJson?.snapshot.getText(0, outputJson.snapshot.getLength())) + .toContain('"test": "a"'); +}); + test("does not report missing-block diagnostics for single-section files", () => { const setupOnlyDiagnostics = getTempblotRootDiagnostics( parseTempblotRoot(""),