From c0bbcb656425cc936d5701802157b92099cf87fe Mon Sep 17 00:00:00 2001 From: golopot Date: Sat, 13 Jul 2019 11:39:18 +0800 Subject: [PATCH] Change how function overloads are recognized --- src/rules/export.js | 18 +++++++++++------- tests/src/rules/export.js | 14 +++----------- 2 files changed, 14 insertions(+), 18 deletions(-) diff --git a/src/rules/export.js b/src/rules/export.js index c9e2cc8824..7739255c5b 100644 --- a/src/rules/export.js +++ b/src/rules/export.js @@ -26,15 +26,20 @@ const tsTypePrefix = 'type:' /** * Detect function overloads like: - * ```js - * export function foo(a: number) {} - * export function foo(a: string) {} + * ```ts + * export function foo(a: number); + * export function foo(a: string); + * export function foo(a: number|string) { return a; } * ``` - * @param {Set} nodes + * @param {Object[]} nodes * @returns {boolean} */ function isTypescriptFunctionOverloads(nodes) { - return [...nodes].every(node => node.parent.type === 'FunctionDeclaration') + return nodes.some(node => node.parent.type === 'TSDeclareFunction') && + nodes.every(node => ( + node.parent.type === 'TSDeclareFunction' || + node.parent.type === 'FunctionDeclaration' + )) } module.exports = { @@ -47,7 +52,6 @@ module.exports = { create: function (context) { const namespace = new Map([[rootProgram, new Map()]]) - const isTypescriptFile = /\.ts|\.tsx$/.test(context.getFilename()) function addNamed(name, node, parent, isType) { if (!namespace.has(parent)) { @@ -137,7 +141,7 @@ module.exports = { for (let [name, nodes] of named) { if (nodes.size <= 1) continue - if (isTypescriptFile && isTypescriptFunctionOverloads(nodes)) continue + if (isTypescriptFunctionOverloads([...nodes])) continue for (let node of nodes) { if (name === 'default') { diff --git a/tests/src/rules/export.js b/tests/src/rules/export.js index f0341669e9..70218ebb1c 100644 --- a/tests/src/rules/export.js +++ b/tests/src/rules/export.js @@ -149,18 +149,10 @@ context('Typescript', function () { test(Object.assign({ code: ` - export function fff(a: string) {}; - export function fff(a: number) {}; + export function fff(a: string); + export function fff(a: number); + export function fff(a: string|number) {}; `, - filename: 'foo.ts', - }, parserConfig)), - - test(Object.assign({ - code: ` - export function ggg(a: string) {}; - export function ggg(a: number) {}; - `, - filename: 'foo.tsx', }, parserConfig)), // namespace