@@ -3,137 +3,64 @@ const rule = require('../../../lib/rules/template-no-unused-block-params');
33
44const { RuleTester } = eslint ;
55
6- const ruleTester = new RuleTester ( {
7- parser : require . resolve ( 'ember-eslint-parser' ) ,
8- parserOptions : { ecmaVersion : 2022 , sourceType : 'module' } ,
9- } ) ;
10-
11- ruleTester . run ( 'template-no-unused-block-params' , rule , {
12- valid : [
13- // All params used
14- '<template>{{#each items as |item|}}{{item.name}}{{/each}}</template>' ,
15- '<template>{{#each items as |item index|}}{{index}}: {{item}}{{/each}}</template>' ,
16-
17- // No block params
18- '<template>{{#each items}}{{this}}{{/each}}</template>' ,
19-
20- // Param used in nested path
21- '<template>{{#let user as |u|}}{{u.name}}{{/let}}</template>' ,
22-
23- '<template>{{cat}}</template>' ,
24- '<template>{{#each cats as |cat|}}{{cat}}{{/each}}</template>' ,
25- '<template>{{#each cats as |cat|}}{{partial "cat"}}{{/each}}</template>' ,
26- '<template>{{#each cats as |cat|}}{{cat.name}}{{/each}}</template>' ,
27- '<template>{{#each cats as |cat|}}{{meow cat}}{{/each}}</template>' ,
28- '<template>{{#each cats as |cat index|}}{{index}}{{/each}}</template>' ,
29- '<template>{{#each cats as |cat index|}}{{#each cat.lives as |life|}}{{index}}: {{life}}{{/each}}{{/each}}</template>' ,
30- '<template>{{#each cats as |cat|}}{{#meow-meow cat as |cat|}}{{cat}}{{/meow-meow}}{{/each}}</template>' ,
31- '<template>{{#with (component "foo-bar") as |FooBar|}}<FooBar />{{/with}}</template>' ,
32- '<template><BurgerMenu as |menu|><header>Something</header><menu.item>Text</menu.item></BurgerMenu></template>' ,
33- '<template>{{#burger-menu as |menu|}}<header>Something</header>{{#menu.item}}Text{{/menu.item}}{{/burger-menu}}</template>' ,
34- ] ,
35- invalid : [
36- {
37- code : '<template>{{#each items as |item|}}Hello{{/each}}</template>' ,
38- output : null ,
39- errors : [ { messageId : 'unusedBlockParam' , data : { param : 'item' } } ] ,
40- } ,
41- {
42- code : '<template>{{#each items as |item index|}}{{item}}{{/each}}</template>' ,
43- output : null ,
44- errors : [ { messageId : 'unusedBlockParam' , data : { param : 'index' } } ] ,
45- } ,
46- {
47- code : '<template>{{#let value as |v|}}Something{{/let}}</template>' ,
48- output : null ,
49- errors : [ { messageId : 'unusedBlockParam' , data : { param : 'v' } } ] ,
50- } ,
51-
52- {
53- code : '<template>{{#each cats as |cat|}}Dogs{{/each}}</template>' ,
54- output : null ,
55- errors : [ { messageId : 'unusedBlockParam' } ] ,
56- } ,
57- {
58- code : '<template>{{#each cats as |cat index|}}{{cat}}{{/each}}</template>' ,
59- output : null ,
60- errors : [ { messageId : 'unusedBlockParam' } ] ,
61- } ,
62- {
63- code : '<template>{{#each cats as |cat index|}}{{/each}}</template>' ,
64- output : null ,
65- errors : [ { messageId : 'unusedBlockParam' } ] ,
66- } ,
67- ] ,
68- } ) ;
69-
70- const hbsRuleTester = new RuleTester ( {
71- parser : require . resolve ( 'ember-eslint-parser/hbs' ) ,
72- parserOptions : {
73- ecmaVersion : 2022 ,
74- sourceType : 'module' ,
75- } ,
76- } ) ;
77-
78- hbsRuleTester . run ( 'template-no-unused-block-params' , rule , {
79- valid : [
80- '{{cat}}' ,
81- '{{#each cats as |cat|}}{{cat}}{{/each}}' ,
82- '{{#each cats as |cat|}}{{partial "cat"}}{{/each}}' ,
83- '{{#each cats as |cat|}}{{cat.name}}{{/each}}' ,
84- '{{#each cats as |cat|}}{{meow cat}}{{/each}}' ,
85- '{{#each cats as |cat index|}}{{index}}{{/each}}' ,
86- '{{#each cats as |cat index|}}{{#each cat.lives as |life|}}{{index}}: {{life}}{{/each}}{{/each}}' ,
87- `
6+ const validHbs = [
7+ '{{cat}}' ,
8+ '{{#each cats as |cat|}}{{cat}}{{/each}}' ,
9+ '{{#each cats as |cat|}}{{partial "cat"}}{{/each}}' ,
10+ '{{#each cats as |cat|}}{{cat.name}}{{/each}}' ,
11+ '{{#each cats as |cat|}}{{meow cat}}{{/each}}' ,
12+ '{{#each cats as |cat index|}}{{index}}{{/each}}' ,
13+ '{{#each cats as |cat index|}}{{#each cat.lives as |life|}}{{index}}: {{life}}{{/each}}{{/each}}' ,
14+ `
8815 <MyComponent @model={{this.model}} as |param|>
8916 {{! template-lint-disable }}
9017 <MyOtherComponent .... @param={{param}} />
9118 {{! template-lint-enable }}
9219 </MyComponent>
9320 ` ,
94- `
21+ `
9522 <MyComponent @model={{this.model}} as |param|>
9623 {{! template-lint-disable }}
9724 {{foo-bar param}}
9825 {{! template-lint-enable }}
9926 </MyComponent>
10027 ` ,
101- `
28+ `
10229 <MyComponent @model={{this.model}} as |param|>
10330 {{! template-lint-disable }}
10431 {{param}}
10532 {{! template-lint-enable }}
10633 </MyComponent>
10734 ` ,
108- `
35+ `
10936 <MyComponent @model={{this.model}} as |param|>
11037 {{! template-lint-disable }}
11138 {{foo-bar prop=param}}
11239 {{! template-lint-enable }}
11340 </MyComponent>
11441 ` ,
115- `
42+ `
11643 {{#my-component as |param|}}
11744 {{! template-lint-disable }}
11845 <MyOtherComponent .... @param={{param}} />
11946 {{! template-lint-enable }}
12047 {{/my-component}}
12148 ` ,
122- `
49+ `
12350 {{#my-component as |param|}}
12451 {{! template-lint-disable }}
12552 {{foo-bar param}}
12653 {{! template-lint-enable }}
12754 {{/my-component}}
12855 ` ,
129- `
56+ `
13057 {{#my-component as |param|}}
13158 {{! template-lint-disable }}
13259 {{param}}
13360 {{! template-lint-enable }}
13461 {{/my-component}}
13562 ` ,
136- `
63+ `
13764 {{#my-component as |param bar baz|}}
13865 {{! template-lint-disable }}
13966 {{foo-bar prop=param}}
@@ -144,33 +71,66 @@ hbsRuleTester.run('template-no-unused-block-params', rule, {
14471 {{! template-lint-enable }}
14572 {{/my-component}}
14673 ` ,
147- '{{#each cats as |cat|}}{{#meow-meow cat as |cat|}}{{cat}}{{/meow-meow}}{{/each}}' ,
148- '{{#with (component "foo-bar") as |FooBar|}}<FooBar />{{/with}}' ,
149- '<BurgerMenu as |menu|><header>Something</header><menu.item>Text</menu.item></BurgerMenu>' ,
150- '{{#burger-menu as |menu|}}<header>Something</header>{{#menu.item}}Text{{/menu.item}}{{/burger-menu}}' ,
151- ] ,
152- invalid : [
153- {
154- code : '{{#each cats as |cat|}}Dogs{{/each}}' ,
155- output : null ,
156- errors : [ { message : 'Block param "cat" is unused' } ] ,
157- } ,
158- {
159- code : '{{#each cats as |cat index|}}{{cat}}{{/each}}' ,
160- output : null ,
161- errors : [ { message : 'Block param "index" is unused' } ] ,
162- } ,
163- {
164- // Outer `index` is shadowed by inner `index`, so outer `index` is unused
165- code : '{{#each cats as |cat index|}}{{#each cat.lives as |life index|}}{{index}}: {{life}}{{/each}}{{/each}}' ,
166- output : null ,
167- errors : [ { message : 'Block param "index" is unused' } ] ,
168- } ,
169- {
170- // `partial` marks outer params as used, but inner `life` is unused
171- code : '{{#each cats as |cat index|}}{{partial "cat"}}{{#each cat.lives as |life|}}Life{{/each}}{{/each}}' ,
172- output : null ,
173- errors : [ { message : 'Block param "life" is unused' } ] ,
174- } ,
175- ] ,
74+ '{{#each cats as |cat|}}{{#meow-meow cat as |cat|}}{{cat}}{{/meow-meow}}{{/each}}' ,
75+ '{{#with (component "foo-bar") as |FooBar|}}<FooBar />{{/with}}' ,
76+ '<BurgerMenu as |menu|><header>Something</header><menu.item>Text</menu.item></BurgerMenu>' ,
77+ '{{#burger-menu as |menu|}}<header>Something</header>{{#menu.item}}Text{{/menu.item}}{{/burger-menu}}' ,
78+ ] ;
79+
80+ const invalidHbs = [
81+ {
82+ code : '{{#each cats as |cat|}}Dogs{{/each}}' ,
83+ output : null ,
84+ errors : [ { messageId : 'unusedBlockParam' , data : { param : 'cat' } } ] ,
85+ } ,
86+ {
87+ code : '{{#each cats as |cat index|}}{{cat}}{{/each}}' ,
88+ output : null ,
89+ errors : [ { messageId : 'unusedBlockParam' , data : { param : 'index' } } ] ,
90+ } ,
91+ {
92+ code : '{{#each cats as |cat index|}}{{#each cat.lives as |life index|}}{{index}}: {{life}}{{/each}}{{/each}}' ,
93+ output : null ,
94+ errors : [ { messageId : 'unusedBlockParam' , data : { param : 'index' } } ] ,
95+ } ,
96+ {
97+ code : '{{#each cats as |cat index|}}{{partial "cat"}}{{#each cat.lives as |life|}}Life{{/each}}{{/each}}' ,
98+ output : null ,
99+ errors : [ { messageId : 'unusedBlockParam' , data : { param : 'life' } } ] ,
100+ } ,
101+ ] ;
102+
103+ function wrapTemplate ( entry ) {
104+ if ( typeof entry === 'string' ) {
105+ return `<template>${ entry } </template>` ;
106+ }
107+
108+ return {
109+ ...entry ,
110+ code : `<template>${ entry . code } </template>` ,
111+ output : entry . output ? `<template>${ entry . output } </template>` : entry . output ,
112+ } ;
113+ }
114+
115+ const gjsRuleTester = new RuleTester ( {
116+ parser : require . resolve ( 'ember-eslint-parser' ) ,
117+ parserOptions : { ecmaVersion : 2022 , sourceType : 'module' } ,
118+ } ) ;
119+
120+ gjsRuleTester . run ( 'template-no-unused-block-params' , rule , {
121+ valid : validHbs . map ( wrapTemplate ) ,
122+ invalid : invalidHbs . map ( wrapTemplate ) ,
123+ } ) ;
124+
125+ const hbsRuleTester = new RuleTester ( {
126+ parser : require . resolve ( 'ember-eslint-parser/hbs' ) ,
127+ parserOptions : {
128+ ecmaVersion : 2022 ,
129+ sourceType : 'module' ,
130+ } ,
131+ } ) ;
132+
133+ hbsRuleTester . run ( 'template-no-unused-block-params' , rule , {
134+ valid : validHbs ,
135+ invalid : invalidHbs ,
176136} ) ;
0 commit comments