@@ -4,6 +4,9 @@ import { SourceFile } from 'typescript/lib/typescript';
44import { NgWalker } from './angular/ngWalker' ;
55import { BasicTemplateAstVisitor } from './angular/templates/basicTemplateAstVisitor' ;
66
7+ //current offSet into the template
8+ export let curOffSet = 0 ;
9+
710export class Rule extends Rules . AbstractRule {
811 static readonly metadata : IRuleMetadata = {
912 description : 'Ensures a trackBy function is used.' ,
@@ -18,6 +21,7 @@ export class Rule extends Rules.AbstractRule {
1821 static readonly FAILURE_STRING = 'Missing trackBy function in ngFor directive' ;
1922
2023 apply ( sourceFile : SourceFile ) : RuleFailure [ ] {
24+ curOffSet = 0 ;
2125 return this . applyWithWalker ( new NgWalker ( sourceFile , this . getOptions ( ) , { templateVisitorCtrl : TrackByTemplateVisitor } ) ) ;
2226 }
2327}
@@ -39,9 +43,10 @@ class TrackByFunctionTemplateVisitor extends BasicTemplateAstVisitor {
3943 return ;
4044 }
4145
42- const pattern = / t r a c k B y \s * : | \[ n g F o r T r a c k B y \] \s * = \s * [ ' " ] .* [ ' " ] / ;
46+ const pattern = / \s * n g F o r . * \s * t r a c k B y \s * : | \[ n g F o r T r a c k B y \] \s * = \s * [ ' " ] .* [ ' " ] / ;
4347
44- if ( pattern . test ( context . codeWithMap . source ! ) ) {
48+ if ( pattern . test ( context . codeWithMap . source ! . substr ( curOffSet ) ) ) {
49+ curOffSet = prop . sourceSpan . end . offset ;
4550 return ;
4651 }
4752
@@ -51,6 +56,7 @@ class TrackByFunctionTemplateVisitor extends BasicTemplateAstVisitor {
5156 start : { offset : startOffset }
5257 }
5358 } = prop ;
59+
5460 context . addFailureFromStartToEnd ( startOffset , endOffset , getFailureMessage ( ) ) ;
5561 }
5662}
0 commit comments