Skip to content

Commit 6b57fcd

Browse files
committed
refactor(migrations): track statistics of signal input migration (angular#58019)
Track statistics of signal input migration. This allows us to see progress the migration made. PR Close angular#58019
1 parent 9f08ff2 commit 6b57fcd

File tree

3 files changed

+62
-3
lines changed

3 files changed

+62
-3
lines changed

packages/core/schematics/migrations/output-migration/output-migration.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import ts from 'typescript';
1010
import {
1111
confirmAsSerializable,
12+
MigrationStats,
1213
ProgramInfo,
1314
projectFile,
1415
ProjectFile,
@@ -208,6 +209,11 @@ export class OutputMigration extends TsurgeFunnelMigration<
208209
});
209210
}
210211

212+
override async stats(globalMetadata: CompilationUnitData): Promise<MigrationStats> {
213+
// TODO: Add statistics.
214+
return {counters: {}};
215+
}
216+
211217
override async migrate(globalData: CompilationUnitData): Promise<Replacement[]> {
212218
const migratedFiles = new Set<ProjectFileID>();
213219
const problematicFiles = new Set<ProjectFileID>();

packages/core/schematics/migrations/signal-migration/src/migration.ts

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,18 @@ import {getCompilationUnitMetadata} from './batch/extract';
2121
import {mergeCompilationUnitData} from './batch/merge_unit_data';
2222
import {Replacement} from '../../../utils/tsurge/replacement';
2323
import {populateKnownInputsFromGlobalData} from './batch/populate_global_data';
24-
import {InheritanceGraph} from './utils/inheritance_graph';
2524
import {executeMigrationPhase} from './phase_migrate';
2625
import {filterIncompatibilitiesForBestEffortMode} from './best_effort_mode';
27-
import {createNgtscProgram} from '../../../utils/tsurge/helpers/ngtsc_program';
2826
import assert from 'assert';
29-
import {InputIncompatibilityReason} from './input_detection/incompatibility';
27+
import {
28+
ClassIncompatibilityReason,
29+
InputIncompatibilityReason,
30+
} from './input_detection/incompatibility';
3031
import {isInputDescriptor} from './utils/input_id';
3132
import {MigrationConfig} from './migration_config';
3233
import {ClassFieldUniqueKey} from './passes/reference_resolution/known_fields';
34+
import {MigrationStats} from '../../../utils/tsurge';
35+
import {createNgtscProgram} from '../../../utils/tsurge/helpers/ngtsc_program';
3336

3437
/**
3538
* Tsurge migration for migrating Angular `@Input()` declarations to
@@ -176,6 +179,50 @@ export class SignalInputMigration extends TsurgeComplexMigration<
176179

177180
return result.replacements;
178181
}
182+
183+
override async stats(globalMetadata: CompilationUnitData): Promise<MigrationStats> {
184+
let fullCompilationInputs = 0;
185+
let sourceInputs = 0;
186+
let incompatibleInputs = 0;
187+
const fieldIncompatibleCounts: Partial<
188+
Record<`input-field-incompatibility-${string}`, number>
189+
> = {};
190+
const classIncompatibleCounts: Partial<
191+
Record<`input-owning-class-incompatibility-${string}`, number>
192+
> = {};
193+
194+
for (const [id, input] of Object.entries(globalMetadata.knownInputs)) {
195+
fullCompilationInputs++;
196+
if (input.seenAsSourceInput) {
197+
sourceInputs++;
198+
}
199+
if (input.memberIncompatibility !== null || input.owningClassIncompatibility !== null) {
200+
incompatibleInputs++;
201+
}
202+
if (input.memberIncompatibility !== null) {
203+
const reasonName = InputIncompatibilityReason[input.memberIncompatibility];
204+
const key = `input-field-incompatibility-${reasonName}` as const;
205+
fieldIncompatibleCounts[key] ??= 0;
206+
fieldIncompatibleCounts[key]++;
207+
}
208+
if (input.owningClassIncompatibility !== null) {
209+
const reasonName = ClassIncompatibilityReason[input.owningClassIncompatibility];
210+
const key = `input-owning-class-incompatibility-${reasonName}` as const;
211+
classIncompatibleCounts[key] ??= 0;
212+
classIncompatibleCounts[key]++;
213+
}
214+
}
215+
216+
return {
217+
counters: {
218+
fullCompilationInputs,
219+
sourceInputs,
220+
incompatibleInputs,
221+
...fieldIncompatibleCounts,
222+
...classIncompatibleCounts,
223+
},
224+
};
225+
}
179226
}
180227

181228
/**

packages/core/schematics/migrations/signal-queries-migration/migration.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import assert from 'assert';
1313
import ts from 'typescript';
1414
import {
1515
confirmAsSerializable,
16+
MigrationStats,
1617
ProgramInfo,
1718
Replacement,
1819
Serializable,
@@ -344,6 +345,11 @@ export class SignalQueriesMigration extends TsurgeComplexMigration<
344345

345346
return replacements;
346347
}
348+
349+
override async stats(globalMetadata: GlobalUnitData): Promise<MigrationStats> {
350+
// TODO: Add statistics.
351+
return {counters: {}};
352+
}
347353
}
348354

349355
/**

0 commit comments

Comments
 (0)