Skip to content

Commit

Permalink
[Fix] no-unresolved: check import()
Browse files Browse the repository at this point in the history
  • Loading branch information
aladdin-add authored and ljharb committed Apr 12, 2021
1 parent 2057c05 commit 794c50d
Show file tree
Hide file tree
Showing 3 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 @@ -29,6 +29,7 @@ This change log adheres to standards from [Keep a CHANGELOG](http://keepachangel
- [`no-extraneous-dependencies`]: Exclude flow `typeof` imports ([#1534], thanks [@devongovett])
- [`newline-after-import`]: respect decorator annotations ([#1985], thanks [@lilling])
- [`no-restricted-paths`]: enhance performance for zones with `except` paths ([#2022], thanks [@malykhinvi])
- [`no-unresolved`]: check import() ([#2026], thanks [@aladdin-add])

### Changed
- [Generic Import Callback] Make callback for all imports once in rules ([#1237], thanks [@ljqx])
Expand Down Expand Up @@ -764,6 +765,7 @@ for info on changes for earlier releases.

[`memo-parser`]: ./memo-parser/README.md

[#2026]: https://github.com/benmosher/eslint-plugin-import/pull/2026
[#2022]: https://github.com/benmosher/eslint-plugin-import/pull/2022
[#2021]: https://github.com/benmosher/eslint-plugin-import/pull/2021
[#1997]: https://github.com/benmosher/eslint-plugin-import/pull/1997
Expand Down Expand Up @@ -1355,3 +1357,4 @@ for info on changes for earlier releases.
[@s-h-a-d-o-w]: https://github.com/s-h-a-d-o-w
[@grit96]: https://github.com/grit96
[@lilling]: https://github.com/lilling
[@aladdin-add]: https://github.com/aladdin-add
22 changes: 20 additions & 2 deletions tests/src/rules/no-unresolved.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import * as path from 'path';

import { test, SYNTAX_CASES } from '../utils';
import { test, SYNTAX_CASES, testVersion } from '../utils';

import { CASE_SENSITIVE_FS } from 'eslint-module-utils/resolve';

Expand Down Expand Up @@ -93,7 +93,6 @@ function runResolverTests(resolver) {
'\'./reallyfake/module\'.' }],
}),


rest({
code: "import bar from './baz';",
errors: [{ message: "Unable to resolve path to module './baz'.",
Expand Down Expand Up @@ -382,3 +381,22 @@ ruleTester.run('no-unresolved syntax verification', rule, {
valid: SYNTAX_CASES,
invalid:[],
});

// https://github.com/benmosher/eslint-plugin-import/issues/2024
ruleTester.run('import() with built-in parser', rule, {
valid: [].concat(
testVersion('>=7', () => ({
code: "import('fs');",
parser: require.resolve('espree'),
parserOptions: { ecmaVersion: 2021 },
})) || [],
),
invalid: [].concat(
testVersion('>=7', () => ({
code: 'import("./does-not-exist").then(() => {})',
parser: require.resolve('espree'),
parserOptions: { ecmaVersion: 2021 },
errors: ["Unable to resolve path to module './does-not-exist'."],
})) || [],
),
});
14 changes: 11 additions & 3 deletions utils/moduleVisitor.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,17 @@ exports.default = function visitModules(visitor, options) {

// for esmodule dynamic `import()` calls
function checkImportCall(node) {
if (node.callee.type !== 'Import') return;
if (node.arguments.length !== 1) return;
let modulePath;
// refs https://github.com/estree/estree/blob/master/es2020.md#importexpression
if (node.type === 'ImportExpression') {
modulePath = node.source;
} else if (node.type === 'CallExpression') {
if (node.callee.type !== 'Import') return;
if (node.arguments.length !== 1) return;

modulePath = node.arguments[0];
}

const modulePath = node.arguments[0];
if (modulePath.type !== 'Literal') return;
if (typeof modulePath.value !== 'string') return;

Expand Down Expand Up @@ -87,6 +94,7 @@ exports.default = function visitModules(visitor, options) {
'ExportNamedDeclaration': checkSource,
'ExportAllDeclaration': checkSource,
'CallExpression': checkImportCall,
'ImportExpression': checkImportCall,
});
}

Expand Down

0 comments on commit 794c50d

Please sign in to comment.