Skip to content

Commit

Permalink
[Fix] extensions: ignore type-only imports
Browse files Browse the repository at this point in the history
  • Loading branch information
jablko authored and ljharb committed Oct 23, 2021
1 parent c3633c6 commit 3a0c730
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 2 deletions.
7 changes: 6 additions & 1 deletion src/rules/extensions.js
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,12 @@ module.exports = {
return false;
}

function checkFileExtension(source) {
function checkFileExtension(source, node) {
// ignore type-only imports
if (node.importKind === 'type') {
return;
}

// bail if the declaration doesn't have a source, e.g. "export { foo };", or if it's only partially typed like in an editor
if (!source || !source.value) return;

Expand Down
33 changes: 32 additions & 1 deletion tests/src/rules/extensions.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { RuleTester } from 'eslint';
import rule from 'rules/extensions';
import { test, testFilePath } from '../utils';
import { getTSParsers, test, testFilePath } from '../utils';

const ruleTester = new RuleTester();

Expand Down Expand Up @@ -597,3 +597,34 @@ ruleTester.run('extensions', rule, {
}),
],
});

describe('TypeScript', () => {
getTSParsers()
// Type-only imports were added in TypeScript ESTree 2.23.0
.filter((parser) => parser !== require.resolve('typescript-eslint-parser'))
.forEach((parser) => {
ruleTester.run(`${parser}: extensions ignore type-only`, rule, {
valid: [
test({
code: 'import type { T } from "./typescript-declare";',
options: [
'always',
{ ts: 'never', tsx: 'never', js: 'never', jsx: 'never' },
],
parser,
}),
],
invalid: [
test({
code: 'import { T } from "./typescript-declare";',
errors: ['Missing file extension for "./typescript-declare"'],
options: [
'always',
{ ts: 'never', tsx: 'never', js: 'never', jsx: 'never' },
],
parser,
}),
],
});
});
});

0 comments on commit 3a0c730

Please sign in to comment.