Skip to content

Commit a4d865b

Browse files
committed
fix: #25 check for proper order with prefer-flat-map
1 parent 4861177 commit a4d865b

File tree

3 files changed

+75
-44
lines changed

3 files changed

+75
-44
lines changed

package-lock.json

Lines changed: 40 additions & 26 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rules/prefer-flat-map.js

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@
77
module.exports = {
88
meta: {
99
docs: {
10-
description: "Prefer using the flatMap over an immediate .map() call after a .flat().",
10+
description: "Prefer using the flatMap over an immediate .flat() call after a .map().",
1111
recommended: true
1212
},
1313
fixable: "code",
1414
schema: []
1515
},
1616
create(context) {
1717
return {
18-
'CallExpression[callee.type="MemberExpression"] > MemberExpression[property.name="map"] > CallExpression[callee.type="MemberExpression"][callee.property.name="flat"]'(node) {
18+
'CallExpression[callee.type="MemberExpression"] > MemberExpression[property.name="flat"] > CallExpression[callee.type="MemberExpression"][callee.property.name="map"]'(node) {
1919
const parent = node,
2020
callee = node.parent;
2121
node = callee.parent;
@@ -26,12 +26,18 @@ module.exports = {
2626
start: parent.callee.property.loc.start,
2727
end: callee.loc.end
2828
},
29-
message: "Use flatMap instead of .flat().map()",
29+
message: "Use flatMap instead of .map().flat()",
3030
fix(fixer) {
31-
return fixer.replaceTextRange([
32-
parent.callee.property.start,
33-
node.callee.property.end
34-
], 'flatMap');
31+
return [
32+
fixer.replaceTextRange([
33+
parent.callee.property.start,
34+
parent.callee.property.end
35+
], 'flatMap'),
36+
fixer.removeRange([
37+
callee.object.end,
38+
callee.parent.end
39+
])
40+
];
3541
}
3642
});
3743
}

test/rules/prefer-flat-map.js

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,27 @@ ruleTester.run('prefer-flat-map', rule, {
1313
'array.flatMap((m) => m)',
1414
'array.flat()',
1515
'array.map((r) => r + 1)',
16-
'array.map((r) => r + 1).flat()',
17-
'array.flat().reverse().map((r) => r + 1)'
16+
'array.flat().map((r) => r + 1)',
17+
'array.map((r) => r + 1).reverse().flat()'
1818
],
19-
invalid: [ {
20-
code: 'array.flat().map((p) => p)',
21-
errors: [ {
22-
message: 'Use flatMap instead of .flat().map()',
23-
column: 7,
24-
line: 1
25-
} ],
26-
output: 'array.flatMap((p) => p)'
27-
} ]
19+
invalid: [
20+
{
21+
code: 'array.map((p) => p).flat()',
22+
errors: [ {
23+
message: 'Use flatMap instead of .map().flat()',
24+
column: 7,
25+
line: 1
26+
} ],
27+
output: 'array.flatMap((p) => p)'
28+
},
29+
{
30+
code: 'foo(); array.map((p) => p).flat(); test();',
31+
errors: [ {
32+
message: 'Use flatMap instead of .map().flat()',
33+
column: 14,
34+
line: 1
35+
} ],
36+
output: 'foo(); array.flatMap((p) => p); test();'
37+
}
38+
]
2839
});

0 commit comments

Comments
 (0)