39 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			39 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
|  | /** | ||
|  |  * @license | ||
|  |  * Copyright Google LLC All Rights Reserved. | ||
|  |  * | ||
|  |  * Use of this source code is governed by an MIT-style license that can be | ||
|  |  * found in the LICENSE file at https://angular.io/license
 | ||
|  |  */ | ||
|  | 
 | ||
|  | import {Replacement, RuleFailure, Rules} from 'tslint'; | ||
|  | import * as ts from 'typescript'; | ||
|  | import {findLiteralsToMigrate, migrateLiteral} from '../../migrations/navigation-extras-omissions/util'; | ||
|  | 
 | ||
|  | 
 | ||
|  | /** TSLint rule that migrates `navigateByUrl` and `createUrlTree` calls to an updated signature. */ | ||
|  | export class Rule extends Rules.TypedRule { | ||
|  |   applyWithProgram(sourceFile: ts.SourceFile, program: ts.Program): RuleFailure[] { | ||
|  |     const failures: RuleFailure[] = []; | ||
|  |     const typeChecker = program.getTypeChecker(); | ||
|  |     const printer = ts.createPrinter(); | ||
|  |     const literalsToMigrate = findLiteralsToMigrate(sourceFile, typeChecker); | ||
|  | 
 | ||
|  |     literalsToMigrate.forEach((instances, methodName) => instances.forEach(instance => { | ||
|  |       const migratedNode = migrateLiteral(methodName, instance); | ||
|  | 
 | ||
|  |       if (migratedNode !== instance) { | ||
|  |         failures.push(new RuleFailure( | ||
|  |             sourceFile, instance.getStart(), instance.getEnd(), | ||
|  |             'Object used in navigateByUrl or createUrlTree call contains unsupported properties.', | ||
|  |             this.ruleName, | ||
|  |             new Replacement( | ||
|  |                 instance.getStart(), instance.getWidth(), | ||
|  |                 printer.printNode(ts.EmitHint.Unspecified, migratedNode, sourceFile)))); | ||
|  |       } | ||
|  |     })); | ||
|  | 
 | ||
|  |     return failures; | ||
|  |   } | ||
|  | } |