From c3bfe9e1197672b7acc546e225ee1d4d7ce8cdaf Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 9 Mar 2026 20:04:56 +0000 Subject: [PATCH 1/3] Use optional chaining for getMemoryUsage in GcTimer Replace unsafe non-null assertions (!) with optional chaining (?.) on the optional getMemoryUsage method in GcTimer.run. Unlike gc which is guarded in scheduleCollect, getMemoryUsage had no guard and could throw at runtime if unavailable. https://claude.ai/code/session_01As1r4ZnGpdzw4gMYehgwe7 --- src/server/utilities.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/utilities.ts b/src/server/utilities.ts index 5466d4c448d28..25e8a823d85c6 100644 --- a/src/server/utilities.ts +++ b/src/server/utilities.ts @@ -67,11 +67,11 @@ export class GcTimer { self.timerId = undefined; const log = self.logger.hasLevel(LogLevel.requestTime); - const before = log && self.host.getMemoryUsage!(); // TODO: GH#18217 + const before = log && self.host.getMemoryUsage?.(); self.host.gc!(); // TODO: GH#18217 if (log) { - const after = self.host.getMemoryUsage!(); // TODO: GH#18217 + const after = self.host.getMemoryUsage?.(); self.logger.perftrc(`GC::before ${before}, after ${after}`); } } From b949efaf5f2989246b2093e4059953ca2cba4c16 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 9 Mar 2026 20:06:41 +0000 Subject: [PATCH 2/3] Revert getMemoryUsage optional chaining change https://claude.ai/code/session_01As1r4ZnGpdzw4gMYehgwe7 --- src/server/utilities.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/utilities.ts b/src/server/utilities.ts index 25e8a823d85c6..5466d4c448d28 100644 --- a/src/server/utilities.ts +++ b/src/server/utilities.ts @@ -67,11 +67,11 @@ export class GcTimer { self.timerId = undefined; const log = self.logger.hasLevel(LogLevel.requestTime); - const before = log && self.host.getMemoryUsage?.(); + const before = log && self.host.getMemoryUsage!(); // TODO: GH#18217 self.host.gc!(); // TODO: GH#18217 if (log) { - const after = self.host.getMemoryUsage?.(); + const after = self.host.getMemoryUsage!(); // TODO: GH#18217 self.logger.perftrc(`GC::before ${before}, after ${after}`); } } From f7339cdc777ab2bbf9a37075cc20b335819849eb Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 9 Mar 2026 20:09:17 +0000 Subject: [PATCH 3/3] Replace indexOf checks with includes() for readability Modernize membership checks from `indexOf(...) === -1` and `indexOf(...) >= 0` to use `includes()` in moduleSpecifiers.ts and importFixes.ts. https://claude.ai/code/session_01As1r4ZnGpdzw4gMYehgwe7 --- src/compiler/moduleSpecifiers.ts | 2 +- src/services/codefixes/importFixes.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/compiler/moduleSpecifiers.ts b/src/compiler/moduleSpecifiers.ts index 8860677e6cab1..6f786e1d9ff36 100644 --- a/src/compiler/moduleSpecifiers.ts +++ b/src/compiler/moduleSpecifiers.ts @@ -1107,7 +1107,7 @@ function tryGetModuleNameFromExportsOrImports( else if (typeof exports === "object" && exports !== null) { // eslint-disable-line no-restricted-syntax // conditional mapping for (const key of getOwnKeys(exports as MapLike)) { - if (key === "default" || conditions.indexOf(key) >= 0 || isApplicableVersionedTypesKey(conditions, key)) { + if (key === "default" || conditions.includes(key) || isApplicableVersionedTypesKey(conditions, key)) { const subTarget = (exports as MapLike)[key]; const result = tryGetModuleNameFromExportsOrImports(options, host, targetFilePath, packageDirectory, packageName, subTarget, conditions, mode, isImports, preferTsExtension); if (result) { diff --git a/src/services/codefixes/importFixes.ts b/src/services/codefixes/importFixes.ts index 6034c9dfc3de1..c68ea866cdf75 100644 --- a/src/services/codefixes/importFixes.ts +++ b/src/services/codefixes/importFixes.ts @@ -607,7 +607,7 @@ function createImportAdderWorker(sourceFile: SourceFile | FutureSourceFile, prog // has named bindings d.importClause?.namedBindings && // is not being fully removed - emptyImportDeclarations.indexOf(d) === -1 && + !emptyImportDeclarations.includes(d) && // is not gaining named imports !addToExisting.get(d.importClause)?.namedImports && // all named imports are being removed @@ -632,8 +632,8 @@ function createImportAdderWorker(sourceFile: SourceFile | FutureSourceFile, prog const importDeclaration = findAncestor(declaration, isImportDeclaration); if ( importDeclaration && - emptyImportDeclarations.indexOf(importDeclaration) === -1 && - namedBindingsToDelete.indexOf(importDeclaration) === -1 + !emptyImportDeclarations.includes(importDeclaration) && + !namedBindingsToDelete.includes(importDeclaration) ) { if (declaration.kind === SyntaxKind.ImportClause) { changeTracker.delete(sourceFile, declaration.name!);