Change Log
All notable changes to this project will be documented in this file.
This project adheres to Semantic Versioning.
This change log adheres to standards from Keep a CHANGELOG.
2.32.0 - 2025-06-20
Added
Fixed
Changed
2.31.0 - 2024-10-03
Added
Fixed
Changed
2.30.0 - 2024-09-02
Added
Fixed
Changed
- Docs: Make glob pattern description more explicit (#2944, thanks @mulztob)
no-unused-modules
: add console message to help debug #2866
- [Refactor]
ExportMap
: make procedures static instead of monkeypatching exportmap (#2982, thanks @soryy708)
- [Refactor]
ExportMap
: separate ExportMap instance from its builder logic (#2985, thanks @soryy708)
- Docs: Add a quick note on how unbound imports and --fix (#2640, thanks @minervabot)
- [Tests] appveyor -> GHA (run tests on Windows in both pwsh and WSL + Ubuntu) (#2987, thanks @joeyguerra)
- [actions] migrate OSX tests to GHA (ljharb#37, thanks @aks-)
- [Refactor]
exportMapBuilder
: avoid hoisting (#2989, thanks @soryy708)
- [Refactor]
ExportMap
: extract "builder" logic to separate files (#2991, thanks @soryy708)
- Docs: update the description of the
pathGroupsExcludedImportTypes
option (#3036, thanks @liby)
- [readme] Clarify how to install the plugin (#2993, thanks @jwbth)
2.29.1 - 2023-12-14
Fixed
2.29.0 - 2023-10-22
Added
2.28.1 - 2023-08-18
Fixed
Changed
- [Docs] remove duplicate fixable notices in docs (#2850, thanks @bmish)
2.28.0 - 2023-07-27
Fixed
Changed
2.27.5 - 2023-01-16
Fixed
2.27.4 - 2023-01-11
Fixed
semver
should be a prod dep (#2668)
2.27.3 - 2023-01-11
Fixed
2.27.2 - 2023-01-11
Fixed
2.27.1 - 2023-01-11
Fixed
2.27.0 - 2023-01-11
Added
newline-after-import
: add considerComments
option (#2399, thanks @pri1311)
no-cycle
: add allowUnsafeDynamicCyclicDependency
option (#2387, thanks [@GerkinDev])
no-restricted-paths
: support arrays for from
and target
options (#2466, thanks @AdriAt360)
no-anonymous-default-export
: add allowNew
option ([#2505], thanks @DamienCassou)
order
: Add distinctGroup
option (#2395, thanks @hyperupcall)
no-extraneous-dependencies
: Add includeInternal
option (#2541, thanks [@bdwain])
no-extraneous-dependencies
: Add includeTypes
option ([#2543], thanks [@bdwain])
order
: new alphabetize.orderImportKind
option to sort imports with same path based on their kind (type
, typeof
) ([#2544], thanks @stropho)
consistent-type-specifier-style
: add rule (#2473, thanks @bradzacher)
- Add
no-empty-named-blocks
rule (#2568, thanks @guilhermelimak)
prefer-default-export
: add "target" option (#2602, thanks @azyzz228)
no-absolute-path
: add fixer (#2613, thanks [@adipascu])
no-duplicates
: support inline type import with inlineTypeImport
option (#2475, thanks @snewcomer)
Fixed
order
: move nested imports closer to main import entry (#2396, thanks @pri1311)
no-restricted-paths
: fix an error message (#2466, thanks @AdriAt360)
no-restricted-paths
: use Minimatch.match
instead of minimatch
to comply with Windows Native paths (#2466, thanks @AdriAt360)
order
: require with member expression could not be fixed if alphabetize.order was used (#2490, thanks @msvab)
order
: leave more space in rankings for consecutive path groups (#2506, thanks @Pearce-Ropion)
no-cycle
: add ExportNamedDeclaration statements to dependencies (#2511, thanks @BenoitZugmeyer)
dynamic-import-chunkname
: prevent false report on a valid webpack magic comment (#2330, thanks @mhmadhamster)
export
: do not error on TS export overloads (#1590, thanks @ljharb)
no-unresolved
, extensions
: ignore type only exports (#2436, thanks @Lukas-Kullmann)
ExportMap
: add missing param to function (#2589, thanks @Fdawgs)
no-unused-modules
: checkPkgFieldObject
filters boolean fields from checks (#2598, thanks @mpint)
no-cycle
: accept Flow typeof
imports, just like type
(#2608, thanks @gnprice)
no-import-module-exports
: avoid a false positive for import variables (#2315, thanks @BarryThePenguin)
Changed
- Tests: Run all TypeScript test (#2427, thanks @ProdigySim)
- [readme] note use of typescript in readme
import/extensions
section (#2440, thanks @OutdatedVersion)
- Docs: use correct default value (#2392, thanks @hyperupcall)
- [meta] replace git.io link in comments with the original URL (#2444, thanks @liby)
- [Docs] remove global install in readme (#2412, thanks @aladdin-add)
- [readme] clarify
eslint-import-resolver-typescript
usage (#2503, thanks @JounQin)
- Refactor: Add per-run caching of traversed paths (#2419, thanks [@nokel81])
- [Performance]
ExportMap
: add caching after parsing for an ambiguous module (#2531, thanks @stenin-nikita)
- Docs: fix paths (#2424, thanks @s-h-a-d-o-w)
- Tests: add passing test cases (#2438, thanks @georeith)
- Refactor improve performance using cache (#2374, thanks @meowtec)
- [meta]
CONTRIBUTING.md
: mention inactive PRs (#2546, thanks @stropho)
- [readme] make json for setting groups multiline (#2570, thanks @bertyhell)
- Tests: Tests for
import type
statements (#2459, thanks @golergka)
- Tests: fix one failing
import type
test case, submitted by @golergka, thanks @azyzz228
- [Docs] automate docs with eslint-doc-generator (#2582, thanks @bmish)
- [readme] Increase clarity around typescript configuration (#2588, thanks @Nfinished)
- [Docs] update
eslint-doc-generator
to v1.0.0 (#2605, thanks @bmish)
- Perf,
no-internal-modules
, no-restricted-paths
: use anyOf
instead of oneOf
(thanks @ljharb, @remcohaszing)
2.26.0 - 2022-04-05
Added
no-named-default
, no-default-export
, prefer-default-export
, no-named-export
, export
, named
, namespace
, no-unused-modules
: support arbitrary module namespace names (#2358, thanks @sosukesuzuki)
no-dynamic-require
: support dynamic import with espree (#2371, thanks @sosukesuzuki)
no-relative-packages
: add fixer (#2381, thanks @forivall)
Fixed
Changed
- Tests: add tests for node protocol URL (#2367, thanks @sosukesuzuki)
- Tests,
no-anonymous-default-export
, no-mutable-exports
, no-named-as-default-member
, no-named-as-default
: add tests for arbitrary module namespace names (#2358, thanks @sosukesuzuki)
- Docs: Fix RegExp escaping in readme (#2332, thanks @stephtr)
- Refactor: try to improve performance (#2340, thanks @ljharb)
- [Docs] make rule doc titles consistent (#2393, thanks @TheJaredWilcurt)
- Docs: TS code examples should use TS code blocks (#2411, thanks [@MM25Zamanian])
- Docs: fix link (#2417, thanks @kylemh)
2.25.4 - 2022-01-02
Fixed
importType
: avoid crashing on a non-string' (#2305, thanks @ljharb)
first
: prevent crash when parsing angular templates (#2210, thanks @ljharb)
importType
: properly resolve @/*
-aliased imports as internal (#2334, thanks @ombene)
named
/ExportMap
: handle named imports from CJS modules that use dynamic import (#2341, thanks @ludofischer)
Changed
- [
no-default-import
]: report on the token "default" instead of the entire node (#2299, thanks @pmcelhaney)
- Docs: Remove duplicate mention of default (#2280, thanks @johnthagen)
- [Deps] update
eslint-module-utils
2.25.3 - 2021-11-09
Fixed
Changed
2.25.2 - 2021-10-12
Fixed
- [Deps] update
eslint-module-utils
for real this time (#2255, thanks @ljharb)
2.25.1 - 2021-10-11
Fixed
- [Deps] update
eslint-module-utils
2.25.0 - 2021-10-11
Added
Fixed
Changed
2.24.2 - 2021-08-24
Fixed
2.24.1 - 2021-08-19
Fixed
Changed
2.24.0 - 2021-08-08
Added
Fixed
Changed
2.23.4 - 2021-05-29
Fixed
2.23.3 - 2021-05-21
Fixed
Changed
2.23.2 - 2021-05-15
Changed
- [meta] add
safe-publish-latest
; use prepublishOnly
script for npm 7+
2.23.1 - 2021-05-14
Fixed
2.23.0 - 2021-05-13
Added
Fixed
export
/TypeScript: properly detect export specifiers as children of a TS module block (#1889, thanks @andreubotella)
order
: ignore non-module-level requires (#1940, thanks @golopot)
no-webpack-loader-syntax
/TypeScript: avoid crash on missing name (#1947, thanks @leonardodino)
no-extraneous-dependencies
: Add package.json cache (#1948, thanks @fa93hws)
prefer-default-export
: handle empty array destructuring (#1965, thanks @ljharb)
no-unused-modules
: make type imports mark a module as used (fixes #1924) (#1974, thanks @cherryblossom000)
no-cycle
: fix perf regression (#1944, thanks @Blasz)
first
: fix handling of import = require
([#1963], thanks @MatthiasKunnen)
no-cycle
/extensions
: fix isExternalModule usage (#1696, thanks @paztis)
extensions
/no-cycle
/no-extraneous-dependencies
: Correct module real path resolution (#1696, thanks @paztis)
no-named-default
: ignore Flow import type and typeof (#1983, thanks @christianvuerings)
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
2.22.1 - 2020-09-27
Fixed
Changed
2.22.0 - 2020-06-26
Added
Fixed
Changed
2.21.2 - 2020-06-09
Fixed
2.21.1 - 2020-06-07
Fixed
- TypeScript: [
import/named
]: avoid requiring typescript
when not using TS (#1805, thanks @ljharb)
2.21.0 - 2020-06-07
Added
Fixed
group-exports
: Flow type export awareness (#1702, thanks @ernestostifano)
order
: Recognize pathGroup config for first group (#1719, #1724, thanks @forivall, @xpl)
no-unused-modules
: Fix re-export not counting as usage when used in combination with import (#1722, thanks @Ephem)
no-duplicates
: Handle TS import type (#1676, thanks @kmui2)
newline-after-import
: recognize decorators (#1139, thanks @atos1990)
no-unused-modules
: Revert "flow: add flow type support" (#1770, thanks @Hypnosphi)
- TypeScript: Add nested namespace handling (#1763, thanks @julien1619)
namespace
/ExportMap
: Fix interface declarations for TypeScript (#1764, thanks @julien1619)
no-unused-modules
: avoid order-dependence (#1744, thanks @darkartur)
no-internal-modules
: also check export from
syntax (#1691, thanks @adjerbetian)
- TypeScript:
export
: avoid a crash with export =
(#1801, thanks @ljharb)
Changed
[2.20.2] - 2020-03-28
Fixed
2.20.1 - 2020-02-01
Fixed
export
: Handle function overloading in *.d.ts
(#1619, thanks @IvanGoncharov)
no-absolute-path
: fix a crash with invalid import syntax (#1616, thanks @ljharb)
import/external-module-folders
setting now correctly works with directories containing modules symlinked from node_modules
(#1605, thanks @skozin)
extensions
: for invalid code where name
does not exist, do not crash (#1613, thanks @ljharb)
extensions
: Fix scope regex (#1611, thanks @yordis)
no-duplicates
: allow duplicate imports if one is a namespace and the other not (#1612, thanks @sveyret)
- Add some missing rule meta schemas and types (#1620, thanks @bmish)
named
: for importing from a module which re-exports named exports from a node_modules
module (#1569, #1447, thanks @redbugz, @kentcdodds)
order
: Fix alphabetize for mixed requires and imports (#1626, thanks @wschurman)
Changed
2.20.0 - 2020-01-10
Added
Fixed
Docs
2.19.1 - 2019-12-08
Fixed
2.19.0 - 2019-12-08
Added
internal-regex
setting: regex pattern for marking packages "internal" (#1491, thanks @Librazy)
group-exports
: make aggregate module exports valid (#1472, thanks @atikenny)
no-namespace
: Make rule fixable (#1401, thanks @TrevorBurnham)
- support
parseForESLint
from custom parser (#1435, thanks @JounQin)
no-extraneous-dependencies
: Implement support for bundledDependencies (#1436, thanks @schmidsi))
no-unused-modules
: add flow type support (#1542, thanks @rfermann)
order
: Adds support for pathGroups to allow ordering by defined patterns (#795, #1386, thanks @Mairu)
no-duplicates
: Add considerQueryString
option : allow duplicate imports with different query strings (#1107, thanks @pcorpet).
order
: Add support for alphabetical sorting of import paths within import groups (#1360, #1105, #629, thanks @duncanbeevers, @stropho, @luczsoma, @randallreedjr)
no-commonjs
: add allowConditionalRequire
option (#1439, thanks @Pessimistress)
Fixed
default
: make error message less confusing (#1470, thanks @golopot)
- Improve performance of
ExportMap.for
by only loading paths when necessary. (#1519, thanks @brendo)
- Support export of a merged TypeScript namespace declaration (#1495, thanks @benmunro)
order
: fix autofix to not move imports across fn calls (#1253, thanks @tihonove)
prefer-default-export
: fix false positive with type export (#1506, thanks @golopot)
extensions
: Fix ignorePackages
to produce errors (#1521, thanks @saschanaz)
no-unused-modules
: fix crash due to export *
(#1496, thanks @Taranys)
no-cycle
: should not warn for Flow imports (#1494, thanks @maxmalov)
order
: fix @someModule
considered as unknown
instead of internal
(#1493, thanks @aamulumi)
no-extraneous-dependencies
: Check export from
(#1049, thanks @marcusdarmstrong)
Docs
Changed
2.18.2 - 2019-07-19
Fixed
2.18.1 - 2019-07-18
Fixed
Refactors
2.18.0 - 2019-06-24
Added
Fixed
Docs
2.17.3 - 2019-05-23
Fixed
Docs
2.17.2 - 2019-04-16
Fixed
2.17.1 - 2019-04-13
Fixed
- require v2.4 of
eslint-module-utils
(#1322)
2.17.0 - 2019-04-13
Added
Fixed
order
: Fix interpreting some external modules being interpreted as internal modules (#793, #794 thanks @ephys)
- allow aliases that start with @ to be "internal" (#1293, #1294, thanks @jeffshaver)
- aliased internal modules that look like core modules (#1297, thanks @echenley)
namespace
: add check for null ExportMap (#1235, #1144, thanks @ljqx)
- [ExportMap] fix condition for checking if block comment (#1234, #1233, thanks @ljqx)
- Fix overwriting of dynamic import() CallExpression (
no-cycle
, no-relative-parent-imports
, no-unresolved
, no-useless-path-segments
) (#1218, #1166, #1035, thanks @vikr01)
export
: false positives for TypeScript type + value export (#1319, thanks @bradzacher)
export
: Support TypeScript namespaces (#1320, #1300, thanks @bradzacher)
Docs
Tests
2.16.0 - 2019-01-29
Added
Fixed
2.15.0 - 2019-01-22
Added
Fixed
2.14.0 - 2018-08-13
Added
Fixed
Refactors
- add explicit support for RestElement alongside ExperimentalRestProperty (thanks @ljharb)
2.13.0 - 2018-06-24
Added
Fixed
namespace
rule: ensure it works in eslint 5/ecmaVersion 2018 (thanks @ljharb)
2.12.0 - 2018-05-17
Added
2.11.0 - 2018-04-09
Added
Fixed
2.10.0 - 2018-03-29
Added
2.9.0 - 2018-02-21
Added
2.8.0 - 2017-10-18
Added
Changed
- Case-sensitivity checking ignores working directory and ancestors. (#720 + #858, thanks @laysent)
Fixed
2.7.0 - 2017-07-06
Changed
2.6.1 - 2017-06-29
Fixed
- update bundled node resolver dependency to latest version
2.6.0 - 2017-06-23
Changed
- update tests / peerDeps for ESLint 4.0 compatibility (#871, thanks @mastilver)
memo-parser
updated to require filePath
on parser options as it melts
down if it's not there, now that this plugin always provides it. (see #863)
2.5.0 - 2017-06-22
Re-releasing v2.4.0 after discovering that the memory leak is isolated to the memo-parser
,
which is more or less experimental anyway.
Added
2.4.0 - 2017-06-02 [YANKED]
Yanked due to critical issue in eslint-module-utils with cache key resulting from #839.
Added
2.3.0 - 2017-05-18
Added
Changed
Fixed
- attempt to fix crash in
no-mutable-exports
. (#660)
- "default is a reserved keyword" in no-maned-default tests by locking down babylon to 6.15.0 (#756, thanks @gmathieu)
- support scoped modules containing non word characters
2.2.0 - 2016-11-07
Fixed
- Corrected a few gaffs in the auto-ignore logic to fix major performance issues
with projects that did not explicitly ignore
node_modules
. (#654)
import/ignore
setting was only being respected if the ignored module didn't start with
an import
or export
JS statement
prefer-default-export
: fixed crash on export extensions (#653)
2.1.0 - 2016-11-02
Added
Fixed
2.0.1 - 2016-10-06
Fixed
- Fixed code that relied on removed dependencies. (#604)
2.0.0! - 2016-09-30
Added
unambiguous
rule: report modules that are not unambiguously ES modules.
recommended
shared config. Roughly errors
and warnings
mixed together,
with some parserOptions
in the mix. (#402)
react
shared config: added jsx: true
to parserOptions.ecmaFeatures
.
- Added
no-webpack-loader-syntax
rule: forbid custom Webpack loader syntax in imports. (#586, thanks @fson!)
- Add option
newlines-between: "ignore"
to order
(#519)
- Added
no-unassigned-import
rule (#529)
Breaking
Changed
imports-first
is renamed to first
. imports-first
alias will continue to
exist, but may be removed in a future major release.
- Case-sensitivity: now specifically (and optionally) reported by
no-unresolved
.
Other rules will ignore case-mismatches on paths on case-insensitive filesystems. (#311)
Fixed
1.16.0 - 2016-09-22
Added
Fixed
1.15.0 - 2016-09-12
Added
Fixed
1.14.0 - 2016-08-22
Added
import/parsers
setting: parse some dependencies (i.e. TypeScript!) with a different parser than the ESLint-configured parser. (#503)
Fixed
namespace
exception for get property from namespace
import, which are re-export from commonjs module (#499 fixes #416, thanks @wKich)
1.13.0 - 2016-08-11
Added
allowComputed
option for namespace
rule. If set to true
, won't report
computed member references to namespaces. (see #456)
Changed
Fixed
1.12.0 - 2016-07-26
Added
1.11.1 - 2016-07-20
Fixed
1.11.0 - 2016-07-17
Added
Fixed
1.10.3 - 2016-07-08
Fixed
- removing
Symbol
dependencies (i.e. for-of
loops) due to Node 0.10 polyfill
issue (see #415). Should not make any discernible semantic difference.
1.10.2 - 2016-07-04
Fixed
- Something horrible happened during
npm prepublish
of 1.10.1.
Several rm -rf node_modules && npm i
and gulp clean && npm prepublish
s later, it is rebuilt and republished as 1.10.2. Thanks @rhettlivingston for noticing and reporting!
1.10.1 - 2016-07-02 [YANKED]
Added
- Officially support ESLint 3.x. (peerDependencies updated to
2.x - 3.x
)
1.10.0 - 2016-06-30
Added
Fixed
- Fixed crash with
newline-after-import
related to the use of switch cases. (fixes #386, thanks @ljharb for reporting) (#395)
1.9.2 - 2016-06-21
Fixed
1.9.1 - 2016-06-16
Fixed
- Reordered precedence for loading resolvers. (#373)
1.9.0 - 2016-06-10
Added
Fixed
1.8.1 - 2016-05-23
Fixed
export * from 'foo'
now properly ignores a default
export from foo
, if any. (#328/#332, thanks @jkimbo)
This impacts all static analysis of imported names. (default
, named
, namespace
, export
)
- Make
order
's newline-between
option handle multiline import statements (#313, thanks @singles)
- Make
order
's newline-between
option handle not assigned import statements (#313, thanks @singles)
- Make
order
's newline-between
option ignore require
statements inside object literals (#313, thanks @singles)
prefer-default-export
properly handles deep destructuring, export * from ...
, and files with no exports. (#342+#343, thanks @scottnonnenberg)
1.8.0 - 2016-05-11
Added
Fixed
1.7.0 - 2016-05-06
Added
Fixed
extensions
: fallback to source path for extension enforcement if imported
module is not resolved. Also, never report for builtins (i.e. path
). (#296)
1.6.1 - 2016-04-28
Fixed
1.6.0 - 2016-04-25
Added
Changed
Fixed
named
now properly ignores the source module if a name is re-exported from
an ignored file (i.e. node_modules
). Also improved the reported error. (thanks to @jimbolla for reporting)
no-named-as-default-member
had a crash on destructuring in loops (thanks for heads up from @lemonmade)
1.5.0 - 2016-04-18
Added
Changed
- Rearranged rule groups in README in preparation for more style guide rules
Removed
- support for Node 0.10, via
es6-*
ponyfills. Using native Map/Set/Symbol.
1.4.0 - 2016-03-25
Added
- Resolver plugin interface v2: more explicit response format that more clearly covers the found-but-core-module case, where there is no path.
Still backwards-compatible with the original version of the resolver spec.
- Resolver documentation
Changed
- using
package.json/files
instead of .npmignore
for package file inclusion (#228, thanks @mathieudutour)
- using
es6-*
ponyfills instead of babel-runtime
1.3.0 - 2016-03-20
Major perf improvements. Between parsing only once and ignoring gigantic, non-module node_modules
,
there is very little added time.
My test project takes 17s to lint completely, down from 55s, when using the
memoizing parser, and takes only 27s with naked babel-eslint
(thus, reparsing local modules).
Added
- This change log (#216)
- Experimental memoizing parser
Fixed
- Huge reduction in execution time by only ignoring
import/ignore
setting if
something that looks like an export
is detected in the module content.
1.2.0 - 2016-03-19
Thanks @lencioni for identifying a huge amount of rework in resolve and kicking
off a bunch of memoization.
I'm seeing 62% improvement over my normal test codebase when executing only
no-unresolved
in isolation, and ~35% total reduction in lint time.
Changed
1.1.0 - 2016-03-15
Added
- Added an
ignore
option to no-unresolved
for those pesky files that no resolver can find. (still prefer enhancing the Webpack and Node resolvers to using it, though). See #89 for details.
1.0.4 - 2016-03-11
Changed
Fixed
- don't crash on self references (#210)
- correct cache behavior in
eslint_d
for deep namespaces (#200)
1.0.3 - 2016-02-26
Changed
- no-deprecated follows deep namespaces (#191)
Fixed
namespace
no longer flags modules with only a default export as having no names. (ns.default is valid ES6)
1.0.2 - 2016-02-26
Fixed
- don't parse imports with no specifiers (#192)
1.0.1 - 2016-02-25
Fixed
- export
stage-0
shared config
- documented
no-deprecated
- deep namespaces are traversed regardless of how they get imported (#189)
1.0.0 - 2016-02-24
Added
no-deprecated
: WIP rule to let you know at lint time if you're using deprecated functions, constants, classes, or modules.
Changed
Changed
- support for (only) ESLint 2.x
- no longer needs/refers to
import/parser
or import/parse-options
. Instead, ESLint provides the configured parser + options to the rules, and they use that to parse dependencies.
Removed
babylon
as default import parser (see Breaking)
0.13.0 - 2016-02-08
Added
Removed
- Removed vestigial
no-require
rule. no-commonjs
is more complete.
0.12.2 - 2016-02-06 [YANKED]
Unpublished from npm and re-released as 0.13.0. See #170.
0.12.1 - 2015-12-17
Changed
- Broke docs for rules out into individual files.
0.12.0 - 2015-12-14
Changed
- Ignore
import/ignore
setting if exports are actually found in the parsed module. Does this to support use of jsnext:main
in node_modules
without the pain of managing an allow list or a nuanced deny list.
0.11.0 - 2015-11-27
Added
- Resolver plugins. Now the linter can read Webpack config, properly follow aliases and ignore externals, dismisses inline loaders, etc. etc.!
Earlier releases (0.10.1 and younger)
See GitHub release notes
for info on changes for earlier releases.