Skip to content

Commit 8fdaeb9

Browse files
committed
Extract rule: template-deprecated-render-helper
1 parent a15aa2a commit 8fdaeb9

4 files changed

Lines changed: 157 additions & 0 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,7 @@ rules in templates can be disabled with eslint directives with mustache or html
264264
| [no-observers](docs/rules/no-observers.md) | disallow usage of observers || | |
265265
| [no-old-shims](docs/rules/no-old-shims.md) | disallow usage of old shims for modules || 🔧 | |
266266
| [no-string-prototype-extensions](docs/rules/no-string-prototype-extensions.md) | disallow usage of `String` prototype extensions || | |
267+
| [template-deprecated-render-helper](docs/rules/template-deprecated-render-helper.md) | disallow {{render}} helper | | | |
267268
| [template-no-action](docs/rules/template-no-action.md) | disallow {{action}} helper | | | |
268269
| [template-no-attrs-in-components](docs/rules/template-no-attrs-in-components.md) | disallow attrs in component templates | | | |
269270

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# ember/template-deprecated-render-helper
2+
3+
<!-- end auto-generated rule header -->
4+
5+
Disallows the {{render}} helper which is deprecated.
6+
7+
## Examples
8+
9+
Incorrect:
10+
11+
```gjs
12+
<template>{{render "user"}}</template>
13+
```
14+
15+
Correct:
16+
17+
```gjs
18+
<template><User /></template>
19+
```
20+
21+
## References
22+
23+
- [eslint-plugin-ember template-deprecated-render-helper](https://github.com/ember-cli/eslint-plugin-ember/blob/master/docs/rules/template-deprecated-render-helper.md)
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/** @type {import('eslint').Rule.RuleModule} */
2+
module.exports = {
3+
meta: {
4+
type: 'suggestion',
5+
docs: {
6+
description: 'disallow {{render}} helper',
7+
category: 'Deprecations',
8+
url: 'https://github.com/ember-cli/eslint-plugin-ember/tree/master/docs/rules/template-deprecated-render-helper.md',
9+
},
10+
fixable: null,
11+
schema: [],
12+
messages: {
13+
deprecated:
14+
'The render helper is deprecated in favor of using components. See https://emberjs.com/deprecations/v2.x/#toc_code-render-code-helper',
15+
},
16+
originallyFrom: {
17+
name: 'ember-template-lint',
18+
rule: 'lib/rules/deprecated-render-helper.js',
19+
docs: 'docs/rule/deprecated-render-helper.md',
20+
tests: 'test/unit/rules/deprecated-render-helper-test.js',
21+
},
22+
},
23+
24+
create(context) {
25+
function checkForRender(node) {
26+
if (
27+
node.path &&
28+
node.path.type === 'GlimmerPathExpression' &&
29+
node.path.original === 'render'
30+
) {
31+
context.report({
32+
node,
33+
messageId: 'deprecated',
34+
});
35+
}
36+
}
37+
38+
return {
39+
GlimmerMustacheStatement(node) {
40+
checkForRender(node);
41+
},
42+
43+
GlimmerBlockStatement(node) {
44+
checkForRender(node);
45+
},
46+
};
47+
},
48+
};
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
const rule = require('../../../lib/rules/template-deprecated-render-helper');
2+
const RuleTester = require('eslint').RuleTester;
3+
4+
const ruleTester = new RuleTester({
5+
parser: require.resolve('ember-eslint-parser'),
6+
parserOptions: { ecmaVersion: 2022, sourceType: 'module' },
7+
});
8+
9+
ruleTester.run('template-deprecated-render-helper', rule, {
10+
valid: [
11+
'<template><MyComponent /></template>',
12+
'<template>{{this.render}}</template>',
13+
'<template>{{valid-compoennt}}</template>',
14+
'<template>{{input placeholder=(t "email") value=email}}</template>',
15+
'<template>{{title "CrossCheck Web" prepent=true separator=" | "}}</template>',
16+
'<template>{{hockey-player teamName="Boston Bruins"}}</template>',
17+
'<template>{{false}}</template>',
18+
'<template>{{"foo"}}</template>',
19+
'<template>{{42}}</template>',
20+
'<template>{{null}}</template>',
21+
'<template>{{undefined}}</template>',
22+
],
23+
invalid: [
24+
{
25+
code: '<template>{{render "user"}}</template>',
26+
output: null,
27+
errors: [{ messageId: 'deprecated' }],
28+
},
29+
30+
{
31+
code: "<template>{{render 'ken-griffey'}}</template>",
32+
output: null,
33+
errors: [{ messageId: 'deprecated' }],
34+
},
35+
{
36+
code: "<template>{{render 'baseball-player' pitcher}}</template>",
37+
output: null,
38+
errors: [{ messageId: 'deprecated' }],
39+
},
40+
],
41+
});
42+
43+
const hbsRuleTester = new RuleTester({
44+
parser: require.resolve('ember-eslint-parser/hbs'),
45+
parserOptions: {
46+
ecmaVersion: 2022,
47+
sourceType: 'module',
48+
},
49+
});
50+
51+
hbsRuleTester.run('template-deprecated-render-helper', rule, {
52+
valid: [
53+
'{{valid-compoennt}}',
54+
'{{input placeholder=(t "email") value=email}}',
55+
'{{title "CrossCheck Web" prepent=true separator=" | "}}',
56+
'{{hockey-player teamName="Boston Bruins"}}',
57+
'{{false}}',
58+
'{{"foo"}}',
59+
'{{42}}',
60+
'{{null}}',
61+
'{{undefined}}',
62+
],
63+
invalid: [
64+
{
65+
code: "{{render 'ken-griffey'}}",
66+
output: null,
67+
errors: [
68+
{
69+
message:
70+
'The render helper is deprecated in favor of using components. See https://emberjs.com/deprecations/v2.x/#toc_code-render-code-helper',
71+
},
72+
],
73+
},
74+
{
75+
code: "{{render 'baseball-player' pitcher}}",
76+
output: null,
77+
errors: [
78+
{
79+
message:
80+
'The render helper is deprecated in favor of using components. See https://emberjs.com/deprecations/v2.x/#toc_code-render-code-helper',
81+
},
82+
],
83+
},
84+
],
85+
});

0 commit comments

Comments
 (0)