Skip to content

Commit 0a0b8c2

Browse files
committed
Fix avoid-leaking-state false positives with TypeScript type assertions
Unwrap TSAsExpression and TSSatisfiesExpression nodes before checking if a property value is allowed, so expressions like 'undefined as string' and 'inject() as unknown as Store' are not falsely flagged. Fixes #1116
1 parent 131cd12 commit 0a0b8c2

2 files changed

Lines changed: 15 additions & 0 deletions

File tree

lib/rules/avoid-leaking-state-in-ember-objects.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,11 @@ function isAllowedLogicalExpression(value) {
2828
}
2929

3030
function isAllowed(value) {
31+
// Unwrap TypeScript type assertions: `x as Type` or `x satisfies Type`
32+
if (value && (value.type === 'TSAsExpression' || value.type === 'TSSatisfiesExpression')) {
33+
return isAllowed(value.expression);
34+
}
35+
3136
return (
3237
ember.isFunctionExpression(value) ||
3338
types.isLiteral(value) ||

tests/lib/rules/avoid-leaking-state-in-ember-objects.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,16 @@ eslintTester.run('avoid-leaking-state-in-ember-objects', rule, {
5757
'import EmberObject from "@ember/object"; export default class MyNativeClassComponentWithAMixin extends EmberObject.extend(MyMixin) { someArrayField = []; }',
5858
{ code: 'export default Foo.extend({ someProp: [] });', options: [['someProp']] }, // With options.
5959
{ code: 'export default Foo.extend({ someProp: [], actions: {} });', options: [['someProp']] }, // With options and known Ember property.
60+
61+
// TypeScript type assertions should be unwrapped
62+
{
63+
code: 'export default Foo.extend({ someProp: undefined as string | undefined });',
64+
parser: require.resolve('@typescript-eslint/parser'),
65+
},
66+
{
67+
code: 'export default Foo.extend({ someProp: inject() as unknown as Store });',
68+
parser: require.resolve('@typescript-eslint/parser'),
69+
},
6070
],
6171
invalid: [
6272
{

0 commit comments

Comments
 (0)