From b596c6148f33970bed91d84cafa569cb9dfefab3 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Fri, 30 Jul 2021 09:11:54 -0700 Subject: [PATCH] Scribbles, nothing works yet --- src/compiler/emitter.ts | 9 +++++++++ src/testRunner/unittests/tsbuild/declarationEmit.ts | 7 +++++++ src/testRunner/unittests/tsbuild/emitDeclarationOnly.ts | 2 ++ src/testRunner/unittests/tsbuild/outFile.ts | 3 +++ 4 files changed, 21 insertions(+) diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 5667e792b46..b83877b5ec6 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -438,6 +438,8 @@ namespace ts { if (bundleBuildInfo) bundleBuildInfo.js = printer.bundleFileInfo; } + const horrible: Record = {} + function emitDeclarationFileOrBundle( sourceFileOrBundle: SourceFile | Bundle | undefined, declarationFilePath: string | undefined, @@ -449,6 +451,13 @@ namespace ts { return; } const sourceFiles = isSourceFile(sourceFileOrBundle) ? [sourceFileOrBundle] : sourceFileOrBundle.sourceFiles; + const key = sourceFiles.map(f => f.fileName).join("|") + console.log(key) + horrible[key] = sourceFiles + // Let's do this WRONG + // 1. cache with key=filesForEmit, value=[emit, diagnostics] + // 2. include custom transformers in the key, plus "other api things" (??) + // Afterward, need to measure performance to see which projects this helps/how much. Ask Andrew about this. const filesForEmit = forceDtsEmit ? sourceFiles : filter(sourceFiles, isSourceFileNotJson); // Setup and perform the transformation to retrieve declarations from the input files const inputListOrBundle = outFile(compilerOptions) ? [factory.createBundle(filesForEmit, !isSourceFile(sourceFileOrBundle) ? sourceFileOrBundle.prepends : undefined)] : filesForEmit; diff --git a/src/testRunner/unittests/tsbuild/declarationEmit.ts b/src/testRunner/unittests/tsbuild/declarationEmit.ts index 122912e026d..fb61e8932b4 100644 --- a/src/testRunner/unittests/tsbuild/declarationEmit.ts +++ b/src/testRunner/unittests/tsbuild/declarationEmit.ts @@ -114,5 +114,12 @@ export function fn4() { }), commandLineArgs: ["--b", "/src/packages/pkg2/tsconfig.json", "--verbose"] }); + verifyTsc({ + scenario: "doubleEmit", + subScenario: "cache declaration emit from build", + fs: () => loadProjectFromFiles({ + }), + commandLineArgs: ["--b", "/src/packages/pkg2/tsconfig.json", "--verbose"] + }); }); } diff --git a/src/testRunner/unittests/tsbuild/emitDeclarationOnly.ts b/src/testRunner/unittests/tsbuild/emitDeclarationOnly.ts index c673cd11bcd..31327105483 100644 --- a/src/testRunner/unittests/tsbuild/emitDeclarationOnly.ts +++ b/src/testRunner/unittests/tsbuild/emitDeclarationOnly.ts @@ -8,6 +8,8 @@ namespace ts { projFs = undefined!; }); + // This is pretty close but the example only has one project. Still it's worth debugging it to see. + // (for initial debugging, it's STILl probably easier to attach to ~/dmp/buildbasic/test though) function verifyEmitDeclarationOnly(disableMap?: true) { verifyTscSerializedIncrementalEdits({ subScenario: `only dts output in circular import project with emitDeclarationOnly${disableMap ? "" : " and declarationMap"}`, diff --git a/src/testRunner/unittests/tsbuild/outFile.ts b/src/testRunner/unittests/tsbuild/outFile.ts index 4ebcd2e7001..ee756b1ca23 100644 --- a/src/testRunner/unittests/tsbuild/outFile.ts +++ b/src/testRunner/unittests/tsbuild/outFile.ts @@ -201,6 +201,9 @@ namespace ts { modifyFs: fs => replaceText(fs, sources[Project.third][Source.config], `"composite": true,`, ""), }); + it("only generates declaration emit once on subsequent edits and recompiles", () => { + }) + it("rebuilds completely when version in tsbuildinfo doesnt match ts version", () => { const { fs, tick } = getFsWithTime(outFileFs); const host = fakes.SolutionBuilderHost.create(fs);