Skip to content

Commit 8496fb1

Browse files
devversionkirjs
authored andcommitted
fix(migrations): incorrect stats when migrating queries with best effort mode (#59463)
We previously did count forcibly ignored queries as incompatible. This resulted in incorrect migration stats that are printed upon migration completion. See: #58657 PR Close #59463
1 parent 86cbaaa commit 8496fb1

File tree

3 files changed

+140
-2
lines changed

3 files changed

+140
-2
lines changed

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import {
2525
ClassFieldDescriptor,
2626
ClassIncompatibilityReason,
2727
FieldIncompatibilityReason,
28+
nonIgnorableFieldIncompatibilities,
2829
} from '../signal-migration/src';
2930
import {checkIncompatiblePatterns} from '../signal-migration/src/passes/problematic_patterns/common_incompatible_patterns';
3031
import {migrateHostBindings} from '../signal-migration/src/passes/reference_migration/migrate_host_bindings';
@@ -617,6 +618,15 @@ export class SignalQueriesMigration extends TsurgeComplexMigration<
617618
continue;
618619
}
619620

621+
// Do not count queries that were forcibly ignored via best effort mode.
622+
if (
623+
this.config.bestEffortMode &&
624+
(info.fieldReason === null ||
625+
!nonIgnorableFieldIncompatibilities.includes(info.fieldReason))
626+
) {
627+
continue;
628+
}
629+
620630
incompatibleQueries++;
621631

622632
if (info.classReason !== null) {

packages/core/schematics/test/queries_migration_spec.ts

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ describe('signal queries migration', () => {
2424
host.sync.write(normalize(filePath), virtualFs.stringToFileBuffer(contents));
2525
}
2626

27-
function runMigration(options?: {path?: string}) {
27+
function runMigration(options?: {bestEffortMode?: boolean}) {
2828
return runner.runSchematic('signal-queries-migration', options, tree);
2929
}
3030

@@ -69,4 +69,68 @@ describe('signal queries migration', () => {
6969
const content = tree.readContent('/index.ts').replace(/\s+/g, ' ');
7070
expect(content).toContain("readonly ref = contentChild.required<ElementRef>('ref');");
7171
});
72+
73+
it('should report correct statistics', async () => {
74+
writeFile(`node_modules/@tsconfig/strictest/tsconfig.json`, `{}`);
75+
writeFile(
76+
`tsconfig.json`,
77+
JSON.stringify({
78+
extends: `@tsconfig/strictest/tsconfig.json`,
79+
}),
80+
);
81+
writeFile(
82+
'/index.ts',
83+
`
84+
import {ContentChild, ElementRef, Directive} from '@angular/core';
85+
86+
@Directive({})
87+
export class SomeDirective {
88+
@ContentChild('ref') ref!: ElementRef;
89+
@ContentChild('ref') ref2: ElementRef|null = null;
90+
91+
someFn() {
92+
this.ref2 = null;
93+
}
94+
}`,
95+
);
96+
97+
const messages: string[] = [];
98+
runner.logger.subscribe((m) => messages.push(m.message));
99+
100+
await runMigration();
101+
102+
expect(messages).toContain(` -> Migrated 1/2 queries.`);
103+
});
104+
105+
it('should report correct statistics with best effort mode', async () => {
106+
writeFile(`node_modules/@tsconfig/strictest/tsconfig.json`, `{}`);
107+
writeFile(
108+
`tsconfig.json`,
109+
JSON.stringify({
110+
extends: `@tsconfig/strictest/tsconfig.json`,
111+
}),
112+
);
113+
writeFile(
114+
'/index.ts',
115+
`
116+
import {ContentChild, ElementRef, Directive} from '@angular/core';
117+
118+
@Directive({})
119+
export class SomeDirective {
120+
@ContentChild('ref') ref!: ElementRef;
121+
@ContentChild('ref') ref2: ElementRef|null = null;
122+
123+
someFn() {
124+
this.ref2 = null;
125+
}
126+
}`,
127+
);
128+
129+
const messages: string[] = [];
130+
runner.logger.subscribe((m) => messages.push(m.message));
131+
132+
await runMigration({bestEffortMode: true});
133+
134+
expect(messages).toContain(` -> Migrated 2/2 queries.`);
135+
});
72136
});

packages/core/schematics/test/signal_input_migration_spec.ts

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ describe('signal input migration', () => {
2424
host.sync.write(normalize(filePath), virtualFs.stringToFileBuffer(contents));
2525
}
2626

27-
function runMigration(options?: {path?: string}) {
27+
function runMigration(options?: {bestEffortMode?: boolean}) {
2828
return runner.runSchematic('signal-input-migration', options, tree);
2929
}
3030

@@ -94,4 +94,68 @@ describe('signal input migration', () => {
9494
const content = tree.readContent('/index.ts').replace(/\s+/g, ' ');
9595
expect(content).toContain('readonly name = input.required<string>()');
9696
});
97+
98+
it('should report correct statistics', async () => {
99+
writeFile(`node_modules/@tsconfig/strictest/tsconfig.json`, `{}`);
100+
writeFile(
101+
`tsconfig.json`,
102+
JSON.stringify({
103+
extends: `@tsconfig/strictest/tsconfig.json`,
104+
}),
105+
);
106+
writeFile(
107+
'/index.ts',
108+
`
109+
import {Input, Directive} from '@angular/core';
110+
111+
@Directive({})
112+
export class SomeDirective {
113+
@Input({required: true}) name = '';
114+
@Input({required: true}) lastName = '';
115+
116+
someFn() {
117+
this.lastName = 'other name';
118+
}
119+
}`,
120+
);
121+
122+
const messages: string[] = [];
123+
runner.logger.subscribe((m) => messages.push(m.message));
124+
125+
await runMigration();
126+
127+
expect(messages).toContain(` -> Migrated 1/2 inputs.`);
128+
});
129+
130+
it('should report correct statistics with best effort mode', async () => {
131+
writeFile(`node_modules/@tsconfig/strictest/tsconfig.json`, `{}`);
132+
writeFile(
133+
`tsconfig.json`,
134+
JSON.stringify({
135+
extends: `@tsconfig/strictest/tsconfig.json`,
136+
}),
137+
);
138+
writeFile(
139+
'/index.ts',
140+
`
141+
import {Input, Directive} from '@angular/core';
142+
143+
@Directive({})
144+
export class SomeDirective {
145+
@Input({required: true}) name = '';
146+
@Input({required: true}) lastName = '';
147+
148+
someFn() {
149+
this.lastName = 'other name';
150+
}
151+
}`,
152+
);
153+
154+
const messages: string[] = [];
155+
runner.logger.subscribe((m) => messages.push(m.message));
156+
157+
await runMigration({bestEffortMode: true});
158+
159+
expect(messages).toContain(` -> Migrated 2/2 inputs.`);
160+
});
97161
});

0 commit comments

Comments
 (0)