Skip to content

Commit a2b6bf8

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

File tree

4 files changed

+160
-0
lines changed

4 files changed

+160
-0
lines changed

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: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# ember/template-deprecated-render-helper
2+
3+
<!-- end auto-generated rule header -->
4+
5+
> **HBS Only**: This rule applies to classic `.hbs` template files only (loose mode). It is not relevant for `gjs`/`gts` files (strict mode), where these patterns cannot occur.
6+
7+
Disallows the {{render}} helper which is deprecated.
8+
9+
## Examples
10+
11+
Incorrect:
12+
13+
```hbs
14+
{{render 'user'}}
15+
```
16+
17+
Correct:
18+
19+
```hbs
20+
<User />
21+
```
22+
23+
## References
24+
25+
- [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: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
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+
templateMode: 'loose',
10+
},
11+
fixable: null,
12+
schema: [],
13+
messages: {
14+
deprecated:
15+
'The render helper is deprecated in favor of using components. See https://emberjs.com/deprecations/v2.x/#toc_code-render-code-helper',
16+
},
17+
originallyFrom: {
18+
name: 'ember-template-lint',
19+
rule: 'lib/rules/deprecated-render-helper.js',
20+
docs: 'docs/rule/deprecated-render-helper.md',
21+
tests: 'test/unit/rules/deprecated-render-helper-test.js',
22+
},
23+
},
24+
25+
create(context) {
26+
function checkForRender(node) {
27+
if (
28+
node.path &&
29+
node.path.type === 'GlimmerPathExpression' &&
30+
node.path.original === 'render'
31+
) {
32+
context.report({
33+
node,
34+
messageId: 'deprecated',
35+
});
36+
}
37+
}
38+
39+
return {
40+
GlimmerMustacheStatement(node) {
41+
checkForRender(node);
42+
},
43+
44+
GlimmerBlockStatement(node) {
45+
checkForRender(node);
46+
},
47+
};
48+
},
49+
};
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)