Changelog

A complete history of all changes, fixes, and new features in eslint-plugin-code-style.

Current version: v3.1.1. View GitHub Releases

v3.1.1

releaseApril 10, 2026

Next.js Framework Support & React Hook Placement Enforcement

Enhanced

  • prop-naming-convention - Skip Next.js framework-reserved prop names (reset, params, searchParams, children) used in special files like error.tsx, page.tsx, layout.tsx
  • component-props-inline-type - Skip Next.js special files (error.tsx, global-error.tsx, not-found.tsx, page.tsx, layout.tsx, template.tsx, loading.tsx, default.tsx) where prop interfaces are dictated by the framework
  • folder-based-naming-convention - Now detects React hooks (functions matching use[A-Z] pattern) placed outside the hooks/ folder and reports them with a clear "Move to hooks/ directory" message
  • folder-based-naming-convention - Added hooks to the recognized module folders
  • absolute-imports-only - Allow relative imports in Next.js root layout (app/layout.tsx), matching the existing exemption for main.tsx entry files

Fixed

  • All ESLint disable comments removed from the website (no rule disabling needed for Next.js framework conventions)

v3.1.0

releaseApril 10, 2026

Organization Migration, Automated Website Sync & Context7 Integration

**Version Range:** v3.0.6 → v3.1.0

Changed

  • Organization - Moved repository from Mohamed-Elhawary/eslint-plugin-code-style to ESLint-Plugin-Code-Style/plugin under a dedicated GitHub organization
  • Website - Extracted documentation website into a separate repository (ESLint-Plugin-Code-Style/website), fully independent with no local cross-repo dependencies
  • Structure - Moved docs/rules/ to rules/ at the root level, removed docs/ directory
  • Sync - Replaced manual website sync with fully automated pipeline via metadata.json and GitHub Actions (repository_dispatch)
  • Website - All hardcoded rule counts (30+ instances) replaced with dynamic imports from auto-generated data
  • URLs - Updated all GitHub URLs across README, AGENTS, package.json, recommended configs, and website source code to new org

Added

  • metadata.json - Single source of truth for all rule data, version, examples, options, and metadata consumed by the website
  • .github/workflows/sync-website.yml - GitHub Action to trigger website sync on plugin changes
  • context7.json - Context7 library ownership claim
  • Automated website pipeline: plugin push → GitHub Action → website fetches metadata + changelog → auto-generates rules.ts, config.ts, navigation.ts → Vercel deploys

