@@ -4,6 +4,9 @@ import { SourceFile } from 'typescript/lib/typescript';
4
4
import { NgWalker } from './angular/ngWalker' ;
5
5
import { BasicTemplateAstVisitor } from './angular/templates/basicTemplateAstVisitor' ;
6
6
7
+ //current offSet into the template
8
+ export let curOffSet = 0 ;
9
+
7
10
export class Rule extends Rules . AbstractRule {
8
11
static readonly metadata : IRuleMetadata = {
9
12
description : 'Ensures a trackBy function is used.' ,
@@ -18,6 +21,7 @@ export class Rule extends Rules.AbstractRule {
18
21
static readonly FAILURE_STRING = 'Missing trackBy function in ngFor directive' ;
19
22
20
23
apply ( sourceFile : SourceFile ) : RuleFailure [ ] {
24
+ curOffSet = 0 ;
21
25
return this . applyWithWalker ( new NgWalker ( sourceFile , this . getOptions ( ) , { templateVisitorCtrl : TrackByTemplateVisitor } ) ) ;
22
26
}
23
27
}
@@ -39,9 +43,10 @@ class TrackByFunctionTemplateVisitor extends BasicTemplateAstVisitor {
39
43
return ;
40
44
}
41
45
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 * [ ' " ] .* [ ' " ] / ;
43
47
44
- if ( pattern . test ( context . codeWithMap . source ! ) ) {
48
+ if ( pattern . test ( context . codeWithMap . source ! . substr ( curOffSet ) ) ) {
49
+ curOffSet = prop . sourceSpan . end . offset ;
45
50
return ;
46
51
}
47
52
@@ -51,6 +56,7 @@ class TrackByFunctionTemplateVisitor extends BasicTemplateAstVisitor {
51
56
start : { offset : startOffset }
52
57
}
53
58
} = prop ;
59
+
54
60
context . addFailureFromStartToEnd ( startOffset , endOffset , getFailureMessage ( ) ) ;
55
61
}
56
62
}
0 commit comments