Skip to content

Commit 5703fb0

Browse files
committed
[fix] export: false positive for typescript overloads
1 parent 6512110 commit 5703fb0

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

src/rules/export.js

+16
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,19 @@ ambient namespaces:
2424
const rootProgram = 'root'
2525
const tsTypePrefix = 'type:'
2626

27+
/**
28+
* Detect function overloads like:
29+
* ```js
30+
* export function foo(a: number) {}
31+
* export function foo(a: string) {}
32+
* ```
33+
* @param {Set<Object>} nodes
34+
* @returns {boolean}
35+
*/
36+
function isTypescriptFunctionOverloads(nodes) {
37+
return [...nodes].every(node => node.parent.type === 'FunctionDeclaration')
38+
}
39+
2740
module.exports = {
2841
meta: {
2942
type: 'problem',
@@ -34,6 +47,7 @@ module.exports = {
3447

3548
create: function (context) {
3649
const namespace = new Map([[rootProgram, new Map()]])
50+
const isTypescriptFile = /\.ts|\.tsx$/.test(context.getFilename())
3751

3852
function addNamed(name, node, parent, isType) {
3953
if (!namespace.has(parent)) {
@@ -123,6 +137,8 @@ module.exports = {
123137
for (let [name, nodes] of named) {
124138
if (nodes.size <= 1) continue
125139

140+
if (isTypescriptFile && isTypescriptFunctionOverloads(nodes)) continue
141+
126142
for (let node of nodes) {
127143
if (name === 'default') {
128144
context.report(node, 'Multiple default exports.')

tests/src/rules/export.js

+16
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,22 @@ context('Typescript', function () {
147147
`,
148148
}, parserConfig)),
149149

150+
test(Object.assign({
151+
code: `
152+
export function fff(a: string) {};
153+
export function fff(a: number) {};
154+
`,
155+
filename: 'foo.ts',
156+
}, parserConfig)),
157+
158+
test(Object.assign({
159+
code: `
160+
export function ggg(a: string) {};
161+
export function ggg(a: number) {};
162+
`,
163+
filename: 'foo.tsx',
164+
}, parserConfig)),
165+
150166
// namespace
151167
test(Object.assign({
152168
code: `

0 commit comments

Comments
 (0)