Changelog
Release history and version updates for eslint-plugin-modernization
Live from GitHub
This changelog is fetched directly from CHANGELOG.md on GitHub and cached for 2 hours.
[2.0.4] - 2026-02-08
2.1.0
Minor Changes
-
#148
82718c2Thanks @ofri-peretz! - feat+fix: ILB-Wild FP reduction + two new quality rulesno-unsafe-deserializationFP reduction (~112 FPs)- Track
fs.readFileSync('literal')calls inliteralPathFileVars— a file read with a hardcoded path (bundled config) is not user-controlled input for safe deserializers (JSON.parse, schema-validating parsers).eval()still fires even on literal-path reads.
no-buffer-overreadFP reduction (~129 FPs)- Remove
b(single-char, too broad) andchunk(too common for array chunks) from the Buffer alias heuristic —isBufferTypenow only matchesbufandbytesby name, reducing false matches on non-Buffer variables.
New rule:
modernization/prefer-template-literal- Flags
"string " + variableconcatenation and suggests the equivalent template literal. - Auto-fix produces the correct
`string ${variable}`replacement. - Pure string literal chains (
"a" + "b") and numeric addition are not flagged. - Closes P2 quality FN
prob_string_concatin the ILB-Arena-Quality bench.
New rule:
modularity/no-mutable-exports- Flags
export letandexport var— module exports should be immutableconstbindings so all importers share a stable reference. - Auto-fix replaces
let/varwithconst. - Closes P2 quality FN
prob_mutable_exportin the ILB-Arena-Quality bench.
- Track
Patch Changes
- Updated dependencies [
736a5fe]:- @interlace/eslint-devkit@1.4.1
Bug Fixes
- align codecov component IDs with full package names (2831b968)
Documentation
- fix changelog header format across all packages (c3a15082)
❤️ Thank You
- Ofri Peretz
[2.0.3] - 2026-02-06
Bug Fixes
- align codecov component names and update docs components (0a59a86c)
❤️ Thank You
- Ofri Peretz
[2.0.2] - 2026-02-02
This was a version bump only for eslint-plugin-modernization to align it with other projects, there were no code changes.
Changelog
All notable changes to eslint-plugin-modernization will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Documentation
- 📘 Launched new documentation site: eslint.interlace.tools
- 📝 Achieved 100% documentation parity (both .md and .mdx files)
[2.0.1] - 2026-02-02
This was a version bump only for eslint-plugin-modernization to align it with other projects, there were no code changes.
[2.0.0] - 2026-02-02
This was a version bump only for eslint-plugin-modernization to align it with other projects, there were no code changes.
[1.0.0] - 2026-01-26
Added
- Initial stable release with 3 modernization rules
- LLM-optimized error messages for AI-assisted development
- 100% test coverage across all rules
- ESLint 9 flat config support
- TypeScript type definitions for all rule options
Rules
| Rule | Description | 💼 | ⚠️ |
|---|---|---|---|
no-instanceof-array | Prefer Array.isArray() over instanceof Array | 💼 | |
prefer-at | Prefer Array.at() for negative index access (ES2022+) | 💼 | ⚠️ |
prefer-event-target | Prefer EventTarget over EventEmitter in browser code | 💼 | ⚠️ |
Presets
recommended- Balanced modernization for most projectsstrict- All rules as errors for aggressive modernization
Why These Rules?
no-instanceof-array
instanceof Array fails across different realms (iframes, workers). Array.isArray() is the correct, reliable check.
prefer-at
Array.at() provides cleaner negative index access and is part of ES2022. This rule helps migrate legacy arr[arr.length - 1] patterns.
prefer-event-target
EventTarget is the native browser API and doesn't require Node.js polyfills like EventEmitter. This rule helps migrate browser code to use native APIs.
Migration Path
These rules are designed for incremental adoption:
- Start with
recommendedpreset (warnings) - Fix violations as warnings appear
- Graduate to
strictpreset when ready