diff --git a/.changeset/ten-lamps-sell.md b/.changeset/ten-lamps-sell.md new file mode 100644 index 000000000..31236d0e0 --- /dev/null +++ b/.changeset/ten-lamps-sell.md @@ -0,0 +1,5 @@ +--- +"eslint-plugin-import-x": patch +--- + +Fix #144, read proper `sourceType` for both eslint flat config and legacy eslintrc config. diff --git a/src/rules/no-default-export.ts b/src/rules/no-default-export.ts index 8cb95b8ca..2456b316b 100644 --- a/src/rules/no-default-export.ts +++ b/src/rules/no-default-export.ts @@ -1,4 +1,5 @@ import { createRule } from '../utils' +import sourceType from '../utils/source-type' export = createRule({ name: 'no-default-export', @@ -18,7 +19,7 @@ export = createRule({ defaultOptions: [], create(context) { // ignore non-modules - if (context.parserOptions.sourceType !== 'module') { + if (sourceType(context) !== 'module') { return {} } diff --git a/src/rules/no-named-export.ts b/src/rules/no-named-export.ts index 3cc2434f1..1282a6fe3 100644 --- a/src/rules/no-named-export.ts +++ b/src/rules/no-named-export.ts @@ -1,4 +1,5 @@ import { createRule } from '../utils' +import sourceType from '../utils/source-type' export = createRule({ name: 'no-named-export', @@ -16,7 +17,7 @@ export = createRule({ defaultOptions: [], create(context) { // ignore non-modules - if (context.parserOptions.sourceType !== 'module') { + if (sourceType(context) !== 'module') { return {} } diff --git a/src/rules/unambiguous.ts b/src/rules/unambiguous.ts index 119c125dd..b878bac85 100644 --- a/src/rules/unambiguous.ts +++ b/src/rules/unambiguous.ts @@ -3,6 +3,7 @@ */ import { createRule, isUnambiguousModule } from '../utils' +import sourceType from '../utils/source-type' export = createRule({ name: 'unambiguous', @@ -21,7 +22,7 @@ export = createRule({ defaultOptions: [], create(context) { // ignore non-modules - if (context.parserOptions.sourceType !== 'module') { + if (sourceType(context) !== 'module') { return {} } diff --git a/src/utils/source-type.ts b/src/utils/source-type.ts new file mode 100644 index 000000000..89f732e4b --- /dev/null +++ b/src/utils/source-type.ts @@ -0,0 +1,10 @@ +import type { RuleContext } from '../types' + +export default function sourceType(context: RuleContext) { + if ('sourceType' in context.parserOptions) { + return context.parserOptions.sourceType + } + if ('languageOptions' in context && context.languageOptions) { + return context.languageOptions.sourceType + } +} diff --git a/test/rules/no-default-export.spec.ts b/test/rules/no-default-export.spec.ts index e38ce7b6e..92ef91f0e 100644 --- a/test/rules/no-default-export.spec.ts +++ b/test/rules/no-default-export.spec.ts @@ -165,6 +165,25 @@ ruleTester.run('no-default-export', rule, { }, ], }), + test({ + code: "function foo() { return 'foo'; }\nexport default foo;", + filename: 'foo.ts', + errors: [ + { + type: 'ExportDefaultDeclaration', + messageId: 'preferNamed', + }, + ], + languageOptions: { + parserOptions: { + ecmaversion: 'latest', + sourceType: 'module', + }, + }, + settings: { + 'import-x/resolver': { typescript: true }, + }, + }), test({ code: 'export default from "foo.js"', languageOptions: { parser: require(parsers.BABEL) },