Changelog
Release history and version updates for eslint-plugin-conventions
Live from GitHub
This changelog is fetched directly from CHANGELOG.md on GitHub and cached for 2 hours.
4.1.0
Minor Changes
-
#129
90b970cThanks @ofri-peretz! - Three new rules aterrorseverity enforcing the Observability cluster of the design philosophies (ANALYTICS_PHILOSOPHY.md + UTM_PHILOSOPHY.md):utm-taxonomy—utm_sourceandutm_mediumquery-param values in any URL string literal must match the fixed taxonomy. Free-text values (Blog,blog_v2,BLOG) destroy joinability in PostHog and are forbidden.no-raw-cross-property-href— Hand-written<a href="https://*.interlace.tools/…">and<a href="https://ofriperetz.dev/…">JSX literals are flagged. The blessed escape hatch is the per-propertybuildUtmHref()helper fromlib/utm.ts.analytics-event-naming— Vendor-neutral. Matches<obj>.capture()(PostHog),<obj>.track()(Segment / Mixpanel / Amplitude), and baretrack()(our primitive). Event names must followcategory:object_action(lowercase snake_case) with action from a fixed verb list;$-prefixed reserved events are exempt; template-literal event names are forbidden.
Also fixes
compareVersionsinexpiring-todo-commentsto normalise wildcards (24.xinengines.node) — without this,parseSemverreturnednulland the comparator falsely matched every>= engine TODOas expired. -
#148
82718c2Thanks @ofri-peretz! - feat(no-magic-numbers): add conventions/no-magic-numbers — closes prob_magic_numbers ILB-Arena-Quality FNFlags numeric literals that lack a named constant, catching the magic number code smell that makes intent unclear.
Built-in allowlist:
-1, 0, 1, 2are always allowed as universally idiomatic.Context-aware skips (by default):
const/export constdeclarations — the literal IS the named constant- Array index access:
items[3](ignoreArrayIndexes: true) - Default parameter values:
function f(n = 1000) {} - TypeScript enum initializers:
enum Status { Active = 1 } - Numeric object property keys:
{ 404: 'Not Found' }
Options:
ignore,ignoreArrayIndexes,ignoreDefaultValues,ignoreEnums,ignoreBitwiseExpressions.Added at
warnseverity inconventions/recommended.
Patch Changes
-
#154
62e67a1Thanks @ofri-peretz! -no-magic-numbers: add extract-const suggestion fixer. IDEs now offer a one-click "Extract to named constant" action that inserts aconst MAGIC_<value>declaration before the containing statement and replaces the literal. -
Updated dependencies [
736a5fe]:- @interlace/eslint-devkit@1.4.1
4.0.7 (2026-02-09)
This was a version bump only for eslint-plugin-conventions to align it with other projects, there were no code changes.
[4.0.5] - 2026-02-08
This was a version bump only for eslint-plugin-conventions to align it with other projects, there were no code changes.
[4.0.4] - 2026-02-08
Bug Fixes
- align codecov component IDs with full package names (2831b968)
Documentation
- fix changelog header format across all packages (c3a15082)
❤️ Thank You
- Ofri Peretz
[4.0.3] - 2026-02-06
Bug Fixes
- align codecov component names and update docs components (0a59a86c)
❤️ Thank You
- Ofri Peretz
[4.0.2] - 2026-02-02
This was a version bump only for eslint-plugin-conventions to align it with other projects, there were no code changes.
Changelog
All notable changes to eslint-plugin-conventions 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)
[4.0.1] - 2026-02-02
This was a version bump only for eslint-plugin-conventions to align it with other projects, there were no code changes.
[4.0.0] - 2026-02-02
This was a version bump only for eslint-plugin-conventions to align it with other projects, there were no code changes.
[3.0.0] - 2026-02-02
This was a version bump only for eslint-plugin-conventions to align it with other projects, there were no code changes.
[1.0.0] - 2026-01-26
Added
- Initial stable release with 9 convention 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-commented-code | Disallow commented-out code blocks | 💼 | ⚠️ |
expiring-todo-comments | Enforce expiration dates on TODO comments | 💼 | ⚠️ |
prefer-code-point | Prefer codePointAt over charCodeAt for Unicode | ||
prefer-dom-node-text-content | Prefer textContent over innerText for performance | ||
no-console-spaces | Disallow leading/trailing spaces in console calls | ||
no-deprecated-api | Disallow usage of deprecated Node.js APIs | 💼 | ⚠️ |
prefer-dependency-version-strategy | Enforce consistent version strategies | ||
filename-case | Enforce consistent file naming conventions | ||
consistent-existence-index-check | Enforce consistent array index existence checks |
Presets
recommended- Balanced conventions for most teams
Known Limitations
Documented in docs/KNOWN-LIMITATIONS.md:
filename-case: Framework-required names (e.g.,webpack.config.js) require manual exclude listsno-deprecated-api: May not detect usage through wrapper librariesexpiring-todo-comments: Requires consistent date formats (ISO 8601 recommended)