Skip to content

Commit

Permalink
[Fix] no-unresolved, extensions: ignore type-only exports
Browse files Browse the repository at this point in the history
  • Loading branch information
Lukas Kullmann committed Apr 19, 2022
1 parent 995c12c commit 98f48d2
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 5 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ This change log adheres to standards from [Keep a CHANGELOG](https://keepachange
### Changed
- [Tests] `named`: Run all TypeScript test ([#2427], thanks [@ProdigySim])

### Fixed
- [`no-unresolved`, `extensions`]: ignore type only exports ([#2436], thanks [@Lukas-Kullmann])

## [2.26.0] - 2022-04-05

### Added
Expand Down
6 changes: 3 additions & 3 deletions src/rules/extensions.js
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ module.exports = {
function checkFileExtension(source, node) {
// 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;

const importPathWithQueryString = source.value;

// don't enforce anything on builtins
Expand All @@ -164,8 +164,8 @@ module.exports = {
) || isScoped(importPath);

if (!extension || !importPath.endsWith(`.${extension}`)) {
// ignore type-only imports
if (node.importKind === 'type') return;
// ignore type-only imports and exports
if (node.importKind === 'type' || node.exportKind === 'type') return;
const extensionRequired = isUseOfExtensionRequired(extension, isPackage);
const extensionForbidden = isUseOfExtensionForbidden(extension);
if (extensionRequired && !extensionForbidden) {
Expand Down
4 changes: 2 additions & 2 deletions src/rules/no-unresolved.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ module.exports = {
const options = context.options[0] || {};

function checkSourceValue(source, node) {
// ignore type-only imports
if (node.importKind === 'type') {
// ignore type-only imports and exports
if (node.importKind === 'type' || node.exportKind === 'type') {
return;
}

Expand Down
17 changes: 17 additions & 0 deletions tests/src/rules/extensions.js
Original file line number Diff line number Diff line change
Expand Up @@ -613,6 +613,14 @@ describe('TypeScript', () => {
],
parser,
}),
test({
code: 'export type T from "./typescript-declare";',
options: [
'always',
{ ts: 'never', tsx: 'never', js: 'never', jsx: 'never' },
],
parser,
}),
],
invalid: [
test({
Expand All @@ -624,6 +632,15 @@ describe('TypeScript', () => {
],
parser,
}),
test({
code: 'export T from "./typescript-declare";',
errors: ['Missing file extension for "./typescript-declare"'],
options: [
'always',
{ ts: 'never', tsx: 'never', js: 'never', jsx: 'never' },
],
parser,
}),
],
});
});
Expand Down
9 changes: 9 additions & 0 deletions tests/src/rules/no-unresolved.js
Original file line number Diff line number Diff line change
Expand Up @@ -451,13 +451,22 @@ context('TypeScript', () => {
code: 'import type { JSONSchema7Type } from "@types/json-schema";',
parser,
}),
test({
code: 'export type { JSONSchema7Type } from "@types/json-schema";',
parser,
}),
],
invalid: [
test({
code: 'import { JSONSchema7Type } from "@types/json-schema";',
errors: [ "Unable to resolve path to module '@types/json-schema'." ],
parser,
}),
test({
code: 'export { JSONSchema7Type } from "@types/json-schema";',
errors: [ "Unable to resolve path to module '@types/json-schema'." ],
parser,
}),
],
});
});
Expand Down

0 comments on commit 98f48d2

Please sign in to comment.