Plugin: maintainability
Changelog
Release history and version updates for eslint-plugin-maintainability
Generated from the release history
Built from this package's CHANGELOG.md at deploy time, so it matches the
version these docs describe. The full cross-package history lives on the
changelog.
3.2.14
- Fix
no-unhandled-promisedroppedignoreInTestson.mts/.cts/.mjs/.cjs - Dependenciesupdated workspace dependencies:
@interlace/eslint-devkit@1.19.6
3.2.13
- Fix
identical-functionsnormalisation no longer erases or skips distinguishing text
3.2.12
- Fixfour false positives found by sweeping the plugins over a real corpus
- Fix
consistent-function-scopingtold a module-scope function to move to module scope - Fixthree false positives found by sweeping the plugins over a real corpus
3.2.11
- Fix
consistent-function-scopingwas silent on a helper capturing only a module-levelconst - Fix
identical-functionscompared comment prose as code, hiding duplicates behind a one-line/* */ - Dependenciesupdated workspace dependencies:
@interlace/eslint-devkit@1.19.5
3.2.10
- Fix
cognitive-complexitycharges a homogeneous run of logical operators once, not once per operator. The docs' Complexity Factors table scores logical operators "+1 |&&,||(sequence breaks)" — a run costs one point and only a break in the run starts the next — but everyLogicalExpressionnode was charged, soa && b && c && dcost 3 where the table says 1. That inflated every&&-heavy function against an unchanged Sonar-default threshold of 15. Mixed runs such asa && b || cstill cost 2, as two sequences should. - Fix
identical-functionsno longer groups a function with a closure nested inside it. An outer function whose body is largely one call taking an inline callback shares almost all its text with that callback, so the pair cleared the similarity threshold by construction — but they are one implementation, and "extract to a reusable function" is impossible advice, because lifting a closure out of its own parent removes no code. A triple-nestedforEachwas reported as "3 duplicates" of itself. Removes 6 of burgee's 24 findings for this rule.
3.2.9
- FixFP/FN sweep against the burgee corpus — three confirmed rule defects.
3.2.8
- Fix
consistent-function-scopingno longer reports a function that captures a sibling function declared in the same scope. Hoisting makes the sibling reachable from the outer scope, so the inner function cannot be moved there without breaking the reference — the rule was recommending a move that does not compile.
3.2.7
- Fix
no-silent-errors'sallowWithCommentno longer disarms the rest of the file
3.2.6
- Fix
consistent-function-scopingsees destructured bindings andthis - Fix
nested-complexity-hotspotsno longer countselse ifas a nesting level - Fix
identical-functionsstops calling private accessors identical - Fix
no-lonely-ifrequires theifto actually be alone
3.2.5
- Fix
no-missing-error-contextreads three more shapes of throw - Fix
no-unhandled-promiseno longer reports a promise whose value is used
3.2.4
- Fix
no-missing-error-contextaccepts a custom*Errorargument and a re-throw - Fix
consistent-function-scopingsees through a type assertion to module scope - Fix
no-unhandled-promiseno longer treats a function-typed parameter as its enclosing async function
3.2.3
- FixThe README logo now links to the plugin's own documentation.
3.2.2
- Fix
Promise['all']andp['then']are the same promise API - Maintenancethe promise-handling check no longer casts an unnameable member
- Dependenciesupdated workspace dependencies:
@interlace/eslint-devkit@1.19.0
3.2.1
- FixAdd an install-size badge to the README prelude, linking to each package's packagephobia page. npm renders the README from the last publish, so a badge only appears on npmjs.com after a release.
- Dependenciesupdated workspace dependencies:
@interlace/eslint-devkit@1.18.2
3.2.0
- Feature🐛 Fix — a template literal is a string, in 82 rules that disagreed
- Fix🐛 Fix —
no-unhandled-promisesilenced a promise passed as an argument - Dependenciesupdated workspace dependencies:
@interlace/eslint-devkit@1.18.0
3.1.2
- Fix
max-parametersno longer counts TypeScript'sthisparameter - Dependenciesupdated workspace dependencies:
@interlace/eslint-devkit@1.17.4
3.1.1
- Fixpoint
meta.docs.urlat documentation that exists #683 - Dependenciesupdated workspace dependencies:
@interlace/eslint-devkit@1.17.2
3.1.0
3.0.17
identical-functionsno longer erases the things that tell two functions #595
3.0.16
- Bound the TypeScript peer range and declare the React peer #499
3.0.15
- Correct the declared ESLint floor:
^8.0.0→^8.40.0. #407 - Make
identical-functions~35x faster without changing a single finding. #430 - Correct the ESLint peer range shown in the README Compatibility table. #423
meta.hasSuggestionsnow matches what each rule actually emits. #309- DependenciesUpdated internal dependencies
3.0.14
- Ship the JavaScript without tsc's layout. #411
- DependenciesUpdated internal dependencies
3.0.13
- Load rule modules on demand instead of at plugin load. #381
- Declare what we support, load only what we use #381
- Fix the
./oxlintsubpath export, which pointed atsrc/oxlint.js— a file no build produces.require('<package>/oxlint')threw MODULE_NOT_FOUND on every published package, while every README documented that exact wiring for oxlint'sjsPlugins. The export now points at the build output,dist/src/oxlint.js. #335 - Fix SDK peer declarations that npm silently ignored #335
- DependenciesUpdated internal dependencies
3.0.12
- Add the ecosystem and oxlint marks to the README logo row. Each plugin now #364
3.0.11
- Fix SDK peer declarations that npm silently ignored #358
- DependenciesUpdated internal dependencies
3.0.10
- Re-publish every package so npm carries the optimised artifact #338
- DependenciesUpdated internal dependencies
3.0.9
- Rewrite
descriptionandkeywordson every published package for npm search discovery. npm ranks on name, description, and keywords, and the registry only picks up these fields at publish — so this is metadata-only and takes effect for each package on its next release. #294 - DependenciesUpdated internal dependencies
3.0.8
- Docsdocs: dual-logo README header (Interlace mark + ESLint mark side by side) and closing Interlace footer — refreshes the README rendered on npmjs.com. No runtime changes. #269
- DependenciesUpdated internal dependencies
3.0.7
- Fix Codecov badge showing "unknown" — switch from flag to component URL format #252
3.0.6
- CI-only: pin all coverage thresholds at 100% (integration target, merges last). #225
3.0.5
- Fixfix: republish
recommendedpreset with the correct plugin namespace #200
3.0.4
- Fixfix: republish
recommendedwith correctly-namespaced, unscoped rule ids #197 - align codecov component IDs with full package names
- fix changelog header format across all packages
- Ofri Peretz
3.0.2
- align codecov component names and update docs components
- Ofri Peretz
3.0.1
- 📘 Launched new documentation site: eslint.interlace.tools
- 📝 Achieved 100% documentation parity (both .md and .mdx files)
1.0.0
- Initial stable release with 12 maintainability 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
recommended- Balanced maintainability thresholds- Single Responsibility:
max-lines-per-function,max-lines - Open/Closed:
prefer-early-return
3.2.15
- Fixfive FP/FN rule defects found by the burgee sweep
- Fix
cognitive-complexitycharges anelse ifa flat +1 instead of a nesting increment
Building secure JavaScript with Interlace? Star the repo to get new rules and CWE coverage as we ship them — or follow the AI-code-security benchmarks behind them.