From 349935a4345a1f0eb66d9119d30ba3d546b6b32a Mon Sep 17 00:00:00 2001 From: Paul Gschwendtner Date: Sun, 5 May 2019 12:02:35 +0200 Subject: [PATCH] fix(core): migrations not always migrating all files (#30269) In an Angular CLI project scenario where projects only reference top-level source-files through the `tsconfig` `files` option, we currently do not migrate referenced source-files. This can be fixed checking all referenced source-files which aren't coming from an external library. This is similar to how `tslint` determines project source-files. PR Close #30269 --- packages/core/schematics/migrations/injectable-pipe/index.ts | 5 +++-- packages/core/schematics/migrations/move-document/index.ts | 5 +++-- packages/core/schematics/migrations/static-queries/index.ts | 3 ++- .../schematics/migrations/template-var-assignment/index.ts | 5 +++-- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/packages/core/schematics/migrations/injectable-pipe/index.ts b/packages/core/schematics/migrations/injectable-pipe/index.ts index f1b2b96040..5c4615bd90 100644 --- a/packages/core/schematics/migrations/injectable-pipe/index.ts +++ b/packages/core/schematics/migrations/injectable-pipe/index.ts @@ -53,10 +53,11 @@ function runInjectablePipeMigration(tree: Tree, tsconfigPath: string, basePath: const program = ts.createProgram(parsed.fileNames, parsed.options, host); const typeChecker = program.getTypeChecker(); const visitor = new InjectablePipeVisitor(typeChecker); - const rootSourceFiles = program.getRootFileNames().map(f => program.getSourceFile(f) !); + const sourceFiles = program.getSourceFiles().filter( + f => !f.isDeclarationFile && !program.isSourceFileFromExternalLibrary(f)); const printer = ts.createPrinter(); - rootSourceFiles.forEach(sourceFile => visitor.visitNode(sourceFile)); + sourceFiles.forEach(sourceFile => visitor.visitNode(sourceFile)); visitor.missingInjectablePipes.forEach(data => { const {classDeclaration, importDeclarationMissingImport} = data; diff --git a/packages/core/schematics/migrations/move-document/index.ts b/packages/core/schematics/migrations/move-document/index.ts index 10e5efd046..ffb2a59079 100644 --- a/packages/core/schematics/migrations/move-document/index.ts +++ b/packages/core/schematics/migrations/move-document/index.ts @@ -54,10 +54,11 @@ function runMoveDocumentMigration(tree: Tree, tsconfigPath: string, basePath: st const program = ts.createProgram(parsed.fileNames, parsed.options, host); const typeChecker = program.getTypeChecker(); const visitor = new DocumentImportVisitor(typeChecker); - const rootSourceFiles = program.getRootFileNames().map(f => program.getSourceFile(f) !); + const sourceFiles = program.getSourceFiles().filter( + f => !f.isDeclarationFile && !program.isSourceFileFromExternalLibrary(f)); // Analyze source files by finding imports. - rootSourceFiles.forEach(sourceFile => visitor.visitNode(sourceFile)); + sourceFiles.forEach(sourceFile => visitor.visitNode(sourceFile)); const {importsMap} = visitor; diff --git a/packages/core/schematics/migrations/static-queries/index.ts b/packages/core/schematics/migrations/static-queries/index.ts index f592e56e7c..6ea16c484e 100644 --- a/packages/core/schematics/migrations/static-queries/index.ts +++ b/packages/core/schematics/migrations/static-queries/index.ts @@ -117,7 +117,8 @@ function analyzeProject(tree: Tree, tsconfigPath: string, basePath: string): const program = ts.createProgram(parsed.fileNames, parsed.options, host); const typeChecker = program.getTypeChecker(); - const sourceFiles = program.getRootFileNames().map(f => program.getSourceFile(f) !); + const sourceFiles = program.getSourceFiles().filter( + f => !f.isDeclarationFile && !program.isSourceFileFromExternalLibrary(f)); const queryVisitor = new NgQueryResolveVisitor(typeChecker); // Analyze all project source-files and collect all queries that diff --git a/packages/core/schematics/migrations/template-var-assignment/index.ts b/packages/core/schematics/migrations/template-var-assignment/index.ts index ed27c1f93d..16cbf4b056 100644 --- a/packages/core/schematics/migrations/template-var-assignment/index.ts +++ b/packages/core/schematics/migrations/template-var-assignment/index.ts @@ -60,10 +60,11 @@ function runTemplateVariableAssignmentCheck( const program = ts.createProgram(parsed.fileNames, parsed.options, host); const typeChecker = program.getTypeChecker(); const templateVisitor = new NgComponentTemplateVisitor(typeChecker); - const rootSourceFiles = program.getRootFileNames().map(f => program.getSourceFile(f) !); + const sourceFiles = program.getSourceFiles().filter( + f => !f.isDeclarationFile && !program.isSourceFileFromExternalLibrary(f)); // Analyze source files by detecting HTML templates. - rootSourceFiles.forEach(sourceFile => templateVisitor.visitNode(sourceFile)); + sourceFiles.forEach(sourceFile => templateVisitor.visitNode(sourceFile)); const {resolvedTemplates} = templateVisitor; const collectedFailures: string[] = [];