Skip to content

Commit 1f08f8c

Browse files
committed
Clean up some TODOs
1 parent b51bb17 commit 1f08f8c

File tree

3 files changed

+58
-46
lines changed

3 files changed

+58
-46
lines changed

Diff for: Gulpfile.js

+51-35
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ const copyright = "CopyrightNotice.txt";
1919
const cleanTasks = [];
2020

2121

22-
// TODO(jakebailey): This is really gross. Waiting on: https://github.com/microsoft/TypeScript/issues/25613
22+
// TODO(jakebailey): This is really gross. Waiting on https://github.com/microsoft/TypeScript/issues/25613,
23+
// or at least control over noEmit / emitDeclarationOnly in build mode.
2324
let currentlyBuilding = 0;
2425
let oldTsconfigBase;
2526

@@ -123,8 +124,7 @@ const localize = async () => {
123124
const preSrc = parallel(generateLibs, series(buildScripts, generateDiagnostics, localize));
124125
const buildSrc = () => buildProject("src");
125126

126-
// TODO(jakebailey): when should we run this? it's nice to have tests run quickly, but we also want to know if the code is broken.
127-
// But, if we are bundling, we are running only d.ts emit, so maybe this is fast?
127+
// TODO(jakebailey): add a variant of this that runs on ./built/local/tsc, with noEmit, for post-test verification.
128128
task("build-src", series(preSrc, buildSrc));
129129

130130
/**
@@ -168,18 +168,16 @@ function esbuildTask(entrypoint, outfile, exportIsTsObject = false, performanceM
168168
bundle: true,
169169
outfile: performanceMatters ? preBabel : outfile,
170170
platform: "node",
171-
// TODO: also specify minimal browser targets
172-
target: "node10", // Node 10 is the oldest benchmarker.
171+
target: "es2018", // This covers Node 10.
173172
format: "cjs",
174173
sourcemap: true,
175-
external: ["./node_modules/*"], // TODO(jakebailey): does the test runner import relatively from scripts?
174+
external: ["./node_modules/*"],
176175
conditions: ["require"],
177176
supported: {
178-
// "const-and-let": false, // Unfortunately, no: https://github.com/evanw/esbuild/issues/297
179-
"object-rest-spread": false, // See: https://github.com/evanw/esbuild/releases/tag/v0.14.46
177+
// "const-and-let": false, // https://github.com/evanw/esbuild/issues/297
178+
"object-rest-spread": false, // Performance enhancement, see: https://github.com/evanw/esbuild/releases/tag/v0.14.46
180179
},
181-
// legalComments: "none", // TODO(jakebailey): enable once we add copyright headers to our source files.
182-
// logLevel: "info",
180+
// legalComments: "none", // If we add copyright headers to the source files, uncomment.
183181
};
184182

185183
if (exportIsTsObject) {
@@ -239,11 +237,12 @@ const lkgPreBuild = parallel(generateLibs, series(buildScripts, generateDiagnost
239237

240238

241239
const esbuildTsc = esbuildTask("./src/tsc/tsc.ts", "./built/local/tsc.js", /* exportIsTsObject */ true, /* performanceMatters */ true);
240+
const writeTscCJSShim = () => writeCJSReexport("./built/local/tsc/tsc.js", "./built/local/tsc.js");
242241

243242

244243
const buildTsc = () => {
245244
if (cmdLineOptions.bundle) return esbuildTsc.build();
246-
writeCJSReexport("./built/local/tsc/tsc.js", "./built/local/tsc.js");
245+
writeTscCJSShim();
247246
return buildProject("src/tsc");
248247
};
249248
task("tsc", series(lkgPreBuild, buildTsc));
@@ -254,8 +253,11 @@ cleanTasks.push(cleanTsc);
254253
task("clean-tsc", cleanTsc);
255254
task("clean-tsc").description = "Cleans outputs for the command-line compiler";
256255

257-
// TODO(jakebailey): watch mode doesn't mix with --bundle=false.
258-
const watchTsc = () => cmdLineOptions.bundle ? esbuildTsc.watch() : watchProject("src/tsc");
256+
const watchTsc = () => {
257+
if (cmdLineOptions.bundle) return esbuildTsc.watch();
258+
writeTscCJSShim();
259+
return watchProject("src/tsc");
260+
};
259261
task("watch-tsc", series(lkgPreBuild, parallel(watchLib, watchDiagnostics, watchTsc)));
260262
task("watch-tsc").description = "Watch for changes and rebuild the command-line compiler only.";
261263

