File tree Expand file tree Collapse file tree 2 files changed +45
-1
lines changed
ng-generate/inject-migration Expand file tree Collapse file tree 2 files changed +45
-1
lines changed Original file line number Diff line number Diff line change @@ -259,7 +259,15 @@ function migrateClass(
259259
260260 if ( prependToClass . length > 0 ) {
261261 if ( removedMembers . size === node . members . length ) {
262- tracker . insertText ( sourceFile , constructor . getEnd ( ) + 1 , `${ prependToClass . join ( '\n' ) } \n` ) ;
262+ tracker . insertText (
263+ sourceFile ,
264+ // If all members were deleted, insert after the last one.
265+ // This allows us to preserve the indentation.
266+ node . members . length > 0
267+ ? node . members [ node . members . length - 1 ] . getEnd ( ) + 1
268+ : node . getEnd ( ) - 1 ,
269+ `${ prependToClass . join ( '\n' ) } \n` ,
270+ ) ;
263271 } else {
264272 // Insert the new properties after the first member that hasn't been deleted.
265273 tracker . insertText (
Original file line number Diff line number Diff line change @@ -2387,5 +2387,41 @@ describe('inject migration', () => {
23872387 `}` ,
23882388 ] ) ;
23892389 } ) ;
2390+
2391+ it ( 'should handle properties being migrated both before and after the constructor' , async ( ) => {
2392+ writeFile (
2393+ '/dir.ts' ,
2394+ [
2395+ `import { Directive } from '@angular/core';` ,
2396+ `import { Foo } from 'foo';` ,
2397+ `` ,
2398+ `@Directive()` ,
2399+ `class MyDir {` ,
2400+ ` private beforeConstructor: number;` ,
2401+ `` ,
2402+ ` constructor(private foo: Foo) {` ,
2403+ ` this.beforeConstructor = this.foo.getValue();` ,
2404+ ` this.afterConstructor = this.beforeConstructor + 1;` ,
2405+ ` }` ,
2406+ `` ,
2407+ ` private afterConstructor: number;` ,
2408+ `}` ,
2409+ ] . join ( '\n' ) ,
2410+ ) ;
2411+
2412+ await runInternalMigration ( ) ;
2413+
2414+ expect ( tree . readContent ( '/dir.ts' ) . split ( '\n' ) ) . toEqual ( [
2415+ `import { Directive, inject } from '@angular/core';` ,
2416+ `import { Foo } from 'foo';` ,
2417+ `` ,
2418+ `@Directive()` ,
2419+ `class MyDir {` ,
2420+ ` private foo = inject(Foo);` ,
2421+ ` private beforeConstructor: number = this.foo.getValue();` ,
2422+ ` private afterConstructor: number = this.beforeConstructor + 1;` ,
2423+ `}` ,
2424+ ] ) ;
2425+ } ) ;
23902426 } ) ;
23912427} ) ;
You can’t perform that action at this time.
0 commit comments