Skip to content

Commit 754b932

Browse files
fix(no-unnecessary-collection): spread element (#289)
Resolves #288
1 parent 70362b3 commit 754b932

File tree

3 files changed

+13
-2
lines changed

3 files changed

+13
-2
lines changed

src/etc/is.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,10 @@ export function isRestElement(node: TSESTree.Node): node is TSESTree.RestElement
134134
return node.type === AST_NODE_TYPES.RestElement;
135135
}
136136

137+
export function isSpreadElement(node: TSESTree.Node): node is TSESTree.SpreadElement {
138+
return node.type === AST_NODE_TYPES.SpreadElement;
139+
}
140+
137141
export function isThisExpression(node: TSESTree.Node): node is TSESTree.ThisExpression {
138142
return node.type === AST_NODE_TYPES.ThisExpression;
139143
}

src/rules/no-unnecessary-collection.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import {
22
TSESTree as es,
33
} from '@typescript-eslint/utils';
44
import { MULTIPLE_OBSERVABLE_ACCEPTING_STATIC_OBSERVABLE_CREATORS, SOURCES_OBJECT_ACCEPTING_STATIC_OBSERVABLE_CREATORS } from '../constants';
5-
import { getTypeServices, isArrayExpression, isObjectExpression, isProperty } from '../etc';
5+
import { getTypeServices, isArrayExpression, isObjectExpression, isProperty, isSpreadElement } from '../etc';
66
import { ruleCreator } from '../utils';
77

88
export const noUnnecessaryCollectionRule = ruleCreator({
@@ -71,7 +71,7 @@ export const noUnnecessaryCollectionRule = ruleCreator({
7171
}
7272

7373
// Single rest parameter argument.
74-
if (args.length === 1 && couldBeObservable(firstArg)) {
74+
if (args.length === 1 && !isSpreadElement(firstArg) && couldBeObservable(firstArg)) {
7575
context.report({
7676
messageId: 'forbidden',
7777
node: node.callee,

tests/rules/no-unnecessary-collection.test.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,13 @@ ruleTester({ types: true }).run('no-unnecessary-collection', noUnnecessaryCollec
3838
const b$ = of(2);
3939
const merged$ = merge(a$, b$);
4040
`,
41+
stripIndent`
42+
// merge with spread
43+
import { merge, of } from "rxjs";
44+
45+
const arr = [of(1), of(2)];
46+
const merged$ = merge(...arr);
47+
`,
4148
stripIndent`
4249
// zip with multiple observables
4350
import { zip, of } from "rxjs";

0 commit comments

Comments
 (0)