@@ -265,15 +267,15 @@ const localPreBuild = parallel(generateLibs, series(buildScripts, generateDiagno
265267
// Pre-build steps to use based on supplied options.
266268
const preBuild = cmdLineOptions.lkg ? lkgPreBuild : localPreBuild;
267269

268-
const esbuildServices = esbuildTask("./src/typescript/typescript.ts", "./built/local/typescript.js", /* exportIsTsObject */ true, /* performanceMatters */ true);
269-
270270
// TODO(jakebailey): rename this; no longer "services".
271271

272+
const esbuildServices = esbuildTask("./src/typescript/typescript.ts", "./built/local/typescript.js", /* exportIsTsObject */ true, /* performanceMatters */ true);
273+
const writeServicesCJSShim = () => writeCJSReexport("./built/local/typescript/typescript.js", "./built/local/typescript.js");
272274
const buildServicesProject = () => buildProject("src/typescript");
273275

274276
const buildServices = () => {
275277
if (cmdLineOptions.bundle) return esbuildServices.build();
276-
writeCJSReexport("./built/local/typescript/typescript.js", "./built/local/typescript.js");
278+
writeServicesCJSShim();
277279
return buildServicesProject();
278280
};
279281

@@ -289,8 +291,11 @@ cleanTasks.push(cleanServices);
289291
task("clean-services", cleanServices);
290292
task("clean-services").description = "Cleans outputs for the language service";
291293

292-
// TODO(jakebailey): watch mode doesn't mix with --bundle=false.
293-
const watchServices = () => cmdLineOptions.bundle ? esbuildServices.watch() : watchProject("src/typescript");
294+
const watchServices = () => {
295+
if (cmdLineOptions.bundle) return esbuildServices.watch();
296+
writeServicesCJSShim();
297+
return watchProject("src/typescript");
298+
};
294299
task("watch-services", series(preBuild, parallel(watchLib, watchDiagnostics, watchServices)));
295300
task("watch-services").description = "Watches for changes and rebuild language service only";
296301
task("watch-services").flags = {
@@ -302,10 +307,11 @@ task("dts-services", series(preBuild, buildServicesProject, dtsServices));
302307
task("dts-services").description = "Builds typescript.d.ts";
303308

304309
const esbuildServer = esbuildTask("./src/tsserver/server.ts", "./built/local/tsserver.js", /* exportIsTsObject */ true, /* performanceMatters */ true);
310+
const writeServerCJSShim = () => writeCJSReexport("./built/local/tsserver/server.js", "./built/local/tsserver.js");
305311

306312
const buildServer = () => {
307313
if (cmdLineOptions.bundle) return esbuildServer.build();
308-
writeCJSReexport("./built/local/tsserver/server.js", "./built/local/tsserver.js");
314+
writeServerCJSShim();
309315
return buildProject("src/tsserver");
310316
};
311317
buildServer.displayName = "buildServer";
@@ -321,8 +327,11 @@ cleanTasks.push(cleanServer);
321327
task("clean-tsserver", cleanServer);
322328
task("clean-tsserver").description = "Cleans outputs for the language server";
323329

324-
// TODO(jakebailey): watch mode doesn't mix with --bundle=false.
325-
const watchServer = () => cmdLineOptions.bundle ? esbuildServer.watch() : watchProject("src/tsserver");
330+
const watchServer = () => {
331+
if (cmdLineOptions.bundle) return esbuildServer.watch();
332+
writeServerCJSShim();
333+
return watchProject("src/tsserver");
334+
};
326335
task("watch-tsserver", series(preBuild, parallel(watchLib, watchDiagnostics, watchServer)));
327336
task("watch-tsserver").description = "Watch for changes and rebuild the language server only";
328337
task("watch-tsserver").flags = {
@@ -345,11 +354,12 @@ task("watch-min").flags = {
345354
};
346355

347356
const esbuildLssl = esbuildTask("./src/tsserverlibrary/tsserverlibrary.ts", "./built/local/tsserverlibrary.js", /* exportIsTsObject */ true, /* performanceMatters */ true);
357+
const writeLsslCJSShim = () => writeCJSReexport("./built/local/tsserverlibrary/tsserverlibrary.js", "./built/local/tsserverlibrary.js");
348358

349359
const buildLsslProject = () => buildProject("src/tsserverlibrary");
350360
const buildLssl = () => {
351361
if (cmdLineOptions.bundle) return esbuildLssl.build();
352-
writeCJSReexport("./built/local/tsserverlibrary/tsserverlibrary.js", "./built/local/tsserverlibrary.js");
362+
writeLsslCJSShim();
353363
return buildLsslProject();
354364
};
355365
task("lssl", series(preBuild, buildLssl));
@@ -363,9 +373,11 @@ cleanTasks.push(cleanLssl);
363373
task("clean-lssl", cleanLssl);
364374
task("clean-lssl").description = "Clean outputs for the language service server library";
365375

366-
// TODO(jakebailey): watch mode doesn't mix with --bundle=false.
367-
const watchLssl = () => cmdLineOptions.bundle ? esbuildLssl.watch() : watchProject("src/tsserverlibrary");
368-
376+
const watchLssl = () => {
377+
if (cmdLineOptions.bundle) return esbuildLssl.watch();
378+
writeLsslCJSShim();
379+
return watchProject("src/tsserverlibrary");
380+
};
369381
task("watch-lssl", series(preBuild, parallel(watchLib, watchDiagnostics, watchLssl)));
370382
task("watch-lssl").description = "Watch for changes and rebuild tsserverlibrary only";
371383
task("watch-lssl").flags = {
@@ -382,10 +394,11 @@ task("dts", dts);
382394

383395
const testRunner = "./built/local/run.js";
384396
const esbuildTests = esbuildTask("./src/testRunner/_namespaces/Harness.ts", testRunner);
397+
const writeTestsCJSShim = () => writeCJSReexport("./built/local/testRunner/runner.js", testRunner);
385398

386399
const buildTests = () => {
387400
if (cmdLineOptions.bundle) return esbuildTests.build();
388-
writeCJSReexport("./built/local/testRunner/runner.js", testRunner);
401+
writeTestsCJSShim();
389402
return buildProject("src/testRunner");
390403
};
391404
task("tests", series(preBuild, parallel(buildLssl, buildTests)));
@@ -399,8 +412,11 @@ cleanTasks.push(cleanTests);
399412
task("clean-tests", cleanTests);
400413
task("clean-tests").description = "Cleans the outputs for the test infrastructure";
401414

402-
// TODO(jakebailey): watch mode doesn't mix with --bundle=false.
403-
const watchTests = () => cmdLineOptions.bundle ? esbuildTests.watch() : watchProject("src/testRunner");
415+
const watchTests = () => {
416+
if (cmdLineOptions.bundle) return esbuildTests.watch();
417+
writeTestsCJSShim();
418+
return watchProject("src/testRunner");
419+
};
404420

405421
const buildEslintRules = () => buildProject("scripts/eslint");
406422
task("build-eslint-rules", buildEslintRules);
@@ -452,7 +468,6 @@ const esbuildTypingsInstaller = esbuildTask("./src/typingsInstaller/nodeTypingsI
452468

453469
const buildTypingsInstaller = () => {
454470
if (cmdLineOptions.bundle) return esbuildTypingsInstaller.build();
455-
// TODO(jakebailey): In --bundle=false, can we emit to this directly?
456471
writeCJSReexport("./built/typingsInstaller/nodeTypingsInstaller.js", "./built/local/typingsInstaller.js");
457472
return buildProject("src/typingsInstaller");
458473
};
@@ -586,16 +601,19 @@ task("importDefinitelyTypedTests").description = "Runs the importDefinitelyTyped
586601
const cleanBuilt = () => del("built");
587602

588603
const produceLKG = async () => {
589-
// TODO(jakebailey): there are probably more files here that are needed.
604+
if (!cmdLineOptions.bundle) {
605+
throw new Error("LKG cannot be created when --bundle=false");
606+
}
607+
590608
const expectedFiles = [
609+
"built/local/cancellationToken.js",
591610
"built/local/tsc.js",
592611
"built/local/tsserver.js",
593-
"built/local/typescript.js",
594-
"built/local/typescript.d.ts",
595612
"built/local/tsserverlibrary.js",
596613
"built/local/tsserverlibrary.d.ts",
614+
"built/local/typescript.js",
615+
"built/local/typescript.d.ts",
597616
"built/local/typingsInstaller.js",
598-
"built/local/cancellationToken.js",
599617
"built/local/watchGuard.js",
600618
].concat(libs.map(lib => lib.target));
601619
const missingFiles = expectedFiles
@@ -626,8 +644,6 @@ task("generate-spec").description = "Generates a Markdown version of the Languag
626644
task("clean", series(parallel(cleanTasks), cleanBuilt));
627645
task("clean").description = "Cleans build outputs";
628646

629-
// TODO(jakebailey): Figure out what needs to change below.
630-
631647
const configureNightly = () => exec(process.execPath, ["scripts/configurePrerelease.js", "dev", "package.json", "src/compiler/corePublic.ts"]);
632648
task("configure-nightly", series(buildScripts, configureNightly));
633649
task("configure-nightly").description = "Runs scripts/configurePrerelease.ts to prepare a build for nightly publishing";

Diff for: scripts/dtsBundler.ts

-2
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,6 @@ function getDeclarationStatement(node: ts.Declaration): ts.Statement | undefined
6161

6262
const nullTransformationContext: ts.TransformationContext = (ts as any).nullTransformationContext;
6363

64-
// TODO(jakebailey): I can't seem to figure out how to load the real tsconfig, so, this will have to do.
65-
// But, why don't we get trailing commas?
6664
const program = ts.createProgram([entrypoint], { target: ts.ScriptTarget.ES5 });
6765

6866
const typeChecker = program.getTypeChecker();

Diff for: scripts/produceLKG.ts

+7-9
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import * as glob from "glob";
88
const root = path.join(__dirname, "..");
99
const source = path.join(root, "built/local");
1010
const dest = path.join(root, "lib");
11-
const copyright = fs.readFileSync(path.join(__dirname, "../CopyrightNotice.txt"), "utf-8");
1211

1312
async function produceLKG() {
1413
console.log(`Building LKG from ${source} to ${dest}`);
@@ -65,8 +64,6 @@ async function copyTypesMap() {
6564
}
6665

6766
async function copyScriptOutputs() {
68-
// TODO(jakebailey): This does not work when unbundled.
69-
// TODO(jakebailey): Copyright is added by esbuild; maybe we should do it here?
7067
await copyFromBuiltLocal("cancellationToken.js");
7168
await copyFromBuiltLocal("tsc.js");
7269
await copyFromBuiltLocal("tsserver.js");
@@ -77,18 +74,19 @@ async function copyScriptOutputs() {
7774
}
7875

7976
async function copyDeclarationOutputs() {
80-
await copyWithCopyright("tsserverlibrary.d.ts");
81-
await copyWithCopyright("typescript.d.ts");
77+
await copyFromBuiltLocal("tsserverlibrary.d.ts");
78+
await copyFromBuiltLocal("typescript.d.ts");
8279
}
8380

8481
async function writeGitAttributes() {
8582
await fs.writeFile(path.join(dest, ".gitattributes"), `* text eol=lf`, "utf-8");
8683
}
8784

88-
async function copyWithCopyright(fileName: string, destName = fileName) {
89-
const content = await fs.readFile(path.join(source, fileName), "utf-8");
90-
await fs.writeFile(path.join(dest, destName), copyright + "\n" + content);
91-
}
85+
// const copyright = fs.readFileSync(path.join(__dirname, "../CopyrightNotice.txt"), "utf-8");
86+
// async function copyWithCopyright(fileName: string, destName = fileName) {
87+
// const content = await fs.readFile(path.join(source, fileName), "utf-8");
88+
// await fs.writeFile(path.join(dest, destName), copyright + "\n" + content);
89+
// }
9290

9391
async function copyFromBuiltLocal(fileName: string) {
9492
await fs.copy(path.join(source, fileName), path.join(dest, fileName));

0 commit comments

Comments
 (0)