Skip to content

Commit 0c1291d

Browse files
Changes before error encountered
Co-authored-by: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com>
1 parent 6074989 commit 0c1291d

File tree

15 files changed

+303
-74
lines changed

15 files changed

+303
-74
lines changed

README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,8 @@ rules in templates can be disabled with eslint directives with mustache or html
160160
|| `recommended` |
161161
| ![gjs logo](/docs/svgs/gjs.svg) | `recommended-gjs` |
162162
| ![gts logo](/docs/svgs/gts.svg) | `recommended-gts` |
163+
| | `strict-gjs` |
164+
| | `strict-gts` |
163165

164166
<!-- end auto-generated configs list -->
165167

@@ -174,6 +176,12 @@ rules in templates can be disabled with eslint directives with mustache or html
174176
🔧 Automatically fixable by the [`--fix` CLI option](https://eslint.org/docs/user-guide/command-line-interface#--fix).\
175177
💡 Manually fixable by [editor suggestions](https://eslint.org/docs/latest/use/core-concepts#rule-suggestions).
176178

179+
### Best Practices
180+
181+
| Name | Description | 💼 | 🔧 | 💡 |
182+
| :----------------------------------------------- | :---------------------------- | :------------------------------------------ | :- | :- |
183+
| [template-no-log](docs/rules/template-no-log.md) | disallow {{log}} in templates | ![badge-strict-gjs][] ![badge-strict-gts][] | | |
184+
177185
### Components
178186

179187
| Name                         | Description | 💼 | 🔧 | 💡 |

docs/rules/template-no-log.md

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
# ember/template-no-log
2+
3+
💼 This rule is enabled in the following [configs](https://github.com/ember-cli/eslint-plugin-ember#-configurations): `strict-gjs`, `strict-gts`.
4+
5+
<!-- end auto-generated rule header -->
6+
7+
Disallows usage of `{{log}}` in templates.
8+
9+
The `{{log}}` helper is useful for debugging but should not be present in production code. Use proper logging libraries or console statements in JavaScript code instead.
10+
11+
## Rule Details
12+
13+
This rule disallows the use of `{{log}}` statements in templates.
14+
15+
## Examples
16+
17+
Examples of **incorrect** code for this rule:
18+
19+
```gjs
20+
<template>
21+
{{log "debug message"}}
22+
<div>Content</div>
23+
</template>
24+
```
25+
26+
```gjs
27+
<template>
28+
{{#if condition}}
29+
{{log this.value}}
30+
{{/if}}
31+
</template>
32+
```
33+
34+
Examples of **correct** code for this rule:
35+
36+
```gjs
37+
<template>
38+
<div>Content</div>
39+
</template>
40+
```
41+
42+
```gjs
43+
<template>
44+
{{this.log}}
45+
</template>
46+
```
47+
48+
```gjs
49+
<template>
50+
{{logger "info"}}
51+
</template>
52+
```
53+
54+
## Related Rules
55+
56+
- [no-console](https://eslint.org/docs/rules/no-console) from ESLint
57+
58+
## References
59+
60+
- [ember-template-lint no-log](https://github.com/ember-template-lint/ember-template-lint/blob/master/docs/rule/no-log.md)

lib/config-legacy/strict-gjs.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
const base = require('./base');
2+
const gjsRules = require('../strict-rules-gjs');
3+
4+
module.exports = {
5+
...base,
6+
rules: gjsRules,
7+
};

lib/config-legacy/strict-gts.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
const base = require('./base');
2+
const gtsRules = require('../strict-rules-gts');
3+
4+
module.exports = {
5+
...base,
6+
rules: gtsRules,
7+
};

lib/config/strict-gjs.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
const base = require('./base');
2+
const gjsRules = require('../strict-rules-gjs');
3+
4+
module.exports = [...base, { rules: gjsRules }];

lib/config/strict-gts.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
const base = require('./base');
2+
const gtsRules = require('../strict-rules-gts');
3+
4+
module.exports = [...base, { rules: gtsRules }];

lib/recommended-rules-gjs.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@
55
* definitions, execute "npm run update"
66
*/
77
module.exports = {
8-
'ember/template-no-let-reference': 'error',
8+
'ember/template-no-let-reference': 'error'
99
};

lib/recommended-rules-gts.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@
55
* definitions, execute "npm run update"
66
*/
77
module.exports = {
8-
'ember/template-no-let-reference': 'error',
8+
'ember/template-no-let-reference': 'error'
99
};

lib/recommended-rules.js

Lines changed: 71 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -5,74 +5,74 @@
55
* definitions, execute "npm run update"
66
*/
77
module.exports = {
8-
"ember/avoid-leaking-state-in-ember-objects": "error",
9-
"ember/avoid-using-needs-in-controllers": "error",
10-
"ember/classic-decorator-hooks": "error",
11-
"ember/classic-decorator-no-classic-methods": "error",
12-
"ember/closure-actions": "error",
13-
"ember/jquery-ember-run": "error",
14-
"ember/new-module-imports": "error",
15-
"ember/no-actions-hash": "error",
16-
"ember/no-arrow-function-computed-properties": "error",
17-
"ember/no-assignment-of-untracked-properties-used-in-tracking-contexts": "error",
18-
"ember/no-at-ember-render-modifiers": "error",
19-
"ember/no-attrs-in-components": "error",
20-
"ember/no-attrs-snapshot": "error",
21-
"ember/no-capital-letters-in-routes": "error",
22-
"ember/no-classic-classes": "error",
23-
"ember/no-classic-components": "error",
24-
"ember/no-component-lifecycle-hooks": "error",
25-
"ember/no-computed-properties-in-native-classes": "error",
26-
"ember/no-controller-access-in-routes": "error",
27-
"ember/no-deeply-nested-dependent-keys-with-each": "error",
28-
"ember/no-deprecated-router-transition-methods": "error",
29-
"ember/no-duplicate-dependent-keys": "error",
30-
"ember/no-ember-super-in-es-classes": "error",
31-
"ember/no-ember-testing-in-module-scope": "error",
32-
"ember/no-empty-glimmer-component-classes": "error",
33-
"ember/no-function-prototype-extensions": "error",
34-
"ember/no-get-with-default": "error",
35-
"ember/no-get": "error",
36-
"ember/no-global-jquery": "error",
37-
"ember/no-implicit-injections": "error",
38-
"ember/no-incorrect-calls-with-inline-anonymous-functions": "error",
39-
"ember/no-incorrect-computed-macros": "error",
40-
"ember/no-invalid-debug-function-arguments": "error",
41-
"ember/no-invalid-dependent-keys": "error",
42-
"ember/no-invalid-test-waiters": "error",
43-
"ember/no-jquery": "error",
44-
"ember/no-legacy-test-waiters": "error",
45-
"ember/no-mixins": "error",
46-
"ember/no-new-mixins": "error",
47-
"ember/no-noop-setup-on-error-in-before": "error",
48-
"ember/no-observers": "error",
49-
"ember/no-old-shims": "error",
50-
"ember/no-on-calls-in-components": "error",
51-
"ember/no-pause-test": "error",
52-
"ember/no-private-routing-service": "error",
53-
"ember/no-restricted-resolver-tests": "error",
54-
"ember/no-runloop": "error",
55-
"ember/no-settled-after-test-helper": "error",
56-
"ember/no-shadow-route-definition": "error",
57-
"ember/no-side-effects": "error",
58-
"ember/no-string-prototype-extensions": "error",
59-
"ember/no-test-and-then": "error",
60-
"ember/no-test-import-export": "error",
61-
"ember/no-test-module-for": "error",
62-
"ember/no-test-support-import": "error",
63-
"ember/no-test-this-render": "error",
64-
"ember/no-tracked-properties-from-args": "error",
65-
"ember/no-try-invoke": "error",
66-
"ember/no-unnecessary-route-path-option": "error",
67-
"ember/no-volatile-computed-properties": "error",
68-
"ember/prefer-ember-test-helpers": "error",
69-
"ember/require-computed-macros": "error",
70-
"ember/require-computed-property-dependencies": "error",
71-
"ember/require-return-from-computed": "error",
72-
"ember/require-super-in-lifecycle-hooks": "error",
73-
"ember/require-tagless-components": "error",
74-
"ember/require-valid-css-selector-in-test-helpers": "error",
75-
"ember/routes-segments-snake-case": "error",
76-
"ember/use-brace-expansion": "error",
77-
"ember/use-ember-data-rfc-395-imports": "error"
78-
}
8+
'ember/avoid-leaking-state-in-ember-objects': 'error',
9+
'ember/avoid-using-needs-in-controllers': 'error',
10+
'ember/classic-decorator-hooks': 'error',
11+
'ember/classic-decorator-no-classic-methods': 'error',
12+
'ember/closure-actions': 'error',
13+
'ember/jquery-ember-run': 'error',
14+
'ember/new-module-imports': 'error',
15+
'ember/no-actions-hash': 'error',
16+
'ember/no-arrow-function-computed-properties': 'error',
17+
'ember/no-assignment-of-untracked-properties-used-in-tracking-contexts': 'error',
18+
'ember/no-at-ember-render-modifiers': 'error',
19+
'ember/no-attrs-in-components': 'error',
20+
'ember/no-attrs-snapshot': 'error',
21+
'ember/no-capital-letters-in-routes': 'error',
22+
'ember/no-classic-classes': 'error',
23+
'ember/no-classic-components': 'error',
24+
'ember/no-component-lifecycle-hooks': 'error',
25+
'ember/no-computed-properties-in-native-classes': 'error',
26+
'ember/no-controller-access-in-routes': 'error',
27+
'ember/no-deeply-nested-dependent-keys-with-each': 'error',
28+
'ember/no-deprecated-router-transition-methods': 'error',
29+
'ember/no-duplicate-dependent-keys': 'error',
30+
'ember/no-ember-super-in-es-classes': 'error',
31+
'ember/no-ember-testing-in-module-scope': 'error',
32+
'ember/no-empty-glimmer-component-classes': 'error',
33+
'ember/no-function-prototype-extensions': 'error',
34+
'ember/no-get-with-default': 'error',
35+
'ember/no-get': 'error',
36+
'ember/no-global-jquery': 'error',
37+
'ember/no-implicit-injections': 'error',
38+
'ember/no-incorrect-calls-with-inline-anonymous-functions': 'error',
39+
'ember/no-incorrect-computed-macros': 'error',
40+
'ember/no-invalid-debug-function-arguments': 'error',
41+
'ember/no-invalid-dependent-keys': 'error',
42+
'ember/no-invalid-test-waiters': 'error',
43+
'ember/no-jquery': 'error',
44+
'ember/no-legacy-test-waiters': 'error',
45+
'ember/no-mixins': 'error',
46+
'ember/no-new-mixins': 'error',
47+
'ember/no-noop-setup-on-error-in-before': 'error',
48+
'ember/no-observers': 'error',
49+
'ember/no-old-shims': 'error',
50+
'ember/no-on-calls-in-components': 'error',
51+
'ember/no-pause-test': 'error',
52+
'ember/no-private-routing-service': 'error',
53+
'ember/no-restricted-resolver-tests': 'error',
54+
'ember/no-runloop': 'error',
55+
'ember/no-settled-after-test-helper': 'error',
56+
'ember/no-shadow-route-definition': 'error',
57+
'ember/no-side-effects': 'error',
58+
'ember/no-string-prototype-extensions': 'error',
59+
'ember/no-test-and-then': 'error',
60+
'ember/no-test-import-export': 'error',
61+
'ember/no-test-module-for': 'error',
62+
'ember/no-test-support-import': 'error',
63+
'ember/no-test-this-render': 'error',
64+
'ember/no-tracked-properties-from-args': 'error',
65+
'ember/no-try-invoke': 'error',
66+
'ember/no-unnecessary-route-path-option': 'error',
67+
'ember/no-volatile-computed-properties': 'error',
68+
'ember/prefer-ember-test-helpers': 'error',
69+
'ember/require-computed-macros': 'error',
70+
'ember/require-computed-property-dependencies': 'error',
71+
'ember/require-return-from-computed': 'error',
72+
'ember/require-super-in-lifecycle-hooks': 'error',
73+
'ember/require-tagless-components': 'error',
74+
'ember/require-valid-css-selector-in-test-helpers': 'error',
75+
'ember/routes-segments-snake-case': 'error',
76+
'ember/use-brace-expansion': 'error',
77+
'ember/use-ember-data-rfc-395-imports': 'error'
78+
};

lib/rules/template-no-log.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/** @type {import('eslint').Rule.RuleModule} */
2+
module.exports = {
3+
meta: {
4+
type: 'problem',
5+
docs: {
6+
description: 'disallow {{log}} in templates',
7+
category: 'Best Practices',
8+
strictGjs: true,
9+
strictGts: true,
10+
url: 'https://github.com/ember-cli/eslint-plugin-ember/tree/master/docs/rules/template-no-log.md',
11+
},
12+
fixable: null,
13+
schema: [],
14+
messages: {
15+
unexpected: 'Unexpected log statement in template.',
16+
},
17+
},
18+
19+
create(context) {
20+
function checkForLog(node) {
21+
if (node.path && node.path.type === 'GlimmerPathExpression' && node.path.original === 'log') {
22+
context.report({
23+
node,
24+
messageId: 'unexpected',
25+
});
26+
}
27+
}
28+
29+
return {
30+
GlimmerMustacheStatement(node) {
31+
checkForLog(node);
32+
},
33+
34+
GlimmerBlockStatement(node) {
35+
checkForLog(node);
36+
},
37+
};
38+
},
39+
};

0 commit comments

Comments
 (0)