From f4e3f1b3db2aa33cf3211ff64e46d696a324485a Mon Sep 17 00:00:00 2001 From: Sharmila Date: Wed, 17 Jul 2019 10:47:23 -0700 Subject: [PATCH] prefer-default-export: don't warn on TypeAlias & TSTypeAliasDeclaration Fixes #1332. --- src/rules/prefer-default-export.js | 9 +++- tests/src/rules/prefer-default-export.js | 67 +++++++++++++++++++++++- 2 files changed, 73 insertions(+), 3 deletions(-) diff --git a/src/rules/prefer-default-export.js b/src/rules/prefer-default-export.js index 0e31346f3..01b8d8be0 100644 --- a/src/rules/prefer-default-export.js +++ b/src/rules/prefer-default-export.js @@ -47,9 +47,16 @@ module.exports = { // if there are specifiers, node.declaration should be null if (!node.declaration) return - // don't count flow types exports + // don't warn on single type aliases or declarations if (node.exportKind === 'type') return + if ( + node.declaration.type === 'TSTypeAliasDeclaration' || + node.declaration.type === 'TypeAlias' + ) { + return + } + if (node.declaration.declarations) { node.declaration.declarations.forEach(function(declaration) { captureDeclaration(declaration.id) diff --git a/tests/src/rules/prefer-default-export.js b/tests/src/rules/prefer-default-export.js index 1d670a02f..55e739d98 100644 --- a/tests/src/rules/prefer-default-export.js +++ b/tests/src/rules/prefer-default-export.js @@ -1,6 +1,8 @@ import { test } from '../utils' import { RuleTester } from 'eslint' +import eslintPkg from 'eslint/package.json' +import semver from 'semver' const ruleTester = new RuleTester() , rule = require('rules/prefer-default-export') @@ -83,7 +85,6 @@ ruleTester.run('prefer-default-export', rule, { code: 'export { a, b } from "foo.js"', parser: require.resolve('babel-eslint'), }), - // ...SYNTAX_CASES, ], invalid: [ @@ -129,4 +130,66 @@ ruleTester.run('prefer-default-export', rule, { }], }), ], -}) +}); + +context('Typescript', function() { + // Typescript + const parsers = [require.resolve('babel-eslint')]; + + if (semver.satisfies(eslintPkg.version, '>=4.0.0 <6.0.0')) { + parsers.push(require.resolve('typescript-eslint-parser')); + } + + if (semver.satisfies(eslintPkg.version, '>5.0.0')) { + parsers.push(require.resolve('@typescript-eslint/parser')); + } + + parsers.forEach((parser) => { + const parserConfig = { + parser: parser, + settings: { + 'import/parsers': { [parser]: ['.ts'] }, + 'import/resolver': { 'eslint-import-resolver-typescript': true }, + }, + }; + + ruleTester.run('prefer-default-export', rule, { + valid: [ + // Exporting types + test( + { + code: ` + export type foo = string; + export type bar = number;`, + parser, + }, + parserConfig, + ), + test( + { + code: ` + export type foo = string; + export type bar = number;`, + parser, + }, + parserConfig, + ), + test( + { + code: 'export type foo = string', + parser, + }, + parserConfig, + ), + test( + { + code: 'export type foo = string', + parser, + }, + parserConfig, + ), + ], + invalid: [], + }); + }); +});