Fixed

  • All ESLint errors in the documentation website resolved (plugin's own rules applied as showcase)
  • Removed all stale references to old docs/website/ structure
  • Removed validate-sync.js (redundant with automated sync)
Full Changelog

v3.0.6

April 2, 2026

Fixed

  • Website - Fix Vercel deployment failure by skipping sync validation on Vercel and adding fallback path resolution for CHANGELOG.md

v3.0.5

April 1, 2026

Added

  • Changelog page - New /docs/changelog page on the documentation website rendering the full version history with release badges and formatted entries

Fixed

  • Website - Restore 3 garbled text blocks in strings.ts (homepage subtitle, philosophy page descriptions) that were alphabetically sorted instead of forming proper sentences
  • array-callback-destructure - Fix broken goodExample in website (missing { for object destructuring syntax)
  • ternary-condition-multiline - Correct default value for maxOperands option from 2 to 3 in website documentation
  • function-object-destructure - Improve description to include dot-notation detection behavior
  • arrow-function-block-body - Align description with source code

Documentation

  • Unify example labels to plain text (// Good, // Bad) across all 17 rule documentation files
  • Unify navigation footer arrows to <- across all rule documentation files
  • Link changelog in footer and contributing page to internal /docs/changelog instead of GitHub

v3.0.4

April 1, 2026

Fixed

  • jsx-element-child-new-line - Remove duplicate error reporting with jsx-children-on-new-line on JSX expression containers like {children || }
  • simple-call-single-line - Prevent JSX corruption when arrow function body contains JSX inside logical/binary expressions (e.g., tabValue && (...))
  • simple-call-single-line - Resolve circular conflict with array-callback-destructure by skipping callbacks with destructured params having 2+ properties

v3.0.3

March 26, 2026

Added

  • SVG banner for README with before/after code panels showing 13 rule violations and their fixes
  • Website README (docs/website/README.md) with tech stack, setup guide, and project structure
  • Next.js compatibility mentioned in README Key Benefits and Features sections

Fixed

  • Correct all version ranges and full changelog links in CHANGELOG.md (13 entries fixed)
  • Update version range documentation in AGENTS.md to use immediately preceding tag

Documentation

  • Add version range and full changelog links to 6 release entries (v1.4.2, v1.4.0, v1.0.16, v1.0.14, v1.0.7, v1.0.6)

v3.0.2

March 26, 2026

Changed

  • Update website domain from eslint-plugin-code-style.vercel.app to www.eslint-plugin-code-style.org
  • Update all domain references across package.json, README.md, AGENTS.md, CHANGELOG.md, docs, and website metadata

v3.0.1

March 26, 2026

Fixed

  • Add .gitignore for docs website to exclude .next/ build artifacts and node_modules/ from version control
  • Pin @eslint/js version in all recommended config install commands (@^9 for v9, @^10 for v10)
  • Fix footer author link to use hawary.dev instead of GitHub profile
  • Import author URL dynamically from centralized metadata strings

Changed

  • Enhance website package.json with full metadata: description, license, author, homepage, repository, bugs, keywords, engines
  • Add comprehensive SEO metadata to website: Twitter card, authors, creator, publisher, robots, keywords, OpenGraph locale
  • Suppress hydration warnings on for browser extension compatibility

v3.0.0

releaseMarch 26, 2026

Documentation Website, Next.js Compatibility & ESLint v10 Support

**Version Range:** v2.2.5 → v3.0.0

Added

  • Production-quality documentation website (docs/website/) built with Next.js 15, React 19, Tailwind CSS v4, and TypeScript — deployed at https://www.eslint-plugin-code-style.org
  • ESLint v10 recommended configurations for all 4 project types (recommended-configs/v10/)
  • ESLint v10 test projects (_tests_/v10/) for all 4 project types
  • Website sync requirements in AGENTS.md and CLAUDE.md — complete checklist for keeping the website 100% in sync with plugin changes

Enhanced

  • function-naming-convention — Skip Next.js reserved exports (generateMetadata, generateStaticParams, generateViewport, GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS); add 16 new verbs (notify, broadcast, emit, dispatch, join, combine, bind, etc.)
  • folder-based-naming-convention — Skip Next.js special folder patterns ([slug], (group), @parallel, _private) inside app/ directory
  • folder-structure-consistency — Skip files inside Next.js app/ directory
  • module-index-exports — Skip Next.js reserved filenames (page, layout, loading, error, not-found, template, default, route, middleware)
  • Added .next/** to ignores in all recommended config and test project ESLint configs

Changed

  • Reorganized recommended configs into recommended-configs/v9/ and recommended-configs/v10/
  • Reorganized test projects into _tests_/v9/ and _tests_/v10/
  • Homepage URL changed to https://www.eslint-plugin-code-style.org
  • Website domain added to README.md and docs/rules/README.md

Removed

  • docs/frontend-guide/ folder (moved to separate repository)

BREAKING CHANGES

  • Recommended config paths changed: recommended-configs/react/recommended-configs/v9/react/ (same for all 4 variants)
  • Test project paths changed: _tests_/react/_tests_/v9/react/ (same for all 4 variants)
  • Removed docs/frontend-guide/ directory
Full Changelog

v2.2.5

March 3, 2026

Documentation

  • Add boilerplate samples folder (docs/frontend-guide/samples/) with ready-to-use ESLint configs, package.json files, EditorConfig, and Husky hook scripts for all 4 project variants (react, react-ts, react-tw, react-ts-tw)
  • Update EditorConfig in frontend standards guide to match project conventions

v2.2.4

March 3, 2026

Documentation

  • Add AI agent coding instructions (docs/frontend-guide/AGENTS.md) with complete, self-contained conventions for naming, formatting, imports/exports, React components, TypeScript, JSX, hooks, control flow, and string handling
  • Organize frontend guide files into docs/frontend-guide/ folder

v2.2.3

March 3, 2026

Documentation

  • Add comprehensive frontend project standards guide (docs/frontend-standards.md) covering ESLint setup, naming conventions, import/export rules, Husky pre-commit/pre-push hooks, EditorConfig, React component code order, TypeScript definition organization, and folder structure standards

v2.2.2

February 24, 2026

Enhanced

  • interface-format — Enforce verb-first ordering in interface names (e.g., AdminCreateInterfaceCreateAdminInterface) 🔧

v2.2.1

February 24, 2026

Fixed

  • folder-structure-consistency — Skip module folders (components, atoms, etc.) and organizational folders (shared, common) from single-child folder flattening detection

v2.2.0

releaseFebruary 24, 2026

New Rule, Component Naming Enhancements & Folder Flattening Detection

**Version Range:** v2.1.1 → v2.2.0

Added

  • hook-function-naming-convention - Enforce that exported hook function names match the camelCase of the file name (e.g., use-create-super-admin.ts must export useCreateSuperAdmin) 🔧
  • folder-based-naming-convention — Singularize plural folder names in component chain for named files (e.g., discount/types/code.tsxCodeTypeDiscount not CodeTypesDiscount); index files keep plural
  • folder-based-naming-convention — Configurable chainOrder option: "child-parent" (default) or "parent-child" with per-path overrides via files array
  • folder-structure-consistency — Detect unnecessary nesting when a folder has only one subfolder and no direct code files, suggesting flattening (e.g., discount/types/discount-types/)

Enhanced

  • folder-based-naming-convention — Now configurable with chainOrder and files options ⚙️
  • no-redundant-folder-suffix — Shared singularizeHandler extracted to module level for reuse

Fixed

  • function-object-destructure — Skip array method callbacks, add auto-fix for destructure-and-return pattern (from v2.1.1)

Stats

  • Total Rules: 81 (was 80)
  • Auto-fixable: 71 rules 🔧 (was 70)
  • Configurable: 20 rules ⚙️ (was 19)
  • Report-only: 10 rules
Full Changelog

v2.1.1

February 22, 2026

Fixed

  • function-object-destructure — Skip array method callbacks (.map(), .filter(), .find(), .forEach(), .reduce(), etc.) from the "no destructure in signature" check; array callbacks are handled by array-callback-destructure instead

Enhanced

  • function-object-destructure — Auto-fix arrow functions that only destructure and return: convert block body to expression body with destructured params (e.g., (item) => { const { label } = item; return label; }({ label }) => label)

v2.1.0

releaseFebruary 19, 2026

New Rule: Hook File Naming Convention + 18 Fixes & Enhancements

**Version Range:** v2.0.18 → v2.1.0

Added

  • hook-file-naming-convention - Enforce naming conventions for hook files inside hooks/ module subfolders: verb hooks must follow use-{verb}-{module-singular}, list hooks must follow use-{module-plural}-list

Enhanced

  • nested-call-closing-brackets — Collapse closing ) onto the same line as arrow function body for single-arg calls (block bodies, expression bodies, ternaries), removing trailing commas
  • opening-brackets-same-line — Collapse fn(\n () => to fn(() => for zero-param arrow callbacks; split destructured callback params with 2+ properties to multi-line; move arrow body to => line for destructured callback params
  • no-redundant-folder-suffix — Added exception for hook files (use-*) inside hooks/ folders, since they intentionally include the module name as required by hook-file-naming-convention

Fixed

  • folder-structure-consistency — Enforce consistency in nested subfolders (e.g., components/shared/), not just top-level module folders; treat index-file folders and folders with subdirectories as justified wrapping
  • no-redundant-folder-suffix — Detect plural folder suffix in file names (e.g., auth-interfaces.ts in interfaces/ folder), not just singular forms
  • folder-based-naming-convention — Flag PascalCase names in camelCase folders and auto-fix to camelCase; enforce PascalCase for providers/ folder; detect wrong-folder placement by suffix; enforce file name + folder chain in camelCase naming; add schemas folder with Schema suffix
  • single-argument-on-one-line — Collapse method chain inter-call line breaks; collapse method chains to one line when all calls have ≤1 simple argument; skip multi-line template literals
  • no-hardcoded-strings — Fix Tailwind class regex to handle decimal values; detect any function call inside className as a class utility; skip strings inside class utility calls; added missing single-word Tailwind utilities
  • component-naming — Skip generic grouping folders (shared, common, ui, base, general, core) when chaining folder names
  • opening-brackets-same-line — Collapse BinaryExpression, LogicalExpression, and UnaryExpression in JSX attributes to single line
  • function-arguments-format — Remove trailing comma for single template literal arguments; skip single TemplateLiteral arguments
  • type-annotation-spacing — No trailing comma on last generic type parameter; single generic collapses inline; multiple generics expand to separate lines
  • type-format — Enforce trailing comma on last property; detect nested type literals inside array types; closing brace on own line for 2+ properties; single-property collapse; union types with multi-property objects stay expanded; intersection type formatting
  • function-object-destructure — Recognize components inside React.forwardRef(), memo(), observer() wrapper calls
  • enum-type-enforcement — Auto-fix only replaces string literals when enum exists in scope
  • variable-naming-convention — Allow PascalCase for component re-exports from PascalCase namespaces
  • function-params-per-line — Destructured properties in callback arrow params get one-per-line formatting
  • arrow-function-simple-jsx — Fixed multiline JSX collapse and missing space after =>
  • classname-multiline — Added CallExpression handler for class utility calls
  • absolute-imports-only — Auto-fix deep import violations; auto-fix absolute imports to relative within same module
  • component-props-inline-type — Skip qualified library types (React.HTMLAttributes, etc.)

Stats

  • Total Rules: 80 (was 79)
  • Auto-fixable: 70 rules 🔧
  • Configurable: 19 rules ⚙️
  • Report-only: 10 rules (was 9)
Full Changelog

v2.0.18

February 15, 2026

Fixed

  • folder-structure-consistency — Enforce consistency in nested subfolders (e.g., components/shared/), not just top-level module folders; treat index-file folders and folders with subdirectories as justified wrapping

v2.0.17

February 15, 2026

Fixed

  • no-redundant-folder-suffix — Detect plural folder suffix in file names (e.g., auth-interfaces.ts in interfaces/ folder, user-actions.ts in actions/ folder), not just singular forms

v2.0.16

February 15, 2026

Enhanced

  • nested-call-closing-brackets — Collapse closing ) onto the same line as arrow function body for single-arg calls (block bodies, expression bodies, ternaries), removing trailing commas
  • opening-brackets-same-line — Collapse fn(\n () => to fn(() => for zero-param arrow callbacks; split destructured callback params with 2+ properties to multi-line; move arrow body to => line for destructured callback params

v2.0.15

February 13, 2026

Fixed

  • folder-based-naming-convention — Flag PascalCase names in camelCase folders (data, constants, schemas, services, reducers, strings) and auto-fix to camelCase (e.g., ApisDataapisData, ButtonsConstantsbuttonsConstants)

v2.0.14

February 13, 2026

Fixed

  • folder-based-naming-convention — Enforce PascalCase for providers/ folder exports regardless of JSX return (e.g., authProvider = createStore(...)AuthProvider); detect exports with suffixes belonging to a different folder (e.g., AuthProvider in contexts/ reports "belongs in providers/ folder")

v2.0.13

February 13, 2026

Fixed

  • folder-based-naming-convention — Detect exports with suffixes belonging to a different folder (e.g., AuthProvider in contexts/ reports "belongs in providers/ folder, not contexts/" instead of trying to rename)

v2.0.12

February 13, 2026

Fixed

  • single-argument-on-one-line — Collapse method chain inter-call line breaks: when a chain has calls split across lines, collapse them onto one line while preserving multi-line argument formatting (e.g., string().\n required(arg).\n min(\n a,\n b,\n )string().required(arg).min(\n a,\n b,\n))

v2.0.11

February 13, 2026

Fixed

  • folder-based-naming-convention — Enforce file name + folder chain in camelCase folder naming: every export must end with {FileName}{FolderChain}{Suffix} (e.g., buttonTypeDatabuttonTypeAppData in data/app.js, forgotPasswordSchemaforgotPasswordAuthSchema in schemas/auth/forgot-password.ts)

v2.0.10

February 12, 2026

Fixed

  • folder-based-naming-convention — Add schemas folder with Schema suffix and camelCase naming; enforce folder chain segments in camelCase folder naming

v2.0.9

February 12, 2026

Fixed

  • single-argument-on-one-line — Collapse method chains to one line when all calls have ≤1 simple argument (e.g., string().required(arg).email(arg))
  • folder-based-naming-convention — Add schemas folder with Schema suffix and camelCase naming (e.g., schemas/auth/forgot-password.tsforgotPasswordAuthSchema)

v2.0.8

February 12, 2026

Fixed

  • no-hardcoded-strings — Fix Tailwind class regex to handle decimal values (py-1.5, gap-2.5, text-base/7)
  • no-hardcoded-strings — Detect any function call inside a className JSX attribute as a class utility (no longer limited to cn, cva, clsx — works with custom names like generateClassNameHandler)

v2.0.7

February 12, 2026

Fixed

  • component-naming — Skip generic grouping folders (shared, common, ui, base, general, core) when chaining folder names into component names (e.g., components/shared/page-header.tsxPageHeader, not PageHeaderShared)

v2.0.6

February 12, 2026

Fixed

  • openingBracketsSameLine — Collapse BinaryExpression, LogicalExpression, and UnaryExpression in JSX attributes to single line (e.g., collapsible={type === "single"})
  • function-arguments-format — Remove trailing comma and move closing paren for single template literal arguments (e.g., cva(\...\,\n)cva(\...\))
  • type-annotation-spacing — No trailing comma on last generic type parameter (fixes TypeScript error ts(1009))

v2.0.5

February 11, 2026

Fixed

  • function-arguments-format — Actively fix cva(\n \...\,\n) back to cva(\...\) for single template literal arguments
  • type-annotation-spacing — Single generic type parameter collapses inline without trailing comma (e.g., forwardRef>)
  • type-annotation-spacing — Multiple generic type parameters expand to separate lines with trailing commas
  • type-annotation-spacing — Skip multiline formatting for short generics (e.g., Record)

v2.0.4

February 11, 2026

Fixed

  • function-arguments-format — Skip single TemplateLiteral arguments so cva(\...\) with multi-line Tailwind classes is not reformatted
  • type-format — Enforce trailing comma on last property in multi-member types (nested and expanded types were missing it)
  • type-format — Detect nested type literals inside array types ({ label: string }[]) for single-prop collapse and multi-prop expansion

v2.0.3

February 11, 2026

Fixed

  • function-object-destructure — Recognize components inside React.forwardRef(), memo(), observer() and other wrapper calls (no longer falsely reports destructured props)
  • type-format — Closing brace must be on its own line for types with 2+ properties
  • type-format — Single-property type aliases collapse to one line (e.g., type FooType = { bar: string })
  • type-format — Nested type literals with 2+ properties get expanded to separate lines with proper formatting
  • type-format — Union types with multi-property object members stay expanded (no longer collapsed to one line)
  • single-argument-on-one-line — Skip multi-line template literals (fixes conflict with Tailwind class strings in cva(), clsx(), etc.)

v2.0.2

February 11, 2026

Fixed

  • enum-type-enforcement — Auto-fix now only replaces string literals with enum references when the enum exists in scope; degrades to report-only otherwise
  • variable-naming-convention — Allow PascalCase for component re-exports from PascalCase namespaces (const Select = SelectPrimitive.Root) and dynamic component patterns (const Comp = asChild ? Slot : "button")
  • type-format — Added intersection type formatting: single-prop types collapse inline, all & members on same line as =
  • function-params-per-line — Destructured properties in callback arrow params now get one-per-line formatting (e.g., forwardRef callbacks)
  • arrow-function-simple-jsx — Fixed line length calculation for multiline callbacks so => correctly collapses; fixed skip check to use arrow token position instead of full node span
  • no-hardcoded-strings — Skip strings inside class utility calls (cn, cva, clsx, twMerge, classnames, cx, tv, twJoin); added missing single-word Tailwind utilities (peer, border, group, rounded, grow, shrink); fixed regex for hyphenated modifiers (focus-visible:) and arbitrary selectors ([&_svg]:)
  • classname-multiline — Added CallExpression handler for class utility calls (cn, cva, clsx, etc.) including cva/tv variant object values
  • absolute-imports-only — Added auto-fix for deep import violations (@/utils/index@/utils)
  • component-props-inline-type — Skip qualified library types (React.HTMLAttributes, React.ComponentProps, etc.) that can't be reasonably inlined

v2.0.1

February 10, 2026

Fixed

  • arrow-function-simple-jsx — Auto-fix now correctly collapses multiline JSX (without parens) by replacing from => token end instead of just the body node
  • arrow-function-simple-jsx — Detect and fix missing space after => for all arrow functions (e.g., () =>{() => {, () =>

    () =>

    )

Docs

  • Added npm run build step to AGENTS.md bug fix checklist and testing section
  • Added build + test steps to README.md Contributing section

v2.0.0

releaseFebruary 9, 2026

Modular Source Architecture + Minified Build

**Version Range:** v1.20.0 → v2.0.0

Changed

  • BREAKING: Modular source architecture — Split monolithic 23K-line index.js into src/ with 17 category files + shared utilities
  • Build system — Added esbuild to bundle and minify src/ into dist/index.js
  • Package entry pointmain and exports now point to dist/index.js instead of index.js
  • npm package — Publishes dist/index.js instead of root index.js; removed root index.js from package

Added

  • esbuild.config.js — Build configuration
  • esbuild as devDependency
  • npm run build script

Stats

  • Total Rules: 79
  • Auto-fixable: 70 rules 🔧
  • Configurable: 19 rules ⚙️
  • Report-only: 9 rules
  • Unpacked size: ~400 KB (was ~1.26 MB)
Full Changelog

v1.20.0

releaseFebruary 9, 2026

README Reorganization — Split Rules Reference into docs/rules/

**Version Range:** v1.19.0 → v1.20.0

Added

  • Rules Reference Documentation (docs/rules/) — 17 category files with detailed rule documentation, examples, and configuration options
  • Rules index page (docs/rules/README.md) — Overview table linking to all 17 category files

Changed

  • README.md — Reorganized from ~4,150 lines to ~475 lines by moving detailed rule documentation to docs/rules/
  • Recommended config READMEs — Updated rule documentation links to point to docs/rules/ instead of main README
  • AGENTS.md — Updated documentation references to reflect new docs/rules/ structure
  • package.json — Added docs/ to npm files array
Full Changelog

v1.19.0

releaseFebruary 9, 2026

New: React + Tailwind Test Project & Recommended Config

**Version Range:** v1.18.0 → v1.19.0

Added

  • React + Tailwind test project (_tests_/v9/react-tw/) — React + Tailwind CSS project (no TypeScript) with 70 code-style rules enabled and Tailwind CSS v4 plugin
  • React + Tailwind recommended config (recommended-configs/react-tw/) — Ready-to-use ESLint flat config for React + Tailwind CSS projects without TypeScript

Changed

  • Updated Available Configurations table in README.md — React + Tailwind now links to config instead of "Coming Soon"
  • Updated AGENTS.md — React + Tailwind marked as Available with folder paths
Full Changelog

v1.18.0

releaseFebruary 9, 2026

New: React + TypeScript Test Project & Recommended Config

**Version Range:** v1.17.2 → v1.18.0

Added

  • React + TypeScript test project (_tests_/v9/react-ts/) — React + TypeScript project (no Tailwind) with all 79 code-style rules enabled and @typescript-eslint parser
  • React + TypeScript recommended config (recommended-configs/react-ts/) — Ready-to-use ESLint flat config for React + TypeScript projects without Tailwind CSS

Changed

  • Updated Available Configurations table in README.md — React + TypeScript now links to config instead of "Coming Soon"
  • Updated AGENTS.md — React + TypeScript marked as Available with folder paths
Full Changelog

v1.17.2

February 9, 2026

Fixed

  • folder-based-naming-convention - Fix camelCase naming enforcement for constants, data, reducers, services, and strings folders

v1.17.1

February 9, 2026

Fixed

  • index-exports-only - Enforce dual index file behavior for wrapped folder structure
  • no-redundant-folder-suffix - Detect file name matching parent folder name (e.g., assessment/assessment.tsx → use assessment/index.tsx)

v1.17.0

releaseFebruary 9, 2026

New Rule + Enhancements to Naming & Import Rules

**Version Range:** v1.16.0 → v1.17.0

Added

  • inline-export-declaration - Enforce inline export declarations (export const x = ...) instead of grouped export statements (export { x }) in non-index files 🔧

Enhanced

  • folder-based-naming-convention - Extended camelCase suffix enforcement for data/constants/strings/services/reducers folders
  • absolute-imports-only - Files within the same module folder must use relative imports instead of absolute to avoid circular dependencies 🔧
  • folder-structure-consistency - Added loose module file detection: standalone files matching module folder names (e.g., data.js, strings.js) are flagged — must use folder structure instead

Stats

  • Total Rules: 79 (was 78)
  • Auto-fixable: 70 rules (was 69) 🔧
  • Configurable: 19 rules (was 18)
  • Report-only: 9 rules (was 10)
Full Changelog

v1.16.0

releaseFebruary 9, 2026

New Rule + Enhancements + Rule Renames

**Version Range:** v1.15.0 → v1.16.0

Added

  • folder-structure-consistency - Enforce consistent folder structure (flat vs wrapped) in module folders

Enhanced

  • folder-based-naming-convention (renamed from folder-component-suffix)
  • no-redundant-folder-suffix - Also check folder names for redundant suffixes (e.g., views/access-control-view/ is now flagged)

Renamed

  • folder-component-suffixfolder-based-naming-convention (now handles more than just components)
  • svg-component-icon-namingsvg-icon-naming-convention (consistent with other naming convention rules)

Stats

  • Total Rules: 78 (was 77)
  • Auto-fixable: 67 rules
  • Configurable: 18 rules (was 17)
  • Report-only: 11 rules (was 10)
Full Changelog

v1.15.0

releaseFebruary 6, 2026

New Rule: no-redundant-folder-suffix

**Version Range:** v1.14.4 → v1.15.0

Added

  • no-redundant-folder-suffix - Disallow file names that redundantly include the parent or ancestor folder name as a suffix

Enhanced

  • folder-component-suffix - Add layouts folder support: components in layouts/ must end with "Layout" suffix (with auto-fix) (v1.14.4)
  • type-annotation-spacing - Add auto-fix to collapse function types with ≤2 params to one line; add spacing rules for async keyword and function types (v1.14.2–v1.14.3)
  • interface-format - Fix circular fix conflict by skipping collapse when property has multi-line function type (v1.14.3)
  • function-naming-convention - Detect functions destructured from hooks without proper naming, with auto-fix (v1.14.1)

Stats

  • Total Rules: 77 (was 76)
  • Auto-fixable: 67 rules 🔧
  • Configurable: 17 rules ⚙️
  • Report-only: 10 rules (was 9)
Full Changelog

v1.14.4

February 6, 2026

Enhanced

  • folder-component-suffix - Add layouts folder support: components in layouts/ must end with "Layout" suffix (with auto-fix)

v1.14.3

February 5, 2026

Enhanced

  • type-annotation-spacing - Add auto-fix to collapse function types with 2 or fewer params to one line
  • interface-format - Fix circular fix conflict by skipping collapse when property has multi-line function type

v1.14.2

February 5, 2026

Enhanced

  • type-annotation-spacing - Add spacing rules for async keyword and function types:
  • interface-format - Skip collapsing single-property interfaces when property has function type with 3+ params

v1.14.1

February 5, 2026

Enhanced

  • function-naming-convention - Detect functions destructured from hooks without proper naming

v1.14.0

releaseFebruary 5, 2026

New Rule: useState Naming Convention

**Version Range:** v1.13.0 → v1.14.0

Added

  • use-state-naming-convention - Enforce boolean useState variables to start with valid prefixes 🔧

Enhanced

  • folder-component-suffix - Add auto-fix to rename component and all references in the file
  • function-naming-convention - Detect useCallback-wrapped functions in custom hooks
  • prop-naming-convention - Auto-fix now renames both type annotation AND destructured parameter with all usages

Stats

  • Total Rules: 76 (was 75)
  • Auto-fixable: 67 rules 🔧
  • Configurable: 17 rules ⚙️
  • Report-only: 9 rules
Full Changelog

v1.13.0

releaseFebruary 5, 2026

New Rule: Prop Naming Convention & Auto-Fix Enhancements

**Version Range:** v1.12.1 → v1.13.0

Added

  • prop-naming-convention - Enforce naming conventions for boolean and callback props 🔧

Enhanced

  • enum-format - Add auto-fix for member names (convert to UPPER_SNAKE_CASE)
  • interface-format - Add auto-fix for property names (convert to camelCase); collapse single-member nested object types to one line
  • type-format - Add auto-fix for property names (convert to camelCase); collapse single-member nested object types to one line; union type formatting with configurable threshold (minUnionMembersForMultiline option, default 5)

Stats

  • Total Rules: 75 (was 74)
  • Auto-fixable: 66 rules 🔧
  • Configurable: 17 rules ⚙️
  • Report-only: 9 rules
Full Changelog

v1.12.1

February 4, 2026

Fixed

  • function-object-destructure - Skip when param is used in spread operations, exclude object property keys from reference counting
  • no-empty-lines-in-function-params - Only check parens within function's own range (fix for .map(config => ...) false positives)
  • jsx-children-on-new-line - Remove blank line check after opening tag (handled by no-empty-lines-in-jsx rule)

v1.12.0

releaseFebruary 4, 2026

New Rule: Folder Component Suffix

**Version Range:** v1.11.9 → v1.12.0

Added

  • folder-component-suffix - Enforce naming conventions based on folder location:

Stats

  • Total Rules: 74 (was 73)
  • Auto-fixable: 65 rules 🔧
  • Report-only: 9 rules
Full Changelog

v1.11.9

February 4, 2026

Fixed

  • variable-naming-convention - Enforce camelCase for object property keys (no longer allows SCREAMING_SNAKE_CASE like APP_NAME)
  • variable-naming-convention - Add auto-fix to convert property names to camelCase (e.g., APP_NAMEappName)

v1.11.8

February 4, 2026

Fixed

  • comment-format - Allow /* */ syntax for ESLint directive comments (/* eslint-disable ... */, /* eslint-enable ... */, etc.) since these must use block comment syntax

v1.11.7

February 4, 2026

Changed

  • no-hardcoded-strings

v1.11.6

February 4, 2026

Changed

  • no-hardcoded-strings

v1.11.5

February 4, 2026

Fixed

  • no-hardcoded-strings

v1.11.4

February 4, 2026

Fixed

  • opening-brackets-same-line
  • jsx-children-on-new-line / jsx-element-child-new-line

v1.11.3

February 4, 2026

Fixed

  • no-hardcoded-strings
  • opening-brackets-same-line

v1.11.2

February 4, 2026

Fixed

  • no-hardcoded-strings
  • ternary-condition-multiline
  • no-inline-type-definitions

v1.11.1

February 3, 2026

Fixed

  • component-props-inline-type - Single-property type annotations spanning multiple lines now auto-fix to single line format { prop: Type }
  • function-params-per-line - Normalize single-member type annotations to prevent circular fix conflicts

v1.11.0

releaseFebruary 3, 2026

New Rule: svg-component-icon-naming + Multiple Component Props Fixes

**Version Range:** v1.10.3 → v1.11.0

Added

  • svg-component-icon-naming - Enforce SVG components to have 'Icon' suffix and vice versa

Fixed

  • component-props-inline-type - Single prop trailing comma now correctly removed (was not detecting comma in member range)
  • component-props-inline-type - Closing }) now properly placed on its own line for multiple type props (was missing for non-intersection types)
  • function-params-per-line - Type annotations no longer removed when collapsing params (was losing entire type annotation)
  • function-params-per-line - Default values preserved for shorthand props (e.g., className = "" no longer becomes className)
  • function-params-per-line - Type annotation complexity now considered (2+ type props = complex, prevents incorrect collapsing)

Stats

  • Total Rules: 73 (was 72)
  • Auto-fixable: 65 rules
  • Report-only: 8 rules
Full Changelog

v1.10.3

February 3, 2026

Fixed

  • no-hardcoded-strings - Skip template literals inside className/style attributes (Tailwind classes in template literals)
  • component-props-inline-type - Auto-fix to REMOVE trailing comma for single property (not just skip adding it)

v1.10.2

February 3, 2026

Fixed

  • component-props-inline-type - Don't require trailing comma for single property in inline type definitions
  • no-hardcoded-strings - Skip 40+ SVG attributes (strokeLinecap, strokeLinejoin, filter, result, in, in2, mode, colorInterpolationFilters, etc.)
  • no-hardcoded-strings - Skip SVG standard attribute values (round, butt, square, miter, bevel, none, normal, sRGB, userSpaceOnUse, etc.)
  • no-hardcoded-strings - Skip URL references (url(#...)) and scientific notation numbers
  • no-hardcoded-strings - Skip CSS property values (cursor: pointer, display: flex, position: absolute, etc.)
  • no-hardcoded-strings - Skip SVG filter result identifiers (BackgroundImageFix, SourceGraphic, etc.)

v1.10.1

February 3, 2026

Fixed

  • logical-expression-multiline - Add collapse to single line for simple expressions (≤3 operands)
  • logical-expression-multiline - Skip collapsing when any operand is multiline (e.g., JSX elements)

v1.10.0

releaseFebruary 3, 2026

New Rule: logical-expression-multiline + Enhanced no-hardcoded-strings

**Version Range:** v1.9.7 → v1.10.0

Added

  • logical-expression-multiline - Enforce multiline formatting for logical expressions with more than maxOperands (default: 3) 🔧

Enhanced

  • no-hardcoded-strings - Major improvements:

Fixed

  • no-hardcoded-strings - Fix detection of strings inside exported components
  • no-hardcoded-strings - Fix Tailwind detection being too broad (now requires actual Tailwind syntax)

Stats

  • Total Rules: 72 (was 71)
  • Auto-fixable: 65 rules 🔧 (was 64)
  • Report-only: 7 rules
Full Changelog

v1.9.7

February 3, 2026

Fixed

  • no-hardcoded-strings - Fix Tailwind detection being too broad:

v1.9.6

February 3, 2026

Enhanced

  • no-hardcoded-strings - Skip Tailwind CSS class strings:

v1.9.5

February 3, 2026

Fixed

  • no-hardcoded-strings - Fix bug where strings inside exported components were incorrectly skipped:

v1.9.4

February 3, 2026

Enhanced

  • no-hardcoded-strings - Skip UI component patterns only in JSX attributes:

v1.9.3

February 3, 2026

Enhanced

  • no-hardcoded-strings - Remove single-word string length limitations and add more special cases:

v1.9.2

February 3, 2026

Enhanced

  • no-hardcoded-strings - Now detects special strings that should be enums:

Fixed

  • no-hardcoded-strings - Fixed bug where isInConstantsObjectHandler incorrectly matched camelCase variable names due to case-insensitive regex flag

v1.9.1

February 3, 2026

Enhanced

  • no-hardcoded-strings - Initial special string detection:

v1.9.0

releaseFebruary 3, 2026

New Rule: class-method-definition-format + Enhanced Spacing Rules

**Version Range:** v1.8.4 → v1.9.0

Added

  • class-method-definition-format - Enforce consistent spacing in class and method definitions 🔧

Enhanced

  • function-call-spacing - Now also handles:
  • member-expression-bracket-spacing - Now also handles:

Stats

  • Total Rules: 71 (was 70)
  • Auto-fixable: 64 rules 🔧 (was 63)
  • Report-only: 7 rules
Full Changelog

v1.8.4

February 3, 2026

Documentation

  • Add missing comparison links in CHANGELOG.md (v1.3.9 through v1.8.3)
  • Update manage-rule skill with CHANGELOG format requirements for new rules
  • Update Current releases list in AGENTS.md to include v1.8.0

v1.8.3

February 3, 2026

Fixed

  • class-naming-convention - Auto-fix now renames all references to the class (including instantiations like new ClassName() and type annotations), not just the class declaration

v1.8.2

February 3, 2026

Changed

  • multiline-if-conditions - Remove configurable maxNestingLevel option; nesting level is now fixed at 2 to prevent overly complex conditions. Nested groups with >maxOperands are formatted multiline inline (not extracted). Extraction only occurs when nesting exceeds 2 levels.
  • ternary-condition-multiline - Remove configurable maxNestingLevel option; nesting level is now fixed at 2 to prevent overly complex conditions. Nested groups with >maxOperands are formatted multiline inline (not extracted). Extraction only occurs when nesting exceeds 2 levels.
  • opening-brackets-same-line - Skip ternary condition tests and detect intentional multiline format to prevent rule conflicts
  • if-statement-format - Detect intentional multiline conditions to prevent collapsing formatted conditions

Documentation

  • Update both rules to show multiline inline formatting examples instead of extraction
  • Remove maxNestingLevel option from documentation (now fixed internally)

v1.8.1

February 3, 2026

Changed

  • function-naming-convention - Add handleXxxxxxHandler auto-fix (converts handleClick to clickHandler instead of handleClickHandler)

v1.8.0

releaseFebruary 3, 2026

New Rule: no-hardcoded-strings

**Version Range:** v1.7.6 → v1.8.0

Added

  • no-hardcoded-strings - Enforce importing strings from constants/strings modules instead of hardcoding them inline 🔧

Changed

  • absolute-imports-only - Add strings, @constants, @strings to default allowed folders
  • module-index-exports - Add strings, @constants, @strings to default module folders

Stats

  • Total Rules: 70 (was 69)
  • Auto-fixable: 63 rules 🔧
  • Report-only: 7 rules (was 6)
Full Changelog

v1.7.6

February 2, 2026

Changed

  • ternary-condition-multiline - Now depends only on operand count, not line length:

v1.7.5

February 2, 2026

Fixed

  • ternary-condition-multiline - For ≤3 operands, always collapse to single line when ? is on different line than condition end (enforces condition ? value : value format for simple ternaries)
  • no-empty-lines-in-function-params - Add detection for empty lines in TSTypeLiteral (type annotation objects like { prop: Type } in intersection types)

v1.7.4

February 2, 2026

Fixed

  • no-empty-lines-in-function-params - Fix bug that deleted TypeScript type annotations when fixing empty lines in destructured params; now uses getTokenAfter instead of getLastToken to find closing brace
  • no-inline-type-definitions - Change threshold comparison from > to >= so 2-member unions are now flagged (with default maxUnionMembers: 2)
  • ternary-condition-multiline - Fix multiline formatting for >3 operands: first operand stays on same line as property key, ? and : each on their own lines; fix circular fix bug for ≤3 operands case

v1.7.3

February 2, 2026

Fixed

  • ternary-condition-multiline - Fix ?/: on own line without value; collapse simple ternaries to single line when they fit
  • no-empty-lines-in-function-params - Detect empty lines after opening { and before closing } in ObjectPattern params
  • empty-line-after-block - Skip consecutive if statements (already handled by if-else-spacing)
  • classname-multiline - Fix closing backtick alignment for return statements

Documentation

  • Add 6 missing rules to README detailed documentation
  • Add 7 missing rules to README Quick Start example
  • Update rule counts from 66 to 69 across all documentation files
  • Update AGENTS.md Tailwind section with actual rules and comparison with tailwindcss/classnames-order
  • Add README multi-section update warnings to AGENTS.md rule modification checklists

Added

  • manage-rule skill - New skill for adding, editing, or removing ESLint rules with complete workflow

v1.7.2

February 2, 2026

Fixed

  • enum-format - Fix double comma bug when auto-fixing trailing comma and closing brace position; check for comma token after member, not just member text
  • interface-format - Same fix as enum-format for trailing comma detection

v1.7.1

February 2, 2026

Fixed

  • no-empty-lines-in-function-params - Detect empty lines between destructured properties inside ObjectPattern params
  • component-props-inline-type - Handle TSIntersectionType (e.g., ButtonHTMLAttributes & { prop: Type }): check & position, opening brace position, and apply formatting rules to type literals within intersections
  • enum-type-enforcement - Handle TSIntersectionType to track typed props; fix extractTypeInfoHandler argument for TSPropertySignature members
  • ternary-condition-multiline - Improve simple ternary prefix calculation for object properties; add checks for ? on same line as condition end and empty lines before ? or :; fix multiline formatting to not add leading newline

v1.7.0

releaseFebruary 2, 2026

New Rules for Blocks, Classes & Enum Enforcement + Multiple Enhancements

**Version Range:** v1.6.6 → v1.7.0

Added

  • empty-line-after-block - Require empty line between closing } of block statement and next statement 🔧
  • class-naming-convention - Enforce class declarations end with "Class" suffix 🔧
  • enum-type-enforcement - Enforce using enum values instead of string literals for typed variables (e.g., ButtonVariantEnum.PRIMARY instead of "primary") 🔧

Enhanced

  • ternary-condition-multiline - Now also collapses simple ternaries to single line when they fit within max line length (default: 120 chars). Added maxLineLength option.
  • function-object-destructure - Add auto-fix (replaces destructured usages with dot notation), expand module paths (services, constants, config, api, utils, helpers, lib, apis, configs, utilities, routes)
  • function-params-per-line - Handle callbacks with mixed params (destructured + simple like ({ item }, index))
  • array-callback-destructure - Fix closing brace on same line as last property
  • simple-call-single-line - Skip callbacks with 2+ params to avoid conflicts
  • jsx-simple-element-one-line, jsx-children-on-new-line, jsx-element-child-new-line - Treat simple function calls (0-1 args) as simple expressions

Fixed

  • component-props-destructure - Detect body destructuring patterns even without type annotations, add auto-fix for body destructuring, preserve TypeScript type annotation when auto-fixing

Stats

  • Total Rules: 69 (was 66)
  • Auto-fixable: 63 rules 🔧
  • Report-only: 6 rules
Full Changelog

v1.6.6

February 1, 2026

Fixed

  • component-props-destructure - Detect body destructuring patterns (e.g., const { name } = data;) even without type annotations
  • component-props-destructure - Add auto-fix for body destructuring: moves props to parameter and removes body declaration

v1.6.5

February 1, 2026

Added

  • function-object-destructure - Add auto-fix: replaces destructured usages with dot notation and removes declaration

v1.6.4

February 1, 2026

Enhanced

  • function-object-destructure - Add more module paths: apis, configs, utilities, routes

v1.6.3

February 1, 2026

Fixed

  • component-props-destructure - Preserve TypeScript type annotation when auto-fixing

v1.6.2

February 1, 2026

Enhanced

  • function-object-destructure - Expand to check more module paths (services, constants, config, api, utils, helpers, lib) for dot notation enforcement

v1.6.1

February 1, 2026

Enhanced

  • function-params-per-line - Handle callbacks with mixed params (destructured + simple like ({ item }, index))
  • array-callback-destructure - Fix closing brace on same line as last property
  • simple-call-single-line - Skip callbacks with 2+ params to avoid conflicts
  • jsx-simple-element-one-line - Treat simple function calls (0-1 args) as simple expressions
  • jsx-children-on-new-line - Treat simple function calls (0-1 args) as simple expressions
  • jsx-element-child-new-line - Treat simple function calls (0-1 args) as simple expressions

Docs

  • Clarify version bump and tag workflow in AGENTS.md

v1.6.0

releaseFebruary 1, 2026

New array-callback-destructure Rule & Multiple Enhancements

**Version Range:** v1.5.2 → v1.6.0

Added

  • array-callback-destructure - Enforce multiline destructuring in array method callbacks (map, filter, find, etc.) when there are 2+ properties 🔧

Enhanced

  • function-naming-convention - Added "forgot" to verb prefixes list
  • arrow-function-simplify - Extended to handle non-JSX expression statements (simple side-effect functions)

Changed

  • no-plusplus - Changed from "error" to "off" in all config files

Stats

  • Total Rules: 66 (was 65)
  • Auto-fixable: 60 rules 🔧
  • Report-only: 6 rules
Full Changelog

v1.5.2

February 1, 2026

v1.5.1

January 30, 2026

v1.5.0

releaseJanuary 30, 2026

New if-else-spacing Rule & Enhanced Arrow/Class Method Support

**Version Range:** v1.4.5 → v1.5.0

Added

  • if-else-spacing - Enforce proper spacing between if statements 🔧

Enhanced

  • function-naming-convention - Now checks class methods for Handler suffix (skips constructors, getters, setters, React lifecycle)
  • arrow-function-simplify - Extended to handle ALL arrow functions with single return (not just JSX attributes)

Fixed

  • Circular fix conflict between opening-brackets-same-line and function-arguments-format for multi-argument arrow function calls

Stats

  • Total Rules: 65 (was 64)
  • Auto-fixable: 59 rules 🔧
  • Report-only: 6 rules
Full Changelog

v1.4.5

January 30, 2026

v1.4.3

January 30, 2026

Documentation

  • Add CHANGELOG for v1.4.0 release

v1.4.2

releaseJanuary 30, 2026

New Rules, Enhanced Auto-Fix & Comprehensive Documentation

**Version Range:** v1.4.1 → v1.4.2

Added

  • index-exports-only - Prevent type/interface definitions in index files (move to types file)
  • ternary-condition-multiline - Format complex ternary conditions with each operand on its own line 🔧 ⚙️
  • no-inline-type-definitions - Extract inline union types to named types in type files ⚙️
  • Added 🔧 label to indicate auto-fixable rules
  • Added legend explaining 🔧 (auto-fixable) and ⚙️ (customizable) labels

Enhanced

  • function-naming-convention - Expanded verb list from ~50 to ~200+ verbs organized by category
  • function-object-destructure - Added auto-fix: inserts destructuring at function body top
  • component-props-destructure - Added auto-fix: converts (props) to ({ prop1, prop2 }) 🔧
  • react-code-order - Added auto-fix for reordering code blocks in components/hooks
  • variable-naming-convention - Added auto-fix for renaming variables to camelCase

Fixed

  • multiline-if-conditions - Fix indentation calculation for nested code
  • classname-multiline - Fix template literal indentation for inline JSX attributes
  • function-naming-convention - Skip React components (PascalCase + returns JSX)
  • variable-naming-convention - Skip PascalCase arguments (component references)
  • Add "poll" as recognized verb prefix in function-naming-convention

Documentation

  • Enhanced error messages with examples and helpful context
  • Added GitHub Releases guidelines to AGENTS.md

Report-Only Rules (6)

  • absolute-imports-only - Requires knowledge of project structure
  • index-exports-only - Requires moving code to new files
  • jsx-prop-naming-convention - Requires cross-file prop renaming
  • module-index-exports - Requires file creation
  • no-inline-type-definitions - Requires extracting types to new files
  • typescript-definition-location - Requires moving code to folders

Stats

  • Total Rules: 64 (was 61)
  • Auto-fixable: 58 rules 🔧
  • Report-only: 6 rules
Full Changelog

v1.4.1

January 30, 2026

Documentation

  • Add 🔧 label to indicate auto-fixable rules (57 of 64)
  • 7 rules are report-only (require manual changes)
  • Add legend explaining 🔧 (auto-fixable) and ⚙️ (customizable) labels
  • Add new rules to Rules Categories table

v1.4.0

releaseJanuary 30, 2026

New Rules & Enhanced Auto-Fix

**Version Range:** v1.3.11 → v1.4.0

Added

  • New rule: index-exports-only - Prevent type/interface definitions in index files
  • New rule: ternary-condition-multiline - Format complex ternary conditions
  • New rule: no-inline-type-definitions - Extract inline union types to type files

Enhanced

  • function-naming-convention - Expanded verb list from ~50 to ~200+ verbs
  • function-object-destructure - Added auto-fix for parameter dot notation

Fixed

  • multiline-if-conditions - Fix indentation calculation for nested code
  • classname-multiline - Fix template literal indentation for inline attributes

Stats

  • Total Rules: 64 (was 61)
Full Changelog

v1.3.11

January 30, 2026

Enhanced

  • Dependency-aware ordering: statements using variables must come after their declarations
  • Auto-fix for module-level constants: moves camelCase constants inside component
  • Auto-fix respects dependencies: initialResult declared before useRef(initialResult)
  • SCREAMING_CASE constants allowed at module level

v1.3.10

January 30, 2026

Fixed

  • function-naming-convention - Skip React components (PascalCase + returns JSX)
  • Prevents renaming components like Login to loginHandler

v1.3.9

January 29, 2026

Enhanced

  • react-code-order - Add auto-fix
  • Auto-fix preserves control flow statements (if, for, while) in their relative positions

v1.3.8

January 29, 2026

Fixed

  • variable-naming-convention - Skip PascalCase arguments (handled by function-naming-convention)
  • Avoids duplicate errors between the two rules
  • Auto-fix correctly updates all references including arguments passed to functions

v1.3.7

January 29, 2026

Enhanced

  • function-naming-convention - Enforce camelCase for functions with verb prefixes (GetForStatus → getForStatus)
  • Auto-fix converts PascalCase functions to camelCase and updates all references
  • React components (PascalCase without verb prefix) still correctly skipped

v1.3.6

January 29, 2026

Enhanced

  • function-naming-convention - Add "poll" as recognized verb prefix
  • Functions like pollForStatus, pollDataHandler are now valid

v1.3.5

January 28, 2026

Enhanced

  • Improved error messages with examples and helpful context for all rules
  • Tailwind class order shows recommended order (layout → sizing → spacing → typography → colors → effects → states)
  • className multiline shows threshold and format example
  • Import/export format shows single-line example with threshold
  • Object/array formatting shows format examples with thresholds
  • Type/Interface/Enum naming shows suggested corrected name
  • React code order shows full order sequence

v1.3.4

January 28, 2026

Enhanced

  • className rules - Smart detection for objects with Tailwind class values (e.g., variants object)
  • Smart detection for return statements with Tailwind classes
  • Applies to: classname-multiline, classname-no-extra-spaces, classname-order
  • variable-naming-convention - Add auto-fix for SCREAMING_SNAKE_CASE and snake_case

v1.3.3

January 28, 2026

Fixed

  • function-naming-convention - Fix overlapping fixes error in auto-fix
  • Track fixed ranges to prevent duplicate fixes on same node

v1.3.2

January 28, 2026

Documentation

  • Enhance release 1.1.0 with full feature details
  • Enhance release 1.0.14 with full feature details

v1.3.1

January 28, 2026

Documentation

  • Add CHANGELOG.md with full release history
  • Add GitHub Releases guidelines to AGENTS.md

v1.3.0

releaseJanuary 28, 2026

New Rules, Auto-Fix Enhancements & Agent Skills Integration

**Version Range:** v1.2.9 → v1.3.0

Added

  • classname-multiline - Enforce multiline className formatting with string/template literal format 🔧
  • function-declaration-style - Auto-fix function declarations to arrow expressions 🔧
  • test-rule - Test an ESLint rule after creating or modifying it
  • validate-types - Verify TypeScript definitions match rules in index.js
  • review-config - Review recommended ESLint configurations
  • audit-docs - Verify documentation accuracy across all files
  • Compatible with Claude Code, Cursor, VS Code, GitHub Copilot, Gemini CLI, and more
  • Added index.d.ts with full type definitions for IDE autocomplete
  • All 61 rule names available as TypeScript literal types

Enhanced

  • variable-naming-convention - Enforce camelCase for all variables including constants
  • function-object-destructure - Add auto-fix for arrow expression body callbacks
  • simple-call-single-line - Extend to collapse callbacks with params, handle optional chaining
  • function-naming-convention - Add auto-fix for missing Handler suffix
  • absolute-imports-only - Allow relative imports in entry files (main.tsx/main.ts), add pages folder

Fixed

  • Remove space before ?. when collapsing simple calls to single line
  • Sync eslint configs and add @stylistic/semi-style rule

Documentation

  • Reorganized AGENTS.md and CLAUDE.md for better AI agent compatibility
  • Added git workflow and versioning guidelines
  • Updated requirements: Node.js 20+, TypeScript 5+, Tailwind CSS 4+

Stats

  • Total Rules: 61 (was 56)
  • All rules are auto-fixable with eslint --fix
Full Changelog

v1.2.9

January 28, 2026

Documentation

  • Reorganize AGENTS.md and CLAUDE.md content
  • Add git workflow and versioning guidelines to AGENTS.md
  • Add commit approval workflow to CLAUDE.md
  • Require explicit approval for push and publish steps

v1.2.8

January 28, 2026

Added

  • New rule: function-declaration-style - Auto-fix function declarations to arrow expressions

Enhanced

  • function-naming-convention - Add auto-fix for missing Handler suffix
  • absolute-imports-only - Allow relative imports in entry files (main.tsx/main.ts)
  • absolute-imports-only - Add pages folder to default allowed folders
  • module-index-exports - Add pages folder to default module and lazy load folders

Documentation

  • Update rule count to 61 across all docs
  • Add function-declaration-style docs with func-style pairing note
  • Change Tailwind CSS badge to >=3.0.0

Stats

  • Total Rules: 61

v1.2.7

January 27, 2026

v1.2.6

January 27, 2026

v1.2.5

January 27, 2026

Documentation

  • Update badges and requirements for Node.js 20, TypeScript 5, Tailwind CSS 4

v1.2.4

January 27, 2026

Fixed

  • Sync eslint configs and add semi-style rule
  • Add missing component-props-destructure rule to react config and recommended react config
  • Add @stylistic/semi-style rule to all configs to enforce semicolons at end of line

v1.2.3

January 27, 2026

Fixed

  • simple-call-single-line - Remove space before ?. when collapsing simple calls to single line

v1.2.2

January 27, 2026

Enhanced

  • variable-naming-convention - Enforce camelCase for all variables including constants (no more SCREAMING_SNAKE_CASE)
  • function-object-destructure - Add auto-fix for arrow expression body callbacks
  • simple-call-single-line - Extend to collapse callbacks with params and simple expression bodies, handle optional chaining

v1.2.1

January 27, 2026

Added

  • New rule: classname-multiline - Enforce multiline className formatting when class count > 3 or length > 80

Enhanced

  • JSX className with no expressions uses "..." string literal format
  • JSX className with expressions uses {...} template literal format
  • Variables/object properties use ... template literal for multiline
  • Updated classname-no-extra-spaces and jsx-string-value-trim to skip multiline format
  • Upgraded test project to Tailwind CSS v4 with eslint-plugin-tailwindcss@beta

v1.2.0

releaseJanuary 25, 2026

React Code Order & TypeScript Enhancement Rules

**Version Range:** v1.1.10 → v1.2.0

Added

  • component-props-destructure - Enforce props destructuring in React components
  • component-props-inline-type - Enforce inline type annotations for component props
  • function-object-destructure - Enforce typed params with body destructuring
  • react-code-order - Enforce consistent ordering of hooks and code blocks
  • type-annotation-spacing - Enforce proper spacing in TypeScript type annotations

Stats

  • Total Rules: 56 (was 51)
Full Changelog

v1.1.10

January 20, 2026

v1.1.9

January 20, 2026

Changed

  • Sync default folders between absolute-imports-only and module-index-exports (27 folders)
  • Reorganize rules export object with alphabetically ordered categories

v1.1.8

January 20, 2026

Added

  • TypeScript rules test cases in src/interfaces/, src/enums/, src/types/

v1.1.7

January 20, 2026

Changed

  • Add TypeScript formatting rules to recommended and test configs:

v1.1.6

January 20, 2026

Added

  • New rule: type-format - Enforce PascalCase with Type suffix, camelCase properties

v1.1.5

January 20, 2026

Added

  • New rule: enum-format - Enforce PascalCase with Enum suffix, UPPER_CASE members

v1.1.4

January 20, 2026

Added

  • New rule: interface-format - Enforce PascalCase with Interface suffix, camelCase properties

v1.1.3

January 20, 2026

Added

  • New rule: typescript-definition-location - Enforce TypeScript definitions in designated folders

v1.1.2

January 20, 2026

v1.1.1

January 20, 2026

v1.1.0

releaseJanuary 20, 2026

TypeScript + Tailwind Support & Configurable Rules

**Version Range:** v1.0.41 → v1.1.0

Added

  • TypeScript parser and TypeScript ESLint plugin support
  • Tailwind CSS plugin integration
  • Perfectionist rules for sorting interfaces, enums, and object types
  • Comprehensive test project with TypeScript components
  • index-export-style - Enforce consistent export formatting in index files
  • array-items-per-line - Added maxItems option (default: 3)
  • hook-deps-per-line - Added maxDeps option (default: 2)
  • multiline-if-conditions - Added maxOperands option (default: 3)
  • function-arguments-format - New rule merging multiline argument rules with customizable options
  • Added AGENTS.md for AI coding agents

Changed

  • export-format and import-format - Made self-sufficient, added maxSpecifiers option
  • object-property-per-line - Made self-sufficient, added minProperties option
  • module-index-exports - Support TypeScript index files
  • Migrated to @stylistic/eslint-plugin for formatting rules

Stats

  • Total Rules: 51 (was 45)
  • All changes are backward compatible
Full Changelog

v1.0.41

January 19, 2026

v1.0.40

January 19, 2026

v1.0.39

January 19, 2026

v1.0.38

January 19, 2026

v1.0.37

January 13, 2026

v1.0.36

January 13, 2026

v1.0.35

January 13, 2026

v1.0.34

January 13, 2026

v1.0.33

January 13, 2026

v1.0.32

January 13, 2026

v1.0.31

January 13, 2026

v1.0.30

January 13, 2026

v1.0.29

January 12, 2026

v1.0.28

January 12, 2026

Changed

  • BREAKING: Merge multiline-argument-newline and multiple-arguments-per-line into function-arguments-format
  • Add customizable options: minArgs (default: 2), skipHooks (default: true), skipSingleArg (default: true)
  • Remove @stylistic/function-call-argument-newline from recommended config

v1.0.27

January 12, 2026

Enhanced

  • index-export-style - Handle export padding for all files
  • Non-index files require blank lines between exports
  • Index files have no blank lines between exports

v1.0.26

January 12, 2026

Documentation

  • Clarify index-export-style and @stylistic relationship
  • @stylistic handles general blank lines (return, variables, expressions)
  • index-export-style handles blank line enforcement in index files

v1.0.25

January 12, 2026

Enhanced

  • object-property-per-line - Made self-sufficient
  • Rule now handles complete multiline object formatting
  • Remove dependency on @stylistic/object-curly-newline

v1.0.24

January 12, 2026

Enhanced

  • export-format and import-format - Made self-sufficient
  • Both now handle collapse (≤ threshold) and expand (> threshold)
  • Remove dependency on @stylistic/object-curly-newline for imports/exports

v1.0.23

January 12, 2026

Changed

  • Migrate to @stylistic/eslint-plugin for formatting rules
  • Replace 24 deprecated ESLint formatting rules with @stylistic equivalents

v1.0.22

January 11, 2026

Enhanced

  • multiline-if-conditions - Add maxOperands configuration option (default: 3)

v1.0.21

January 11, 2026

Enhanced

  • hook-deps-per-line - Add maxDeps configuration option (default: 2)

v1.0.20

January 11, 2026

Enhanced

  • array-items-per-line - Add maxItems configuration option (default: 3)

v1.0.19

January 11, 2026

v1.0.18

January 11, 2026

Enhanced

  • import-format and export-format - Add maxSpecifiers option (default: 3)
  • object-property-per-line - Add minProperties option (default: 2)
  • Remove eslint-plugin-newline dependency (redundant with object-curly-newline)

v1.0.17

January 11, 2026

Documentation

  • Update rule count from 47 to 48 in all README files
  • Add coverage, public, and .vite to eslint config ignores

v1.0.16

releaseJanuary 9, 2026

New Rule: Index Export Style

**Version Range:** v1.0.15 → v1.0.16

Added

  • index-export-style - Enforce consistent export style in index files 🔧
  • Support two styles: 'shorthand' (default) and 'import-export'
  • Shorthand: export { a } from './file';
  • Import-export: import { a } from './file'; export { a };
  • Auto-fixable with eslint --fix
  • Detects and reports mixed export styles

Stats

  • Total Rules: 48 (was 47)
Full Changelog

v1.0.15

January 9, 2026

Added

  • Additional perfectionist rules to recommended React config:

v1.0.14

releaseJanuary 6, 2026

Customizable Options, Recommended Configs & Documentation

**Version Range:** v1.0.13 → v1.0.14

Added

  • absolute-imports-only - Add extraAllowedFolders, extraReduxSubfolders, extraDeepImportFolders options
  • module-index-exports - Add extraModuleFolders, extraLazyLoadFolders, extraIgnorePatterns options
  • Users can now extend default folder lists without replacing them
  • Add recommended-configs/react/ folder with model eslint.config.js
  • Include comprehensive README with installation and plugin documentation
  • Add comprehensive examples for all 47 rules in README
  • Enhance README with emojis, rules summary table, and introduction section

Changed

  • Standardized all internal helper function names with Handler suffix

Documentation

  • Add comprehensive block comments to all ESLint rules with good/bad examples

Stats

  • Total Rules: 47
Full Changelog

v1.0.13

January 6, 2026

Added

  • Recommended ESLint configurations for React projects
  • recommended-configs/react/ folder with model eslint.config.js

v1.0.12

January 6, 2026

Documentation

  • Enhance README with emojis, rules summary table, and introduction section

v1.0.11

January 6, 2026

Documentation

  • Add comprehensive examples for all 47 rules in README

v1.0.10

January 6, 2026

Documentation

  • Update README file and TypeScript rules types

v1.0.9

January 6, 2026

Changed

  • Standardize internal helper function names with Handler suffix
  • All check*, is*, get*, has* functions renamed

v1.0.8

January 6, 2026

Documentation

  • Add comprehensive block comments to all ESLint rules
  • Each rule has title, description, and good/bad code examples

v1.0.7

releaseJanuary 6, 2026

TypeScript Type Definitions

**Version Range:** v1.0.6 → v1.0.7

Added

  • Add TypeScript type definitions for IDE support (index.d.ts)
  • Export all 47 rule names as literal types for autocomplete
  • Add PluginRules interface mapping rules to Rule.RuleModule
  • Include module augmentation for ESLint's Linter.RulesRecord

Stats

  • Total Rules: 47
Full Changelog

v1.0.6

releaseJanuary 6, 2026

Initial Public Release

**Version Range:** v1.0.5 → v1.0.6

Added

  • 45+ auto-fixable ESLint rules for React/JSX projects
  • Full support for ESLint v9+ flat config
  • Zero dependencies (except peer dependency on ESLint)

Requirements

  • ESLint >= 9.0.0
  • Node.js >= 20.0.0

Stats

  • Total Rules: 45+
Full Changelog

v1.0.5

January 6, 2026

v1.0.4

January 6, 2026

v1.0.3

January 6, 2026

v1.0.2

January 6, 2026