eslint-plugin-code-style 2.0.0 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md DELETED
@@ -1,2087 +0,0 @@
1
- # Changelog
2
-
3
- All notable changes to this project are documented in this file.
4
-
5
- The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
- and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
-
8
- ---
9
-
10
- ## [2.0.0] - 2026-02-09
11
-
12
- **Modular Source Architecture + Minified Build**
13
-
14
- **Version Range:** v1.20.0 → v2.0.0
15
-
16
- ### Changed
17
-
18
- - **BREAKING: Modular source architecture** — Split monolithic 23K-line `index.js` into `src/` with 17 category files + shared utilities
19
- - `src/index.js` — Entry point importing all rules
20
- - `src/rules/*.js` — 17 category files (arrays, arrow-functions, call-expressions, classes, comments, components, control-flow, functions, hooks, imports-exports, jsx, objects, react, spacing, strings, typescript, variables)
21
- - `src/utils/tailwind.js` — Shared Tailwind CSS class utilities
22
- - **Build system** — Added esbuild to bundle and minify `src/` into `dist/index.js`
23
- - `npm run build` generates the bundled output
24
- - Output is ~269 KB (was ~1 MB), a 73% reduction
25
- - **Package entry point** — `main` and `exports` now point to `dist/index.js` instead of `index.js`
26
- - **npm package** — Publishes `dist/index.js` instead of root `index.js`; removed root `index.js` from package
27
-
28
- ### Added
29
-
30
- - `esbuild.config.js` — Build configuration
31
- - `esbuild` as devDependency
32
- - `npm run build` script
33
-
34
- ### Stats
35
-
36
- - Total Rules: 79
37
- - Auto-fixable: 70 rules 🔧
38
- - Configurable: 19 rules ⚙️
39
- - Report-only: 9 rules
40
- - Unpacked size: ~400 KB (was ~1.26 MB)
41
-
42
- **Full Changelog:** [v1.20.0...v2.0.0](https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.20.0...v2.0.0)
43
-
44
- ---
45
-
46
- ## [1.20.0] - 2026-02-09
47
-
48
- **README Reorganization — Split Rules Reference into docs/rules/**
49
-
50
- **Version Range:** v1.19.0 → v1.20.0
51
-
52
- ### Added
53
-
54
- - **Rules Reference Documentation** (`docs/rules/`) — 17 category files with detailed rule documentation, examples, and configuration options
55
- - `arrays.md`, `arrow-functions.md`, `call-expressions.md`, `classes.md`, `comments.md`, `components.md`, `control-flow.md`, `functions.md`, `hooks.md`, `imports-exports.md`, `jsx.md`, `objects.md`, `react.md`, `spacing.md`, `strings.md`, `typescript.md`, `variables.md`
56
- - **Rules index page** (`docs/rules/README.md`) — Overview table linking to all 17 category files
57
-
58
- ### Changed
59
-
60
- - **README.md** — Reorganized from ~4,150 lines to ~475 lines by moving detailed rule documentation to `docs/rules/`
61
- - Kept: badges, Why This Plugin, Recommended Configs, Features, Installation, Quick Start, Enable All Rules, Rules Summary table, Rules Reference links, Auto-fixing, Disabling Rules, Contributing, License
62
- - Moved: All detailed rule examples, options, and explanations to `docs/rules/` category files
63
- - **Recommended config READMEs** — Updated rule documentation links to point to `docs/rules/` instead of main README
64
- - **AGENTS.md** — Updated documentation references to reflect new `docs/rules/` structure
65
- - **package.json** — Added `docs/` to npm `files` array
66
-
67
- **Full Changelog:** [v1.19.0...v1.20.0](https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.19.0...v1.20.0)
68
-
69
- ---
70
-
71
- ## [1.19.0] - 2026-02-09
72
-
73
- **New: React + Tailwind Test Project & Recommended Config**
74
-
75
- **Version Range:** v1.18.0 → v1.19.0
76
-
77
- ### Added
78
-
79
- - **React + Tailwind test project** (`_tests_/react-tw/`) — React + Tailwind CSS project (no TypeScript) with 70 code-style rules enabled and Tailwind CSS v4 plugin
80
- - **React + Tailwind recommended config** (`recommended-configs/react-tw/`) — Ready-to-use ESLint flat config for React + Tailwind CSS projects without TypeScript
81
- - Includes 70 JavaScript-compatible code-style rules, Tailwind CSS plugin, and recommended third-party plugins
82
- - Documented with installation instructions, rule explanations, and customization guide
83
-
84
- ### Changed
85
-
86
- - Updated Available Configurations table in README.md — React + Tailwind now links to config instead of "Coming Soon"
87
- - Updated AGENTS.md — React + Tailwind marked as Available with folder paths
88
-
89
- **Full Changelog:** [v1.18.0...v1.19.0](https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.18.0...v1.19.0)
90
-
91
- ---
92
-
93
- ## [1.18.0] - 2026-02-09
94
-
95
- **New: React + TypeScript Test Project & Recommended Config**
96
-
97
- **Version Range:** v1.17.2 → v1.18.0
98
-
99
- ### Added
100
-
101
- - **React + TypeScript test project** (`_tests_/react-ts/`) — React + TypeScript project (no Tailwind) with all 79 code-style rules enabled and @typescript-eslint parser
102
- - **React + TypeScript recommended config** (`recommended-configs/react-ts/`) — Ready-to-use ESLint flat config for React + TypeScript projects without Tailwind CSS
103
- - Includes all 79 code-style rules, TypeScript parser, and recommended third-party plugins
104
- - Documented with installation instructions, rule explanations, and customization guide
105
-
106
- ### Changed
107
-
108
- - Updated Available Configurations table in README.md — React + TypeScript now links to config instead of "Coming Soon"
109
- - Updated AGENTS.md — React + TypeScript marked as Available with folder paths
110
-
111
- **Full Changelog:** [v1.17.2...v1.18.0](https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.17.2...v1.18.0)
112
-
113
- ---
114
-
115
- ## [1.17.2] - 2026-02-09
116
-
117
- **Fix: CamelCase Naming Auto-Fix & Prefix Enforcement**
118
-
119
- **Version Range:** v1.17.1 → v1.17.2
120
-
121
- ### Fixed
122
-
123
- - **`folder-based-naming-convention`** - Fix camelCase naming enforcement for constants, data, reducers, services, and strings folders
124
- - Auto-fix missing suffix: `common` → `commonConstants` on save (all camelCase folders)
125
- - Near-match prefix enforcement: `routeConstants` → `routesConstants` when file is `routes.ts`
126
- - Multi-export files with unrelated prefixes (e.g., `buttonTypeData` in `data/app.ts`) are not flagged
127
-
128
- **Full Changelog:** [v1.17.1...v1.17.2](https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.17.1...v1.17.2)
129
-
130
- ---
131
-
132
- ## [1.17.1] - 2026-02-09
133
-
134
- **Fix: Index File Behavior in Wrapped Folders**
135
-
136
- **Version Range:** v1.17.0 → v1.17.1
137
-
138
- ### Fixed
139
-
140
- - **`index-exports-only`** - Enforce dual index file behavior for wrapped folder structure
141
- - Root module index (`views/index.ts`) → barrel only (re-exports)
142
- - Subfolder index (`views/assessment/index.tsx`) → must contain component code, not just re-exports
143
- - Only one barrel per module — subfolder index files that simulate a barrel are flagged
144
- - **`no-redundant-folder-suffix`** - Detect file name matching parent folder name (e.g., `assessment/assessment.tsx` → use `assessment/index.tsx`)
145
-
146
- **Full Changelog:** [v1.17.0...v1.17.1](https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.17.0...v1.17.1)
147
-
148
- ---
149
-
150
- ## [1.17.0] - 2026-02-09
151
-
152
- **New Rule + Enhancements to Naming & Import Rules**
153
-
154
- **Version Range:** v1.16.0 → v1.17.0
155
-
156
- ### Added
157
-
158
- **New Rules (1)**
159
- - `inline-export-declaration` - Enforce inline export declarations (`export const x = ...`) instead of grouped export statements (`export { x }`) in non-index files 🔧
160
- - Auto-fixable: adds `export` to each declaration and removes the grouped export statement
161
- - Skips index files (barrel re-exports) and aliased exports (`export { a as b }`)
162
-
163
- ### Enhanced
164
-
165
- - **`folder-based-naming-convention`** - Extended camelCase suffix enforcement for data/constants/strings/services/reducers folders
166
- - Exports in `data/` must end with `Data` (e.g., `buttonTypeData`)
167
- - Exports in `constants/` must end with `Constants` (e.g., `localeConstants`)
168
- - Exports in `strings/` must end with `Strings` (e.g., `appStrings`)
169
- - Exports in `services/` must end with `Service`, `reducers/` with `Reducer`
170
- - **`absolute-imports-only`** - Files within the same module folder must use relative imports instead of absolute to avoid circular dependencies 🔧
171
- - Detects files at any depth inside module folders (e.g., `data/auth/login/guest.tsx`)
172
- - Allows both `./` and `../` relative imports within the same module folder
173
- - Auto-fixes absolute imports to own module folder (e.g., `@/data/auth/login/guest` → `../../login/guest`)
174
- - Now marked as auto-fixable (`fixable: "code"`)
175
- - **`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
176
-
177
- ### Stats
178
-
179
- - Total Rules: 79 (was 78)
180
- - Auto-fixable: 70 rules (was 69) 🔧
181
- - Configurable: 19 rules (was 18)
182
- - Report-only: 9 rules (was 10)
183
-
184
- **Full Changelog:** [v1.16.0...v1.17.0](https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.16.0...v1.17.0)
185
-
186
- ---
187
-
188
- ## [1.16.0] - 2026-02-09
189
-
190
- **New Rule + Enhancements + Rule Renames**
191
-
192
- **Version Range:** v1.15.0 → v1.16.0
193
-
194
- ### Added
195
-
196
- **New Rules (1)**
197
- - `folder-structure-consistency` - Enforce consistent folder structure (flat vs wrapped) in module folders
198
- - Applies to all module folders (same list as `module-index-exports`)
199
- - Detects mixed structures (some flat files, some in subfolders)
200
- - Flags unnecessary wrapper folders when each has only one file
201
- - Configurable `moduleFolders` and `extraModuleFolders` options
202
-
203
- ### Enhanced
204
-
205
- - **`folder-based-naming-convention`** (renamed from `folder-component-suffix`)
206
- - Support nested files with chained folder names (e.g., `layouts/auth/login.tsx` → `LoginAuthLayout`)
207
- - Match files at any depth within module folders
208
- - Expanded to cover: views, layouts, pages, providers, reducers, services, contexts, themes (with suffix), atoms and components (chaining only, no suffix)
209
- - Added `VariableDeclarator` detection for non-JSX folders (contexts, themes)
210
- - **`no-redundant-folder-suffix`** - Also check folder names for redundant suffixes (e.g., `views/access-control-view/` is now flagged)
211
-
212
- ### Renamed
213
-
214
- - `folder-component-suffix` → `folder-based-naming-convention` (now handles more than just components)
215
- - `svg-component-icon-naming` → `svg-icon-naming-convention` (consistent with other naming convention rules)
216
-
217
- ### Stats
218
-
219
- - Total Rules: 78 (was 77)
220
- - Auto-fixable: 67 rules
221
- - Configurable: 18 rules (was 17)
222
- - Report-only: 11 rules (was 10)
223
-
224
- **Full Changelog:** [v1.15.0...v1.16.0](https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.15.0...v1.16.0)
225
-
226
- ---
227
-
228
- ## [1.15.0] - 2026-02-06
229
-
230
- **New Rule: no-redundant-folder-suffix**
231
-
232
- **Version Range:** v1.14.1 → v1.15.0
233
-
234
- ### Added
235
-
236
- **New Rules (1)**
237
- - `no-redundant-folder-suffix` - Disallow file names that redundantly include the parent or ancestor folder name as a suffix
238
- - Flags files like `layouts/main-layout.tsx` (redundant "-layout" since already in `layouts/`)
239
- - Checks all ancestor folders from `src/` onwards
240
- - Singularizes folder names automatically (layouts→layout, categories→category, classes→class)
241
- - Skips index files
242
-
243
- ### Enhanced
244
-
245
- - **`folder-component-suffix`** - Add `layouts` folder support: components in `layouts/` must end with "Layout" suffix (with auto-fix) (v1.14.4)
246
- - **`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)
247
- - **`interface-format`** - Fix circular fix conflict by skipping collapse when property has multi-line function type (v1.14.3)
248
- - **`function-naming-convention`** - Detect functions destructured from hooks without proper naming, with auto-fix (v1.14.1)
249
-
250
- ### Stats
251
-
252
- - Total Rules: 77 (was 76)
253
- - Auto-fixable: 67 rules 🔧
254
- - Configurable: 17 rules ⚙️
255
- - Report-only: 10 rules (was 9)
256
-
257
- **Full Changelog:** [v1.14.1...v1.15.0](https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.14.1...v1.15.0)
258
-
259
- ---
260
-
261
- ## [1.14.4] - 2026-02-06
262
-
263
- ### Enhanced
264
-
265
- - **`folder-component-suffix`** - Add `layouts` folder support: components in `layouts/` must end with "Layout" suffix (with auto-fix)
266
-
267
- ---
268
-
269
- ## [1.14.3] - 2026-02-05
270
-
271
- ### Enhanced
272
-
273
- - **`type-annotation-spacing`** - Add auto-fix to collapse function types with 2 or fewer params to one line
274
- - **`interface-format`** - Fix circular fix conflict by skipping collapse when property has multi-line function type
275
-
276
- ---
277
-
278
- ## [1.14.2] - 2026-02-05
279
-
280
- ### Enhanced
281
-
282
- - **`type-annotation-spacing`** - Add spacing rules for async keyword and function types:
283
- - Enforce space after `async` keyword: `async()` → `async ()`
284
- - Enforce space after `=>` in function types: `() =>void` → `() => void`
285
- - Format function types with 3+ params on multiple lines
286
- - **`interface-format`** - Skip collapsing single-property interfaces when property has function type with 3+ params
287
-
288
- ---
289
-
290
- ## [1.14.1] - 2026-02-05
291
-
292
- ### Enhanced
293
-
294
- - **`function-naming-convention`** - Detect functions destructured from hooks without proper naming
295
- - Flags: `const { logout } = useAuth()` (should be `logoutHandler`)
296
- - Auto-fixes to: `const { logout: logoutHandler } = useAuth()`
297
- - Renames all usages of the local variable
298
- - Only flags clear action verbs (login, logout, toggle, increment, etc.)
299
-
300
- ---
301
-
302
- ## [1.14.0] - 2026-02-05
303
-
304
- **New Rule: useState Naming Convention**
305
-
306
- **Version Range:** v1.13.0 → v1.14.0
307
-
308
- ### Added
309
-
310
- **New Rules (1)**
311
- - `use-state-naming-convention` - Enforce boolean useState variables to start with valid prefixes 🔧
312
- - Boolean state must start with: `is`, `has`, `with`, `without` (configurable)
313
- - Auto-fixes both state variable and setter function names, plus all usages
314
- - Detects boolean literals (`useState(false)`) and type annotations (`useState<boolean>()`)
315
- - Options: `booleanPrefixes`, `extendBooleanPrefixes`, `allowPastVerbBoolean`, `allowContinuousVerbBoolean`
316
-
317
- ### Enhanced
318
-
319
- - **`folder-component-suffix`** - Add auto-fix to rename component and all references in the file
320
- - **`function-naming-convention`** - Detect useCallback-wrapped functions in custom hooks
321
- - **`prop-naming-convention`** - Auto-fix now renames both type annotation AND destructured parameter with all usages
322
-
323
- ### Stats
324
-
325
- - Total Rules: 76 (was 75)
326
- - Auto-fixable: 67 rules 🔧
327
- - Configurable: 17 rules ⚙️
328
- - Report-only: 9 rules
329
-
330
- **Full Changelog:** [v1.13.0...v1.14.0](https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.13.0...v1.14.0)
331
-
332
- ---
333
-
334
- ## [1.13.0] - 2026-02-05
335
-
336
- **New Rule: Prop Naming Convention & Auto-Fix Enhancements**
337
-
338
- **Version Range:** v1.12.1 → v1.13.0
339
-
340
- ### Added
341
-
342
- **New Rules (1)**
343
- - `prop-naming-convention` - Enforce naming conventions for boolean and callback props 🔧
344
- - Boolean props must start with: `is`, `has`, `with`, `without` (configurable)
345
- - Callback props must start with: `on` (configurable)
346
- - Detects React event handler types (`MouseEventHandler`, `ChangeEventHandler`, `FormEventHandler`, etc.)
347
- - Supports nested types at any depth
348
- - Applies to interfaces, type aliases, and inline types (NOT JSX attributes)
349
- - Options: `booleanPrefixes`, `extendBooleanPrefixes`, `allowPastVerbBoolean`, `allowContinuousVerbBoolean`, `callbackPrefix`, `allowActionSuffix`
350
-
351
- ### Enhanced
352
-
353
- - **`enum-format`** - Add auto-fix for member names (convert to UPPER_SNAKE_CASE)
354
- - **`interface-format`** - Add auto-fix for property names (convert to camelCase); collapse single-member nested object types to one line
355
- - **`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)
356
-
357
- ### Stats
358
-
359
- - Total Rules: 75 (was 74)
360
- - Auto-fixable: 66 rules 🔧
361
- - Configurable: 17 rules ⚙️
362
- - Report-only: 9 rules
363
-
364
- **Full Changelog:** [v1.12.1...v1.13.0](https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.12.1...v1.13.0)
365
-
366
- ---
367
-
368
- ## [1.12.1] - 2026-02-04
369
-
370
- ### Fixed
371
-
372
- - **`function-object-destructure`** - Skip when param is used in spread operations, exclude object property keys from reference counting
373
- - **`no-empty-lines-in-function-params`** - Only check parens within function's own range (fix for `.map(config => ...)` false positives)
374
- - **`jsx-children-on-new-line`** - Remove blank line check after opening tag (handled by `no-empty-lines-in-jsx` rule)
375
-
376
- ---
377
-
378
- ## [1.12.0] - 2026-02-04
379
-
380
- **New Rule: Folder Component Suffix**
381
-
382
- **Version Range:** v1.11.1 → v1.12.0
383
-
384
- ### Added
385
-
386
- **New Rules (1)**
387
- - `folder-component-suffix` - Enforce naming conventions based on folder location:
388
- - Components in `views/` folder must end with `View` suffix
389
- - Components in `pages/` folder must end with `Page` suffix
390
-
391
- ### Stats
392
-
393
- - Total Rules: 74 (was 73)
394
- - Auto-fixable: 65 rules 🔧
395
- - Report-only: 9 rules
396
-
397
- **Full Changelog:** [v1.11.1...v1.12.0](https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.11.1...v1.12.0)
398
-
399
- ---
400
-
401
- ## [1.11.9] - 2026-02-04
402
-
403
- ### Fixed
404
-
405
- - **`variable-naming-convention`** - Enforce camelCase for object property keys (no longer allows SCREAMING_SNAKE_CASE like `APP_NAME`)
406
- - **`variable-naming-convention`** - Add auto-fix to convert property names to camelCase (e.g., `APP_NAME` → `appName`)
407
-
408
- ---
409
-
410
- ## [1.11.8] - 2026-02-04
411
-
412
- ### Fixed
413
-
414
- - **`comment-format`** - Allow `/* */` syntax for ESLint directive comments (`/* eslint-disable ... */`, `/* eslint-enable ... */`, etc.) since these must use block comment syntax
415
-
416
- ---
417
-
418
- ## [1.11.7] - 2026-02-04
419
-
420
- ### Changed
421
-
422
- - **`no-hardcoded-strings`**
423
- - Remove UI component pattern exemption - ALL enum-like attribute values are now flagged (e.g., `variant="primary"`, `size="large"`, `color="danger"`)
424
- - Enforce consistent use of enums for component props to prevent typos
425
-
426
- ---
427
-
428
- ## [1.11.6] - 2026-02-04
429
-
430
- ### Changed
431
-
432
- - **`no-hardcoded-strings`**
433
- - Flag `type` attribute in JSX elements (e.g., `<input type="text" />`) - should use enums to prevent typos
434
- - Remove `type` from default ignored attributes list
435
- - Remove "text" from UI component pattern (conflicts with input type)
436
- - Update error message for JSX attributes: "should be imported from @/enums (preferred) or @/data to prevent typos"
437
-
438
- ---
439
-
440
- ## [1.11.5] - 2026-02-04
441
-
442
- ### Fixed
443
-
444
- - **`no-hardcoded-strings`**
445
- - Flag hardcoded strings in component default params (e.g., `type = "text"`, `variant = "ghost"`)
446
- - Flag hardcoded strings in ternary expressions (e.g., `showPassword ? "text" : "password"`)
447
- - Remove overly broad HTML input type exemption from general string checks
448
- - Remove "text" from CSS cursor pattern (conflicts with common input type usage)
449
-
450
- ---
451
-
452
- ## [1.11.4] - 2026-02-04
453
-
454
- ### Fixed
455
-
456
- - **`opening-brackets-same-line`**
457
- - Collapse JSX elements with simple children to single line (e.g., `<span>{strings.label}</span>`)
458
- - Handle simple LogicalExpression children (e.g., `<p>{user?.email || fallback}</p>`)
459
-
460
- - **`jsx-children-on-new-line`** / **`jsx-element-child-new-line`**
461
- - Recognize simple LogicalExpression (≤2 operands) as simple children
462
- - Recognize ChainExpression (optional chaining like `user?.name`) as simple expression
463
- - Prevent circular fix conflicts with `opening-brackets-same-line`
464
-
465
- ---
466
-
467
- ## [1.11.3] - 2026-02-04
468
-
469
- ### Fixed
470
-
471
- - **`no-hardcoded-strings`**
472
- - Skip CSS values in template literals assigned to style-related variables (e.g., `const lineGradient = \`linear-gradient(...)\``)
473
- - Flag exported hardcoded strings like `export const tokenKey = "auth_token"` (non-SCREAMING_SNAKE_CASE exports)
474
- - Skip HTML input types in default parameters (e.g., `type = "text"`)
475
- - Smarter single-word classification: all lowercase (e.g., `"loading"`) → keyword/enum, capitalized (e.g., `"Loading"`) → UI string
476
- - Descriptive error messages: UI strings → `@/strings or @/constants`, keywords → `@/data or @/enums`
477
-
478
- - **`opening-brackets-same-line`**
479
- - Collapse simple JSX logical expressions (≤2 operands, ≤80 chars) to single line
480
- - Ensure closing `}` is on its own line for multiline logical expressions with 3+ operands
481
-
482
- ---
483
-
484
- ## [1.11.2] - 2026-02-04
485
-
486
- ### Fixed
487
-
488
- - **`no-hardcoded-strings`**
489
- - Skip strings inside style object expressions (CSS values like `radial-gradient(...)`, `rotate(90deg)`, etc.)
490
- - Skip HTML input types (`text`, `password`, `email`, `number`, etc.)
491
- - Add CSS function patterns (transform, gradient, animation) to ignore list
492
- - Simplify error message to unified format: "should be imported from @/data, @/strings, @/constants, or @/enums"
493
- - Remove forced flagging of status codes, roles, HTTP methods (user intent is ambiguous)
494
-
495
- - **`ternary-condition-multiline`**
496
- - Skip collapsing ternaries with JSX branches (JSX ternaries should stay multiline for readability)
497
-
498
- - **`no-inline-type-definitions`**
499
- - Skip union types with only built-in/native types (e.g., `Error | null`, `string | null`)
500
- - Only flag unions with custom inline types like `{ user: string }`
501
-
502
- ---
503
-
504
- ## [1.11.1] - 2026-02-03
505
-
506
- ### Fixed
507
-
508
- - **`component-props-inline-type`** - Single-property type annotations spanning multiple lines now auto-fix to single line format `{ prop: Type }`
509
- - **`function-params-per-line`** - Normalize single-member type annotations to prevent circular fix conflicts
510
-
511
- ---
512
-
513
- ## [1.11.0] - 2026-02-03
514
-
515
- **New Rule: svg-component-icon-naming + Multiple Component Props Fixes**
516
-
517
- **Version Range:** v1.10.1 → v1.11.0
518
-
519
- ### Added
520
-
521
- **New Rules (1)**
522
-
523
- - **`svg-component-icon-naming`** - Enforce SVG components to have 'Icon' suffix and vice versa
524
- - Components returning only `<svg>` must end with "Icon" suffix (e.g., `SuccessIcon`)
525
- - Components with "Icon" suffix must return an `<svg>` element
526
- - Works with arrow functions and function declarations
527
-
528
- ### Fixed
529
-
530
- - **`component-props-inline-type`** - Single prop trailing comma now correctly removed (was not detecting comma in member range)
531
- - **`component-props-inline-type`** - Closing `})` now properly placed on its own line for multiple type props (was missing for non-intersection types)
532
- - **`function-params-per-line`** - Type annotations no longer removed when collapsing params (was losing entire type annotation)
533
- - **`function-params-per-line`** - Default values preserved for shorthand props (e.g., `className = ""` no longer becomes `className`)
534
- - **`function-params-per-line`** - Type annotation complexity now considered (2+ type props = complex, prevents incorrect collapsing)
535
-
536
- ### Stats
537
-
538
- - Total Rules: 73 (was 72)
539
- - Auto-fixable: 65 rules
540
- - Report-only: 8 rules
541
-
542
- **Full Changelog:** [v1.10.1...v1.11.0](https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.10.1...v1.11.0)
543
-
544
- ---
545
-
546
- ## [1.10.3] - 2026-02-03
547
-
548
- ### Fixed
549
-
550
- - **`no-hardcoded-strings`** - Skip template literals inside className/style attributes (Tailwind classes in template literals)
551
- - **`component-props-inline-type`** - Auto-fix to REMOVE trailing comma for single property (not just skip adding it)
552
-
553
- ---
554
-
555
- ## [1.10.2] - 2026-02-03
556
-
557
- ### Fixed
558
-
559
- - **`component-props-inline-type`** - Don't require trailing comma for single property in inline type definitions
560
- - **`no-hardcoded-strings`** - Skip 40+ SVG attributes (strokeLinecap, strokeLinejoin, filter, result, in, in2, mode, colorInterpolationFilters, etc.)
561
- - **`no-hardcoded-strings`** - Skip SVG standard attribute values (round, butt, square, miter, bevel, none, normal, sRGB, userSpaceOnUse, etc.)
562
- - **`no-hardcoded-strings`** - Skip URL references (url(#...)) and scientific notation numbers
563
- - **`no-hardcoded-strings`** - Skip CSS property values (cursor: pointer, display: flex, position: absolute, etc.)
564
- - **`no-hardcoded-strings`** - Skip SVG filter result identifiers (BackgroundImageFix, SourceGraphic, etc.)
565
-
566
- ---
567
-
568
- ## [1.10.1] - 2026-02-03
569
-
570
- ### Fixed
571
-
572
- - **`logical-expression-multiline`** - Add collapse to single line for simple expressions (≤3 operands)
573
- - **`logical-expression-multiline`** - Skip collapsing when any operand is multiline (e.g., JSX elements)
574
-
575
- ---
576
-
577
- ## [1.10.0] - 2026-02-03
578
-
579
- **New Rule: logical-expression-multiline + Enhanced no-hardcoded-strings**
580
-
581
- **Version Range:** v1.9.1 → v1.10.0
582
-
583
- ### Added
584
-
585
- **New Rules (1)**
586
-
587
- - **`logical-expression-multiline`** - Enforce multiline formatting for logical expressions with more than maxOperands (default: 3) 🔧
588
- - Handles variable declarations: `const err = a || b || c || d || e;`
589
- - Handles return statements, assignments, and other contexts
590
- - Skips if/ternary conditions (handled by other rules)
591
- - Auto-fixes to put each operand on its own line with operator at start
592
-
593
- ### Enhanced
594
-
595
- - **`no-hardcoded-strings`** - Major improvements:
596
- - Remove single-word string length limitations (now detects all single-word hardcoded strings)
597
- - Add validation strings: `empty`, `invalid`, `missing`, `optional`, `required`, `valid`
598
- - Add auth state strings: `anonymous`, `authenticated`, `authed`, `authorized`, `denied`, `forbidden`, etc.
599
- - Add more status strings: `done`, `finished`, `inprogress`, `queued`, `ready`, `running`, etc.
600
- - Skip UI component patterns in JSX attributes: `variant="ghost"`, `size="md"`, etc.
601
- - Skip Tailwind CSS class strings: `"px-5 py-3 w-full"`, `"hover:bg-primary"`, etc.
602
- - Make technical patterns stricter to avoid false negatives
603
-
604
- ### Fixed
605
-
606
- - **`no-hardcoded-strings`** - Fix detection of strings inside exported components
607
- - **`no-hardcoded-strings`** - Fix Tailwind detection being too broad (now requires actual Tailwind syntax)
608
-
609
- ### Stats
610
-
611
- - Total Rules: 72 (was 71)
612
- - Auto-fixable: 65 rules 🔧 (was 64)
613
- - Report-only: 7 rules
614
-
615
- **Full Changelog:** [v1.9.1...v1.10.0](https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.9.1...v1.10.0)
616
-
617
- ---
618
-
619
- ## [1.9.7] - 2026-02-03
620
-
621
- ### Fixed
622
-
623
- - **`no-hardcoded-strings`** - Fix Tailwind detection being too broad:
624
- - Previously: `"john"`, `"not found"` were incorrectly skipped as Tailwind classes
625
- - Now: Only strings with Tailwind syntax (hyphens, colons, slashes, brackets) are skipped
626
- - Regular strings like `const name = "john"` are now properly detected
627
- - Tailwind classes like `"px-5 py-3 w-full"` still correctly skipped
628
-
629
- ---
630
-
631
- ## [1.9.6] - 2026-02-03
632
-
633
- ### Enhanced
634
-
635
- - **`no-hardcoded-strings`** - Skip Tailwind CSS class strings:
636
- - Multi-class strings like `"px-5 py-3 w-full bg-white"` are now ignored
637
- - Individual classes: `w-5`, `p-4`, `pr-12`, `text-2xl`, `gap-4`, etc.
638
- - State modifiers: `hover:bg-primary`, `focus:ring-2`, `disabled:opacity-50`
639
- - Responsive prefixes: `sm:flex`, `md:hidden`, `lg:grid`
640
- - Opacity values: `bg-white/50`, `text-black/80`, `placeholder-error/50`
641
- - Arbitrary values: `w-[100px]`, `bg-[#ff0000]`
642
- - Negative values: `-translate-y-1/2`, `-rotate-45`
643
-
644
- ---
645
-
646
- ## [1.9.5] - 2026-02-03
647
-
648
- ### Fixed
649
-
650
- - **`no-hardcoded-strings`** - Fix bug where strings inside exported components were incorrectly skipped:
651
- - Previously: `export const Component = () => { const name = "john" }` was not detected
652
- - Now: Strings inside functions are properly detected regardless of export status
653
- - Only direct constant exports are skipped: `export const MESSAGE = "value"` or `export const DATA = { key: "value" }`
654
-
655
- ---
656
-
657
- ## [1.9.4] - 2026-02-03
658
-
659
- ### Enhanced
660
-
661
- - **`no-hardcoded-strings`** - Skip UI component patterns only in JSX attributes:
662
- - In JSX attributes: `<Button variant="ghost" />` is now ignored
663
- - In logic: `const status = "success"` or `setValue("primary")` is still detected
664
- - UI patterns: `primary`, `secondary`, `ghost`, `outline`, `link`, `muted`, `danger`, `warning`, `success`, `error`, `sm`, `md`, `lg`, `xl`, `left`, `right`, `center`, `top`, `bottom`, `hover`, `focus`, `click`, etc.
665
-
666
- ---
667
-
668
- ## [1.9.3] - 2026-02-03
669
-
670
- ### Enhanced
671
-
672
- - **`no-hardcoded-strings`** - Remove single-word string length limitations and add more special cases:
673
- - Removed length restrictions (now detects all single-word hardcoded strings)
674
- - Added validation strings: `empty`, `invalid`, `missing`, `optional`, `required`, `valid`
675
- - Added auth state strings: `anonymous`, `authenticated`, `authed`, `authorized`, `denied`, `forbidden`, `granted`, `locked`, `loggedin`, `loggedout`, `revoked`, `unauthenticated`, `unauthorized`, `unlocked`, `unverified`, `verified`
676
- - Added more status strings: `done`, `finished`, `inprogress`, `queued`, `ready`, `running`, `started`, `stopped`, `successful`, `waiting`
677
- - Made technical patterns stricter to avoid false negatives (camelCase requires uppercase in middle, snake_case requires underscore, kebab-case requires hyphen)
678
-
679
- ---
680
-
681
- ## [1.9.2] - 2026-02-03
682
-
683
- ### Enhanced
684
-
685
- - **`no-hardcoded-strings`** - Now detects special strings that should be enums:
686
- - HTTP status codes (2xx, 4xx, 5xx like "200", "404", "500")
687
- - HTTP methods ("GET", "POST", "PUT", "DELETE", etc.)
688
- - Role/permission names ("admin", "user", "moderator", etc.)
689
- - Environment names ("production", "development", "staging", etc.)
690
- - Log levels ("debug", "info", "warn", "error", etc.)
691
- - Status strings ("active", "pending", "approved", "rejected", etc.)
692
- - Priority levels ("high", "medium", "low", "critical", etc.)
693
- - All above → import from `@/enums` or `@/data`
694
- - Regular strings → import from `@/data or @/strings or @/constants or @/@constants or @/@strings`
695
-
696
- ### Fixed
697
-
698
- - **`no-hardcoded-strings`** - Fixed bug where `isInConstantsObjectHandler` incorrectly matched camelCase variable names due to case-insensitive regex flag
699
-
700
- ---
701
-
702
- ## [1.9.1] - 2026-02-03
703
-
704
- ### Enhanced
705
-
706
- - **`no-hardcoded-strings`** - Initial special string detection:
707
- - HTTP status codes (4xx, 5xx)
708
- - Role/permission names
709
-
710
- ---
711
-
712
- ## [1.9.0] - 2026-02-03
713
-
714
- **New Rule: class-method-definition-format + Enhanced Spacing Rules**
715
-
716
- **Version Range:** v1.8.1 → v1.9.0
717
-
718
- ### Added
719
-
720
- **New Rules (1)**
721
- - **`class-method-definition-format`** - Enforce consistent spacing in class and method definitions 🔧
722
- - Space before opening brace `{` in class declarations
723
- - No space between method name and opening parenthesis `(`
724
- - Space before opening brace `{` in method definitions
725
- - Opening brace must be on same line as class/method signature
726
-
727
- ### Enhanced
728
-
729
- - **`function-call-spacing`** - Now also handles:
730
- - `new` expressions (`new Class ()` → `new Class()`)
731
- - Generic type calls (`get <Type>()` → `get<Type>()`)
732
- - **`member-expression-bracket-spacing`** - Now also handles:
733
- - TypeScript indexed access types (`Type ["prop"]` → `Type["prop"]`)
734
-
735
- ### Stats
736
-
737
- - Total Rules: 71 (was 70)
738
- - Auto-fixable: 64 rules 🔧 (was 63)
739
- - Report-only: 7 rules
740
-
741
- **Full Changelog:** [v1.8.1...v1.9.0](https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.8.1...v1.9.0)
742
-
743
- ---
744
-
745
- ## [1.8.4] - 2026-02-03
746
-
747
- ### Documentation
748
-
749
- - Fix v1.8.0 CHANGELOG entry to include Release Title, Version Range, and Full Changelog link (required for MINOR releases)
750
- - Add missing comparison links in CHANGELOG.md (v1.3.9 through v1.8.3)
751
- - Update manage-rule skill with CHANGELOG format requirements for new rules
752
- - Update Current releases list in AGENTS.md to include v1.8.0
753
-
754
- ---
755
-
756
- ## [1.8.3] - 2026-02-03
757
-
758
- ### Fixed
759
-
760
- - **`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
761
-
762
- ---
763
-
764
- ## [1.8.2] - 2026-02-03
765
-
766
- ### Changed
767
-
768
- - **`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.
769
- - **`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.
770
- - **`opening-brackets-same-line`** - Skip ternary condition tests and detect intentional multiline format to prevent rule conflicts
771
- - **`if-statement-format`** - Detect intentional multiline conditions to prevent collapsing formatted conditions
772
-
773
- ### Documentation
774
-
775
- - Update both rules to show multiline inline formatting examples instead of extraction
776
- - Remove `maxNestingLevel` option from documentation (now fixed internally)
777
-
778
- ---
779
-
780
- ## [1.8.1] - 2026-02-03
781
-
782
- ### Changed
783
-
784
- - **`function-naming-convention`** - Add `handleXxx` → `xxxHandler` auto-fix (converts `handleClick` to `clickHandler` instead of `handleClickHandler`)
785
-
786
- ---
787
-
788
- ## [1.8.0] - 2026-02-03
789
-
790
- **New Rule: no-hardcoded-strings**
791
-
792
- **Version Range:** v1.7.1 → v1.8.0
793
-
794
- ### Added
795
-
796
- **New Rules (1)**
797
- - **`no-hardcoded-strings`** - Enforce importing strings from constants/strings modules instead of hardcoding them inline 🔧
798
- - Detects hardcoded strings in JSX text content, attributes, and component logic
799
- - Configurable `ignoreAttributes`, `extraIgnoreAttributes`, `ignorePatterns` options
800
- - Automatically ignores technical strings (CSS units, URLs, paths, identifiers, etc.)
801
- - Valid import paths: `@/constants`, `@/strings`, `@/@constants`, `@/@strings`, `@/data/constants`, `@/data/strings`
802
-
803
- ### Changed
804
-
805
- - **`absolute-imports-only`** - Add `strings`, `@constants`, `@strings` to default allowed folders
806
- - **`module-index-exports`** - Add `strings`, `@constants`, `@strings` to default module folders
807
-
808
- ### Stats
809
-
810
- - Total Rules: 70 (was 69)
811
- - Auto-fixable: 63 rules 🔧
812
- - Report-only: 7 rules (was 6)
813
-
814
- **Full Changelog:** [v1.7.1...v1.8.0](https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.7.1...v1.8.0)
815
-
816
- ---
817
-
818
- ## [1.7.6] - 2026-02-02
819
-
820
- ### Changed
821
-
822
- - **`ternary-condition-multiline`** - Now depends only on operand count, not line length:
823
- - ≤maxOperands (default: 3): Always collapse to single line regardless of line length
824
- - \>maxOperands: Format multiline with each operand on its own line
825
- - Removed `maxLineLength` option (no longer used)
826
- - This aligns behavior with `multiline-if-conditions` rule
827
-
828
- ---
829
-
830
- ## [1.7.5] - 2026-02-02
831
-
832
- ### Fixed
833
-
834
- - **`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)
835
- - **`no-empty-lines-in-function-params`** - Add detection for empty lines in TSTypeLiteral (type annotation objects like `{ prop: Type }` in intersection types)
836
-
837
- ---
838
-
839
- ## [1.7.4] - 2026-02-02
840
-
841
- ### Fixed
842
-
843
- - **`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
844
- - **`no-inline-type-definitions`** - Change threshold comparison from `>` to `>=` so 2-member unions are now flagged (with default `maxUnionMembers: 2`)
845
- - **`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
846
-
847
- ---
848
-
849
- ## [1.7.3] - 2026-02-02
850
-
851
- ### Fixed
852
-
853
- - **`ternary-condition-multiline`** - Fix `?`/`:` on own line without value; collapse simple ternaries to single line when they fit
854
- - **`no-empty-lines-in-function-params`** - Detect empty lines after opening `{` and before closing `}` in ObjectPattern params
855
- - **`empty-line-after-block`** - Skip consecutive if statements (already handled by `if-else-spacing`)
856
- - **`classname-multiline`** - Fix closing backtick alignment for return statements
857
-
858
- ### Documentation
859
-
860
- - Add 6 missing rules to README detailed documentation
861
- - Add 7 missing rules to README Quick Start example
862
- - Update rule counts from 66 to 69 across all documentation files
863
- - Update AGENTS.md Tailwind section with actual rules and comparison with `tailwindcss/classnames-order`
864
- - Add README multi-section update warnings to AGENTS.md rule modification checklists
865
-
866
- ### Added
867
-
868
- - **`manage-rule` skill** - New skill for adding, editing, or removing ESLint rules with complete workflow
869
-
870
- ---
871
-
872
- ## [1.7.2] - 2026-02-02
873
-
874
- ### Fixed
875
-
876
- - **`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
877
- - **`interface-format`** - Same fix as enum-format for trailing comma detection
878
-
879
- ---
880
-
881
- ## [1.7.1] - 2026-02-02
882
-
883
- ### Fixed
884
-
885
- - **`no-empty-lines-in-function-params`** - Detect empty lines between destructured properties inside ObjectPattern params
886
- - **`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
887
- - **`enum-type-enforcement`** - Handle TSIntersectionType to track typed props; fix extractTypeInfoHandler argument for TSPropertySignature members
888
- - **`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
889
-
890
- ---
891
-
892
- ## [1.7.0] - 2026-02-02
893
-
894
- **New Rules for Blocks, Classes & Enum Enforcement + Multiple Enhancements**
895
-
896
- **Version Range:** v1.6.1 → v1.7.0
897
-
898
- ### Added
899
-
900
- **New Rules (3)**
901
- - `empty-line-after-block` - Require empty line between closing `}` of block statement and next statement 🔧
902
- - `class-naming-convention` - Enforce class declarations end with "Class" suffix 🔧
903
- - `enum-type-enforcement` - Enforce using enum values instead of string literals for typed variables (e.g., `ButtonVariantEnum.PRIMARY` instead of `"primary"`) 🔧
904
-
905
- ### Enhanced
906
-
907
- - **`ternary-condition-multiline`** - Now also collapses simple ternaries to single line when they fit within max line length (default: 120 chars). Added `maxLineLength` option.
908
- - **`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)
909
- - **`function-params-per-line`** - Handle callbacks with mixed params (destructured + simple like `({ item }, index)`)
910
- - **`array-callback-destructure`** - Fix closing brace on same line as last property
911
- - **`simple-call-single-line`** - Skip callbacks with 2+ params to avoid conflicts
912
- - **`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
913
-
914
- ### Fixed
915
-
916
- - **`component-props-destructure`** - Detect body destructuring patterns even without type annotations, add auto-fix for body destructuring, preserve TypeScript type annotation when auto-fixing
917
-
918
- ### Stats
919
-
920
- - Total Rules: 69 (was 66)
921
- - Auto-fixable: 63 rules 🔧
922
- - Report-only: 6 rules
923
-
924
- **Full Changelog:** [v1.6.1...v1.7.0](https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.6.1...v1.7.0)
925
-
926
- ---
927
-
928
- ## [1.6.6] - 2026-02-01
929
-
930
- ### Fixed
931
-
932
- - **`component-props-destructure`** - Detect body destructuring patterns (e.g., `const { name } = data;`) even without type annotations
933
- - **`component-props-destructure`** - Add auto-fix for body destructuring: moves props to parameter and removes body declaration
934
-
935
- ---
936
-
937
- ## [1.6.5] - 2026-02-01
938
-
939
- ### Added
940
-
941
- - **`function-object-destructure`** - Add auto-fix: replaces destructured usages with dot notation and removes declaration
942
-
943
- ---
944
-
945
- ## [1.6.4] - 2026-02-01
946
-
947
- ### Enhanced
948
-
949
- - **`function-object-destructure`** - Add more module paths: apis, configs, utilities, routes
950
-
951
- ---
952
-
953
- ## [1.6.3] - 2026-02-01
954
-
955
- ### Fixed
956
-
957
- - **`component-props-destructure`** - Preserve TypeScript type annotation when auto-fixing
958
-
959
- ---
960
-
961
- ## [1.6.2] - 2026-02-01
962
-
963
- ### Enhanced
964
-
965
- - **`function-object-destructure`** - Expand to check more module paths (services, constants, config, api, utils, helpers, lib) for dot notation enforcement
966
-
967
- ---
968
-
969
- ## [1.6.1] - 2026-02-01
970
-
971
- ### Enhanced
972
-
973
- - **`function-params-per-line`** - Handle callbacks with mixed params (destructured + simple like `({ item }, index)`)
974
- - **`array-callback-destructure`** - Fix closing brace on same line as last property
975
- - **`simple-call-single-line`** - Skip callbacks with 2+ params to avoid conflicts
976
- - **`jsx-simple-element-one-line`** - Treat simple function calls (0-1 args) as simple expressions
977
- - **`jsx-children-on-new-line`** - Treat simple function calls (0-1 args) as simple expressions
978
- - **`jsx-element-child-new-line`** - Treat simple function calls (0-1 args) as simple expressions
979
-
980
- ### Docs
981
-
982
- - Clarify version bump and tag workflow in AGENTS.md
983
-
984
- ---
985
-
986
- ## [1.6.0] - 2026-02-01
987
-
988
- **New array-callback-destructure Rule & Multiple Enhancements**
989
-
990
- **Version Range:** v1.5.1 → v1.6.0
991
-
992
- ### Added
993
-
994
- **New Rules (1)**
995
- - `array-callback-destructure` - Enforce multiline destructuring in array method callbacks (map, filter, find, etc.) when there are 2+ properties 🔧
996
-
997
- ### Enhanced
998
-
999
- - **`function-naming-convention`** - Added "forgot" to verb prefixes list
1000
- - **`arrow-function-simplify`** - Extended to handle non-JSX expression statements (simple side-effect functions)
1001
-
1002
- ### Changed
1003
-
1004
- - **`no-plusplus`** - Changed from "error" to "off" in all config files
1005
-
1006
- ### Stats
1007
-
1008
- - Total Rules: 66 (was 65)
1009
- - Auto-fixable: 60 rules 🔧
1010
- - Report-only: 6 rules
1011
-
1012
- **Full Changelog:** [v1.5.1...v1.6.0](https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.5.1...v1.6.0)
1013
-
1014
- ---
1015
-
1016
- ## [1.5.2] - 2026-02-01
1017
-
1018
- - Version bump
1019
-
1020
- ---
1021
-
1022
- ## [1.5.1] - 2026-01-30
1023
-
1024
- - Minor fixes
1025
-
1026
- ---
1027
-
1028
- ## [1.5.0] - 2026-01-30
1029
-
1030
- **New if-else-spacing Rule & Enhanced Arrow/Class Method Support**
1031
-
1032
- **Version Range:** v1.4.3 → v1.5.0
1033
-
1034
- ### Added
1035
-
1036
- **New Rules (1)**
1037
- - `if-else-spacing` - Enforce proper spacing between if statements 🔧
1038
-
1039
- ### Enhanced
1040
-
1041
- - **`function-naming-convention`** - Now checks class methods for Handler suffix (skips constructors, getters, setters, React lifecycle)
1042
- - **`arrow-function-simplify`** - Extended to handle ALL arrow functions with single return (not just JSX attributes)
1043
-
1044
- ### Fixed
1045
-
1046
- - **Circular fix conflict** between `opening-brackets-same-line` and `function-arguments-format` for multi-argument arrow function calls
1047
-
1048
- ### Stats
1049
-
1050
- - Total Rules: 65 (was 64)
1051
- - Auto-fixable: 59 rules 🔧
1052
- - Report-only: 6 rules
1053
-
1054
- **Full Changelog:** [v1.4.3...v1.5.0](https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.4.3...v1.5.0)
1055
-
1056
- ---
1057
-
1058
- ## [1.4.5] - 2026-01-30
1059
-
1060
- - Version bump
1061
-
1062
- ---
1063
-
1064
- ## [1.4.3] - 2026-01-30
1065
-
1066
- ### Documentation
1067
-
1068
- - Add CHANGELOG for v1.4.0 release
1069
-
1070
- ---
1071
-
1072
- ## [1.4.2] - 2026-01-30
1073
-
1074
- **New Rules, Enhanced Auto-Fix & Comprehensive Documentation**
1075
-
1076
- **Version Range:** v1.3.1 → v1.4.2
1077
-
1078
- ### Added
1079
-
1080
- **New Rules (3)**
1081
- - `index-exports-only` - Prevent type/interface definitions in index files (move to types file)
1082
- - `ternary-condition-multiline` - Format complex ternary conditions with each operand on its own line 🔧 ⚙️
1083
- - `no-inline-type-definitions` - Extract inline union types to named types in type files ⚙️
1084
-
1085
- **Auto-Fix Labels in Documentation**
1086
- - Added 🔧 label to indicate auto-fixable rules
1087
- - Added legend explaining 🔧 (auto-fixable) and ⚙️ (customizable) labels
1088
-
1089
- ### Enhanced
1090
-
1091
- - **`function-naming-convention`** - Expanded verb list from ~50 to ~200+ verbs organized by category
1092
- - **`function-object-destructure`** - Added auto-fix: inserts destructuring at function body top
1093
- - **`component-props-destructure`** - Added auto-fix: converts `(props)` to `({ prop1, prop2 })` 🔧
1094
- - **`react-code-order`** - Added auto-fix for reordering code blocks in components/hooks
1095
- - **`variable-naming-convention`** - Added auto-fix for renaming variables to camelCase
1096
-
1097
- ### Fixed
1098
-
1099
- - **`multiline-if-conditions`** - Fix indentation calculation for nested code
1100
- - **`classname-multiline`** - Fix template literal indentation for inline JSX attributes
1101
- - **`function-naming-convention`** - Skip React components (PascalCase + returns JSX)
1102
- - **`variable-naming-convention`** - Skip PascalCase arguments (component references)
1103
- - Add "poll" as recognized verb prefix in function-naming-convention
1104
-
1105
- ### Documentation
1106
-
1107
- - Enhanced error messages with examples and helpful context
1108
- - Improved CHANGELOG with full details and Full Changelog links
1109
- - Added GitHub Releases guidelines to AGENTS.md
1110
-
1111
- ### Report-Only Rules (6)
1112
-
1113
- - `absolute-imports-only` - Requires knowledge of project structure
1114
- - `index-exports-only` - Requires moving code to new files
1115
- - `jsx-prop-naming-convention` - Requires cross-file prop renaming
1116
- - `module-index-exports` - Requires file creation
1117
- - `no-inline-type-definitions` - Requires extracting types to new files
1118
- - `typescript-definition-location` - Requires moving code to folders
1119
-
1120
- ### Stats
1121
-
1122
- - Total Rules: 64 (was 61)
1123
- - Auto-fixable: 58 rules 🔧
1124
- - Report-only: 6 rules
1125
-
1126
- **Full Changelog:** [v1.3.1...v1.4.2](https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.3.1...v1.4.2)
1127
-
1128
- ---
1129
-
1130
- ## [1.4.1] - 2026-01-30
1131
-
1132
- ### Documentation
1133
-
1134
- - Add 🔧 label to indicate auto-fixable rules (57 of 64)
1135
- - 7 rules are report-only (require manual changes)
1136
- - Add legend explaining 🔧 (auto-fixable) and ⚙️ (customizable) labels
1137
- - Add new rules to Rules Categories table
1138
-
1139
- ---
1140
-
1141
- ## [1.4.0] - 2026-01-30
1142
-
1143
- ### Added
1144
-
1145
- - New rule: `index-exports-only` - Prevent type/interface definitions in index files
1146
- - New rule: `ternary-condition-multiline` - Format complex ternary conditions
1147
- - New rule: `no-inline-type-definitions` - Extract inline union types to type files
1148
-
1149
- ### Enhanced
1150
-
1151
- - `function-naming-convention` - Expanded verb list from ~50 to ~200+ verbs
1152
- - `function-object-destructure` - Added auto-fix for parameter dot notation
1153
-
1154
- ### Fixed
1155
-
1156
- - `multiline-if-conditions` - Fix indentation calculation for nested code
1157
- - `classname-multiline` - Fix template literal indentation for inline attributes
1158
-
1159
- ### Stats
1160
-
1161
- - Total Rules: 64 (was 61)
1162
-
1163
- ---
1164
-
1165
- ## [1.3.11] - 2026-01-30
1166
-
1167
- ### Enhanced
1168
-
1169
- - Dependency-aware ordering: statements using variables must come after their declarations
1170
- - Auto-fix for module-level constants: moves camelCase constants inside component
1171
- - Auto-fix respects dependencies: initialResult declared before useRef(initialResult)
1172
- - SCREAMING_CASE constants allowed at module level
1173
-
1174
- ---
1175
-
1176
- ## [1.3.10] - 2026-01-30
1177
-
1178
- ### Fixed
1179
-
1180
- - `function-naming-convention` - Skip React components (PascalCase + returns JSX)
1181
- - Prevents renaming components like Login to loginHandler
1182
-
1183
- ---
1184
-
1185
- ## [1.3.9] - 2026-01-29
1186
-
1187
- ### Enhanced
1188
-
1189
- - `react-code-order` - Add auto-fix
1190
- - Auto-fix preserves control flow statements (if, for, while) in their relative positions
1191
-
1192
- ---
1193
-
1194
- ## [1.3.8] - 2026-01-29
1195
-
1196
- ### Fixed
1197
-
1198
- - `variable-naming-convention` - Skip PascalCase arguments (handled by function-naming-convention)
1199
- - Avoids duplicate errors between the two rules
1200
- - Auto-fix correctly updates all references including arguments passed to functions
1201
-
1202
- ---
1203
-
1204
- ## [1.3.7] - 2026-01-29
1205
-
1206
- ### Enhanced
1207
-
1208
- - `function-naming-convention` - Enforce camelCase for functions with verb prefixes (GetForStatus → getForStatus)
1209
- - Auto-fix converts PascalCase functions to camelCase and updates all references
1210
- - React components (PascalCase without verb prefix) still correctly skipped
1211
-
1212
- ---
1213
-
1214
- ## [1.3.6] - 2026-01-29
1215
-
1216
- ### Enhanced
1217
-
1218
- - `function-naming-convention` - Add "poll" as recognized verb prefix
1219
- - Functions like pollForStatus, pollDataHandler are now valid
1220
-
1221
- ---
1222
-
1223
- ## [1.3.5] - 2026-01-28
1224
-
1225
- ### Enhanced
1226
-
1227
- - Improved error messages with examples and helpful context for all rules
1228
- - Tailwind class order shows recommended order (layout → sizing → spacing → typography → colors → effects → states)
1229
- - className multiline shows threshold and format example
1230
- - Import/export format shows single-line example with threshold
1231
- - Object/array formatting shows format examples with thresholds
1232
- - Type/Interface/Enum naming shows suggested corrected name
1233
- - React code order shows full order sequence
1234
-
1235
- ---
1236
-
1237
- ## [1.3.4] - 2026-01-28
1238
-
1239
- ### Enhanced
1240
-
1241
- - className rules - Smart detection for objects with Tailwind class values (e.g., variants object)
1242
- - Smart detection for return statements with Tailwind classes
1243
- - Applies to: classname-multiline, classname-no-extra-spaces, classname-order
1244
- - `variable-naming-convention` - Add auto-fix for SCREAMING_SNAKE_CASE and snake_case
1245
-
1246
- ---
1247
-
1248
- ## [1.3.3] - 2026-01-28
1249
-
1250
- ### Fixed
1251
-
1252
- - `function-naming-convention` - Fix overlapping fixes error in auto-fix
1253
- - Track fixed ranges to prevent duplicate fixes on same node
1254
-
1255
- ---
1256
-
1257
- ## [1.3.2] - 2026-01-28
1258
-
1259
- ### Documentation
1260
-
1261
- - Add Full Changelog links to all releases in CHANGELOG.md
1262
- - Enhance release 1.1.0 with full feature details
1263
- - Enhance release 1.0.14 with full feature details
1264
- - Add Full Changelog link instructions to AGENTS.md
1265
-
1266
- ---
1267
-
1268
- ## [1.3.1] - 2026-01-28
1269
-
1270
- ### Documentation
1271
-
1272
- - Add CHANGELOG.md with full release history
1273
- - Add GitHub Releases guidelines to AGENTS.md
1274
-
1275
- ---
1276
-
1277
- ## [1.3.0] - 2026-01-28
1278
-
1279
- **New Rules, Auto-Fix Enhancements & Agent Skills Integration**
1280
-
1281
- **Version Range:** v1.2.1 → v1.3.0
1282
-
1283
- ### Added
1284
-
1285
- **New Rules (2)**
1286
- - `classname-multiline` - Enforce multiline className formatting with string/template literal format 🔧
1287
- - `function-declaration-style` - Auto-fix function declarations to arrow expressions 🔧
1288
-
1289
- **Agent Skills** - Added Agent Skills open standard support
1290
- - `test-rule` - Test an ESLint rule after creating or modifying it
1291
- - `validate-types` - Verify TypeScript definitions match rules in index.js
1292
- - `review-config` - Review recommended ESLint configurations
1293
- - `audit-docs` - Verify documentation accuracy across all files
1294
- - Compatible with Claude Code, Cursor, VS Code, GitHub Copilot, Gemini CLI, and more
1295
-
1296
- **TypeScript Support**
1297
- - Added `index.d.ts` with full type definitions for IDE autocomplete
1298
- - All 61 rule names available as TypeScript literal types
1299
-
1300
- ### Enhanced
1301
-
1302
- - **`variable-naming-convention`** - Enforce camelCase for all variables including constants
1303
- - **`function-object-destructure`** - Add auto-fix for arrow expression body callbacks
1304
- - **`simple-call-single-line`** - Extend to collapse callbacks with params, handle optional chaining
1305
- - **`function-naming-convention`** - Add auto-fix for missing Handler suffix
1306
- - **`absolute-imports-only`** - Allow relative imports in entry files (main.tsx/main.ts), add pages folder
1307
-
1308
- ### Fixed
1309
-
1310
- - Remove space before `?.` when collapsing simple calls to single line
1311
- - Sync eslint configs and add `@stylistic/semi-style` rule
1312
-
1313
- ### Documentation
1314
-
1315
- - Reorganized AGENTS.md and CLAUDE.md for better AI agent compatibility
1316
- - Added git workflow and versioning guidelines
1317
- - Updated requirements: Node.js 20+, TypeScript 5+, Tailwind CSS 4+
1318
-
1319
- ### Stats
1320
-
1321
- - Total Rules: 61 (was 56)
1322
- - All rules are auto-fixable with `eslint --fix`
1323
-
1324
- **Full Changelog:** [v1.2.1...v1.3.0](https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.2.1...v1.3.0)
1325
-
1326
- ---
1327
-
1328
- ## [1.2.9] - 2026-01-28
1329
-
1330
- ### Documentation
1331
-
1332
- - Reorganize AGENTS.md and CLAUDE.md content
1333
- - Add git workflow and versioning guidelines to AGENTS.md
1334
- - Add commit approval workflow to CLAUDE.md
1335
- - Require explicit approval for push and publish steps
1336
-
1337
- ---
1338
-
1339
- ## [1.2.8] - 2026-01-28
1340
-
1341
- ### Added
1342
-
1343
- - New rule: `function-declaration-style` - Auto-fix function declarations to arrow expressions
1344
-
1345
- ### Enhanced
1346
-
1347
- - `function-naming-convention` - Add auto-fix for missing Handler suffix
1348
- - `absolute-imports-only` - Allow relative imports in entry files (main.tsx/main.ts)
1349
- - `absolute-imports-only` - Add pages folder to default allowed folders
1350
- - `module-index-exports` - Add pages folder to default module and lazy load folders
1351
-
1352
- ### Documentation
1353
-
1354
- - Update rule count to 61 across all docs
1355
- - Add function-declaration-style docs with func-style pairing note
1356
- - Change Tailwind CSS badge to >=3.0.0
1357
-
1358
- ### Stats
1359
-
1360
- - Total Rules: 61
1361
-
1362
- ---
1363
-
1364
- ## [1.2.7] - 2026-01-27
1365
-
1366
- - Minor fixes
1367
-
1368
- ---
1369
-
1370
- ## [1.2.6] - 2026-01-27
1371
-
1372
- - Minor fixes
1373
-
1374
- ---
1375
-
1376
- ## [1.2.5] - 2026-01-27
1377
-
1378
- ### Documentation
1379
-
1380
- - Update badges and requirements for Node.js 20, TypeScript 5, Tailwind CSS 4
1381
-
1382
- ---
1383
-
1384
- ## [1.2.4] - 2026-01-27
1385
-
1386
- ### Fixed
1387
-
1388
- - Sync eslint configs and add semi-style rule
1389
- - Add missing `component-props-destructure` rule to react config and recommended react config
1390
- - Add @stylistic/semi-style rule to all configs to enforce semicolons at end of line
1391
-
1392
- ---
1393
-
1394
- ## [1.2.3] - 2026-01-27
1395
-
1396
- ### Fixed
1397
-
1398
- - `simple-call-single-line` - Remove space before ?. when collapsing simple calls to single line
1399
-
1400
- ---
1401
-
1402
- ## [1.2.2] - 2026-01-27
1403
-
1404
- ### Enhanced
1405
-
1406
- - `variable-naming-convention` - Enforce camelCase for all variables including constants (no more SCREAMING_SNAKE_CASE)
1407
- - `function-object-destructure` - Add auto-fix for arrow expression body callbacks
1408
- - `simple-call-single-line` - Extend to collapse callbacks with params and simple expression bodies, handle optional chaining
1409
-
1410
- ---
1411
-
1412
- ## [1.2.1] - 2026-01-27
1413
-
1414
- ### Added
1415
-
1416
- - New rule: `classname-multiline` - Enforce multiline className formatting when class count > 3 or length > 80
1417
-
1418
- ### Enhanced
1419
-
1420
- - JSX className with no expressions uses "..." string literal format
1421
- - JSX className with expressions uses {`...`} template literal format
1422
- - Variables/object properties use `...` template literal for multiline
1423
- - Updated `classname-no-extra-spaces` and `jsx-string-value-trim` to skip multiline format
1424
- - Upgraded test project to Tailwind CSS v4 with eslint-plugin-tailwindcss@beta
1425
-
1426
- ---
1427
-
1428
- ## [1.2.0] - 2026-01-25
1429
-
1430
- **React Code Order & TypeScript Enhancement Rules**
1431
-
1432
- **Version Range:** v1.1.10 → v1.2.0
1433
-
1434
- ### Added
1435
-
1436
- **New Rules (5)**
1437
- - `component-props-destructure` - Enforce props destructuring in React components
1438
- - `component-props-inline-type` - Enforce inline type annotations for component props
1439
- - `function-object-destructure` - Enforce typed params with body destructuring
1440
- - `react-code-order` - Enforce consistent ordering of hooks and code blocks
1441
- - `type-annotation-spacing` - Enforce proper spacing in TypeScript type annotations
1442
-
1443
- ### Stats
1444
-
1445
- - Total Rules: 56 (was 51)
1446
-
1447
- **Full Changelog:** [v1.1.10...v1.2.0](https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.1.10...v1.2.0)
1448
-
1449
- ---
1450
-
1451
- ## [1.1.10] - 2026-01-20
1452
-
1453
- - Minor fixes
1454
-
1455
- ---
1456
-
1457
- ## [1.1.9] - 2026-01-20
1458
-
1459
- ### Changed
1460
-
1461
- - Sync default folders between absolute-imports-only and module-index-exports (27 folders)
1462
- - Reorganize rules export object with alphabetically ordered categories
1463
-
1464
- ---
1465
-
1466
- ## [1.1.8] - 2026-01-20
1467
-
1468
- ### Added
1469
-
1470
- - TypeScript rules test cases in src/interfaces/, src/enums/, src/types/
1471
-
1472
- ---
1473
-
1474
- ## [1.1.7] - 2026-01-20
1475
-
1476
- ### Changed
1477
-
1478
- - Add TypeScript formatting rules to recommended and test configs:
1479
- - enum-format, interface-format, type-format, typescript-definition-location
1480
-
1481
- ---
1482
-
1483
- ## [1.1.6] - 2026-01-20
1484
-
1485
- ### Added
1486
-
1487
- - New rule: `type-format` - Enforce PascalCase with Type suffix, camelCase properties
1488
-
1489
- ---
1490
-
1491
- ## [1.1.5] - 2026-01-20
1492
-
1493
- ### Added
1494
-
1495
- - New rule: `enum-format` - Enforce PascalCase with Enum suffix, UPPER_CASE members
1496
-
1497
- ---
1498
-
1499
- ## [1.1.4] - 2026-01-20
1500
-
1501
- ### Added
1502
-
1503
- - New rule: `interface-format` - Enforce PascalCase with Interface suffix, camelCase properties
1504
-
1505
- ---
1506
-
1507
- ## [1.1.3] - 2026-01-20
1508
-
1509
- ### Added
1510
-
1511
- - New rule: `typescript-definition-location` - Enforce TypeScript definitions in designated folders
1512
-
1513
- ---
1514
-
1515
- ## [1.1.2] - 2026-01-20
1516
-
1517
- - Minor fixes
1518
-
1519
- ---
1520
-
1521
- ## [1.1.1] - 2026-01-20
1522
-
1523
- - Minor fixes
1524
-
1525
- ---
1526
-
1527
- ## [1.1.0] - 2026-01-20
1528
-
1529
- **TypeScript + Tailwind Support & Configurable Rules**
1530
-
1531
- **Version Range:** v1.0.17 → v1.1.0
1532
-
1533
- ### Added
1534
-
1535
- **New Configuration: React + TypeScript + Tailwind** (`react-ts-tw`)
1536
- - TypeScript parser and TypeScript ESLint plugin support
1537
- - Tailwind CSS plugin integration
1538
- - Perfectionist rules for sorting interfaces, enums, and object types
1539
- - Comprehensive test project with TypeScript components
1540
-
1541
- **New Rule**
1542
- - `index-export-style` - Enforce consistent export formatting in index files
1543
-
1544
- **Configurable Options**
1545
- - `array-items-per-line` - Added `maxItems` option (default: 3)
1546
- - `hook-deps-per-line` - Added `maxDeps` option (default: 2)
1547
- - `multiline-if-conditions` - Added `maxOperands` option (default: 3)
1548
- - `function-arguments-format` - New rule merging multiline argument rules with customizable options
1549
-
1550
- **Documentation**
1551
- - Added AGENTS.md for AI coding agents
1552
-
1553
- ### Changed
1554
-
1555
- - `export-format` and `import-format` - Made self-sufficient, added `maxSpecifiers` option
1556
- - `object-property-per-line` - Made self-sufficient, added `minProperties` option
1557
- - `module-index-exports` - Support TypeScript index files
1558
- - Migrated to `@stylistic/eslint-plugin` for formatting rules
1559
-
1560
- ### Stats
1561
-
1562
- - Total Rules: 51 (was 45)
1563
- - All changes are backward compatible
1564
-
1565
- **Full Changelog:** [v1.0.17...v1.1.0](https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.17...v1.1.0)
1566
-
1567
- ---
1568
-
1569
- ## [1.0.41] - 2026-01-19
1570
-
1571
- - Minor fixes
1572
-
1573
- ---
1574
-
1575
- ## [1.0.40] - 2026-01-19
1576
-
1577
- - Minor fixes
1578
-
1579
- ---
1580
-
1581
- ## [1.0.39] - 2026-01-19
1582
-
1583
- - Minor fixes
1584
-
1585
- ---
1586
-
1587
- ## [1.0.38] - 2026-01-19
1588
-
1589
- - Minor fixes
1590
-
1591
- ---
1592
-
1593
- ## [1.0.37] - 2026-01-13
1594
-
1595
- - Minor fixes
1596
-
1597
- ---
1598
-
1599
- ## [1.0.36] - 2026-01-13
1600
-
1601
- - Minor fixes
1602
-
1603
- ---
1604
-
1605
- ## [1.0.35] - 2026-01-13
1606
-
1607
- - Minor fixes
1608
-
1609
- ---
1610
-
1611
- ## [1.0.34] - 2026-01-13
1612
-
1613
- - Minor fixes
1614
-
1615
- ---
1616
-
1617
- ## [1.0.33] - 2026-01-13
1618
-
1619
- - Minor fixes
1620
-
1621
- ---
1622
-
1623
- ## [1.0.32] - 2026-01-13
1624
-
1625
- - Minor fixes
1626
-
1627
- ---
1628
-
1629
- ## [1.0.31] - 2026-01-13
1630
-
1631
- - Minor fixes
1632
-
1633
- ---
1634
-
1635
- ## [1.0.30] - 2026-01-13
1636
-
1637
- - Minor fixes
1638
-
1639
- ---
1640
-
1641
- ## [1.0.29] - 2026-01-12
1642
-
1643
- - Minor fixes
1644
-
1645
- ---
1646
-
1647
- ## [1.0.28] - 2026-01-12
1648
-
1649
- ### Changed
1650
-
1651
- - **BREAKING:** Merge `multiline-argument-newline` and `multiple-arguments-per-line` into `function-arguments-format`
1652
- - Add customizable options: minArgs (default: 2), skipHooks (default: true), skipSingleArg (default: true)
1653
- - Remove @stylistic/function-call-argument-newline from recommended config
1654
-
1655
- ---
1656
-
1657
- ## [1.0.27] - 2026-01-12
1658
-
1659
- ### Enhanced
1660
-
1661
- - `index-export-style` - Handle export padding for all files
1662
- - Non-index files require blank lines between exports
1663
- - Index files have no blank lines between exports
1664
-
1665
- ---
1666
-
1667
- ## [1.0.26] - 2026-01-12
1668
-
1669
- ### Documentation
1670
-
1671
- - Clarify index-export-style and @stylistic relationship
1672
- - @stylistic handles general blank lines (return, variables, expressions)
1673
- - index-export-style handles blank line enforcement in index files
1674
-
1675
- ---
1676
-
1677
- ## [1.0.25] - 2026-01-12
1678
-
1679
- ### Enhanced
1680
-
1681
- - `object-property-per-line` - Made self-sufficient
1682
- - Rule now handles complete multiline object formatting
1683
- - Remove dependency on @stylistic/object-curly-newline
1684
-
1685
- ---
1686
-
1687
- ## [1.0.24] - 2026-01-12
1688
-
1689
- ### Enhanced
1690
-
1691
- - `export-format` and `import-format` - Made self-sufficient
1692
- - Both now handle collapse (≤ threshold) and expand (> threshold)
1693
- - Remove dependency on @stylistic/object-curly-newline for imports/exports
1694
-
1695
- ---
1696
-
1697
- ## [1.0.23] - 2026-01-12
1698
-
1699
- ### Changed
1700
-
1701
- - Migrate to @stylistic/eslint-plugin for formatting rules
1702
- - Replace 24 deprecated ESLint formatting rules with @stylistic equivalents
1703
-
1704
- ---
1705
-
1706
- ## [1.0.22] - 2026-01-11
1707
-
1708
- ### Enhanced
1709
-
1710
- - `multiline-if-conditions` - Add maxOperands configuration option (default: 3)
1711
-
1712
- ---
1713
-
1714
- ## [1.0.21] - 2026-01-11
1715
-
1716
- ### Enhanced
1717
-
1718
- - `hook-deps-per-line` - Add maxDeps configuration option (default: 2)
1719
-
1720
- ---
1721
-
1722
- ## [1.0.20] - 2026-01-11
1723
-
1724
- ### Enhanced
1725
-
1726
- - `array-items-per-line` - Add maxItems configuration option (default: 3)
1727
-
1728
- ---
1729
-
1730
- ## [1.0.19] - 2026-01-11
1731
-
1732
- - Version bump
1733
-
1734
- ---
1735
-
1736
- ## [1.0.18] - 2026-01-11
1737
-
1738
- ### Enhanced
1739
-
1740
- - `import-format` and `export-format` - Add maxSpecifiers option (default: 3)
1741
- - `object-property-per-line` - Add minProperties option (default: 2)
1742
- - Remove eslint-plugin-newline dependency (redundant with object-curly-newline)
1743
-
1744
- ---
1745
-
1746
- ## [1.0.17] - 2026-01-11
1747
-
1748
- ### Documentation
1749
-
1750
- - Update rule count from 47 to 48 in all README files
1751
- - Add coverage, public, and .vite to eslint config ignores
1752
-
1753
- ---
1754
-
1755
- ## [1.0.16] - 2026-01-09
1756
-
1757
- **New Rule: index-export-style**
1758
-
1759
- **Version Range:** v1.0.15 → v1.0.16
1760
-
1761
- ### Added
1762
-
1763
- **New Rule**
1764
- - `index-export-style` - Enforce consistent export style in index files 🔧
1765
- - Support two styles: 'shorthand' (default) and 'import-export'
1766
- - Shorthand: `export { a } from './file';`
1767
- - Import-export: `import { a } from './file'; export { a };`
1768
- - Auto-fixable with eslint --fix
1769
- - Detects and reports mixed export styles
1770
-
1771
- ### Stats
1772
-
1773
- - Total Rules: 48 (was 47)
1774
-
1775
- **Full Changelog:** [v1.0.15...v1.0.16](https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.15...v1.0.16)
1776
-
1777
- ---
1778
-
1779
- ## [1.0.15] - 2026-01-09
1780
-
1781
- ### Added
1782
-
1783
- - Additional perfectionist rules to recommended React config:
1784
- - perfectionist/sort-array-includes
1785
- - perfectionist/sort-maps
1786
- - perfectionist/sort-sets
1787
- - perfectionist/sort-switch-case
1788
- - perfectionist/sort-variable-declarations
1789
-
1790
- ---
1791
-
1792
- ## [1.0.14] - 2026-01-06
1793
-
1794
- **Customizable Rules, Recommended Configs & Documentation Overhaul**
1795
-
1796
- **Version Range:** v1.0.8 → v1.0.14
1797
-
1798
- ### Added
1799
-
1800
- **Customizable Folder Options**
1801
- - `absolute-imports-only` - Add extraAllowedFolders, extraReduxSubfolders, extraDeepImportFolders options
1802
- - `module-index-exports` - Add extraModuleFolders, extraLazyLoadFolders, extraIgnorePatterns options
1803
- - Users can now extend default folder lists without replacing them
1804
-
1805
- **Recommended ESLint Configurations**
1806
- - Add recommended-configs/react/ folder with model eslint.config.js
1807
- - Include comprehensive README with installation and plugin documentation
1808
-
1809
- **Comprehensive Documentation**
1810
- - Add comprehensive examples for all 47 rules in README
1811
- - Enhance README with emojis, rules summary table, and introduction section
1812
-
1813
- ### Changed
1814
-
1815
- - Standardized all internal helper function names with `Handler` suffix
1816
-
1817
- ### Documentation
1818
-
1819
- - Add comprehensive block comments to all ESLint rules with good/bad examples
1820
-
1821
- ### Stats
1822
-
1823
- - Total Rules: 47
1824
-
1825
- **Full Changelog:** [v1.0.8...v1.0.14](https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.8...v1.0.14)
1826
-
1827
- ---
1828
-
1829
- ## [1.0.13] - 2026-01-06
1830
-
1831
- ### Added
1832
-
1833
- - Recommended ESLint configurations for React projects
1834
- - recommended-configs/react/ folder with model eslint.config.js
1835
-
1836
- ---
1837
-
1838
- ## [1.0.12] - 2026-01-06
1839
-
1840
- ### Documentation
1841
-
1842
- - Enhance README with emojis, rules summary table, and introduction section
1843
-
1844
- ---
1845
-
1846
- ## [1.0.11] - 2026-01-06
1847
-
1848
- ### Documentation
1849
-
1850
- - Add comprehensive examples for all 47 rules in README
1851
-
1852
- ---
1853
-
1854
- ## [1.0.10] - 2026-01-06
1855
-
1856
- ### Documentation
1857
-
1858
- - Update README file and TypeScript rules types
1859
-
1860
- ---
1861
-
1862
- ## [1.0.9] - 2026-01-06
1863
-
1864
- ### Changed
1865
-
1866
- - Standardize internal helper function names with Handler suffix
1867
- - All check*, is*, get*, has* functions renamed
1868
-
1869
- ---
1870
-
1871
- ## [1.0.8] - 2026-01-06
1872
-
1873
- ### Documentation
1874
-
1875
- - Add comprehensive block comments to all ESLint rules
1876
- - Each rule has title, description, and good/bad code examples
1877
-
1878
- ---
1879
-
1880
- ## [1.0.7] - 2026-01-06
1881
-
1882
- **TypeScript Type Definitions for IDE Support**
1883
-
1884
- **Version Range:** v1.0.6 → v1.0.7
1885
-
1886
- ### Added
1887
-
1888
- **TypeScript Support**
1889
- - Add TypeScript type definitions for IDE support (index.d.ts)
1890
- - Export all 47 rule names as literal types for autocomplete
1891
- - Add PluginRules interface mapping rules to Rule.RuleModule
1892
- - Include module augmentation for ESLint's Linter.RulesRecord
1893
-
1894
- ### Stats
1895
-
1896
- - Total Rules: 47
1897
-
1898
- **Full Changelog:** [v1.0.6...v1.0.7](https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.6...v1.0.7)
1899
-
1900
- ---
1901
-
1902
- ## [1.0.6] - 2026-01-06
1903
-
1904
- **Initial Public Release**
1905
-
1906
- ### Added
1907
-
1908
- - 45+ auto-fixable ESLint rules for React/JSX projects
1909
- - Full support for ESLint v9+ flat config
1910
- - Zero dependencies (except peer dependency on ESLint)
1911
-
1912
- ### Requirements
1913
-
1914
- - ESLint >= 9.0.0
1915
- - Node.js >= 20.0.0
1916
-
1917
- ### Stats
1918
-
1919
- - Total Rules: 45+
1920
-
1921
- **Full Changelog:** [v1.0.6](https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/releases/tag/v1.0.6)
1922
-
1923
- ---
1924
-
1925
- ## [1.0.5] - 2026-01-06
1926
-
1927
- - Pre-release version
1928
-
1929
- ---
1930
-
1931
- ## [1.0.4] - 2026-01-06
1932
-
1933
- - Pre-release version
1934
-
1935
- ---
1936
-
1937
- ## [1.0.3] - 2026-01-06
1938
-
1939
- - Pre-release version
1940
-
1941
- ---
1942
-
1943
- ## [1.0.2] - 2026-01-06
1944
-
1945
- - Pre-release version
1946
-
1947
- ---
1948
-
1949
- [2.0.0]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.20.0...v2.0.0
1950
- [1.20.0]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.19.0...v1.20.0
1951
- [1.19.0]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.18.0...v1.19.0
1952
- [1.18.0]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.17.2...v1.18.0
1953
- [1.17.2]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.17.1...v1.17.2
1954
- [1.17.1]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.17.0...v1.17.1
1955
- [1.17.0]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.16.0...v1.17.0
1956
- [1.16.0]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.15.0...v1.16.0
1957
- [1.15.0]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.14.4...v1.15.0
1958
- [1.14.4]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.14.3...v1.14.4
1959
- [1.14.3]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.14.2...v1.14.3
1960
- [1.14.2]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.14.1...v1.14.2
1961
- [1.14.1]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.14.0...v1.14.1
1962
- [1.14.0]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.13.0...v1.14.0
1963
- [1.13.0]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.12.1...v1.13.0
1964
- [1.12.1]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.12.0...v1.12.1
1965
- [1.12.0]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.11.9...v1.12.0
1966
- [1.11.9]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.11.8...v1.11.9
1967
- [1.11.8]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.11.7...v1.11.8
1968
- [1.11.7]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.11.6...v1.11.7
1969
- [1.11.6]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.11.5...v1.11.6
1970
- [1.11.5]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.11.4...v1.11.5
1971
- [1.11.4]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.11.3...v1.11.4
1972
- [1.11.3]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.11.2...v1.11.3
1973
- [1.11.2]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.11.1...v1.11.2
1974
- [1.11.1]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.11.0...v1.11.1
1975
- [1.11.0]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.10.3...v1.11.0
1976
- [1.10.3]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.10.2...v1.10.3
1977
- [1.10.2]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.10.1...v1.10.2
1978
- [1.10.1]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.10.0...v1.10.1
1979
- [1.10.0]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.9.7...v1.10.0
1980
- [1.9.7]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.9.6...v1.9.7
1981
- [1.9.6]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.9.5...v1.9.6
1982
- [1.9.5]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.9.4...v1.9.5
1983
- [1.9.4]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.9.3...v1.9.4
1984
- [1.9.3]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.9.2...v1.9.3
1985
- [1.9.2]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.9.1...v1.9.2
1986
- [1.9.1]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.9.0...v1.9.1
1987
- [1.9.0]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.8.4...v1.9.0
1988
- [1.8.4]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.8.3...v1.8.4
1989
- [1.8.3]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.8.2...v1.8.3
1990
- [1.8.2]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.8.1...v1.8.2
1991
- [1.8.1]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.8.0...v1.8.1
1992
- [1.8.0]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.7.6...v1.8.0
1993
- [1.7.6]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.7.5...v1.7.6
1994
- [1.7.5]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.7.4...v1.7.5
1995
- [1.7.4]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.7.3...v1.7.4
1996
- [1.7.3]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.7.2...v1.7.3
1997
- [1.7.2]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.7.1...v1.7.2
1998
- [1.7.1]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.7.0...v1.7.1
1999
- [1.7.0]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.6.6...v1.7.0
2000
- [1.6.6]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.6.5...v1.6.6
2001
- [1.6.5]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.6.4...v1.6.5
2002
- [1.6.4]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.6.3...v1.6.4
2003
- [1.6.3]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.6.2...v1.6.3
2004
- [1.6.2]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.6.1...v1.6.2
2005
- [1.6.1]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.6.0...v1.6.1
2006
- [1.6.0]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.5.2...v1.6.0
2007
- [1.5.2]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.5.1...v1.5.2
2008
- [1.5.1]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.5.0...v1.5.1
2009
- [1.5.0]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.4.5...v1.5.0
2010
- [1.4.5]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.4.3...v1.4.5
2011
- [1.4.3]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.4.2...v1.4.3
2012
- [1.4.2]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.4.1...v1.4.2
2013
- [1.4.1]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.4.0...v1.4.1
2014
- [1.4.0]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.3.11...v1.4.0
2015
- [1.3.11]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.3.10...v1.3.11
2016
- [1.3.10]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.3.9...v1.3.10
2017
- [1.3.9]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.3.8...v1.3.9
2018
- [1.3.8]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.3.7...v1.3.8
2019
- [1.3.7]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.3.6...v1.3.7
2020
- [1.3.6]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.3.5...v1.3.6
2021
- [1.3.5]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.3.4...v1.3.5
2022
- [1.3.4]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.3.3...v1.3.4
2023
- [1.3.3]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.3.2...v1.3.3
2024
- [1.3.2]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.3.1...v1.3.2
2025
- [1.3.1]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.3.0...v1.3.1
2026
- [1.3.0]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.2.9...v1.3.0
2027
- [1.2.9]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.2.8...v1.2.9
2028
- [1.2.8]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.2.7...v1.2.8
2029
- [1.2.7]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.2.6...v1.2.7
2030
- [1.2.6]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.2.5...v1.2.6
2031
- [1.2.5]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.2.4...v1.2.5
2032
- [1.2.4]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.2.3...v1.2.4
2033
- [1.2.3]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.2.2...v1.2.3
2034
- [1.2.2]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.2.1...v1.2.2
2035
- [1.2.1]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.2.0...v1.2.1
2036
- [1.2.0]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.1.10...v1.2.0
2037
- [1.1.10]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.1.9...v1.1.10
2038
- [1.1.9]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.1.8...v1.1.9
2039
- [1.1.8]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.1.7...v1.1.8
2040
- [1.1.7]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.1.6...v1.1.7
2041
- [1.1.6]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.1.5...v1.1.6
2042
- [1.1.5]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.1.4...v1.1.5
2043
- [1.1.4]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.1.3...v1.1.4
2044
- [1.1.3]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.1.2...v1.1.3
2045
- [1.1.2]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.1.1...v1.1.2
2046
- [1.1.1]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.1.0...v1.1.1
2047
- [1.1.0]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.41...v1.1.0
2048
- [1.0.41]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.40...v1.0.41
2049
- [1.0.40]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.39...v1.0.40
2050
- [1.0.39]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.38...v1.0.39
2051
- [1.0.38]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.37...v1.0.38
2052
- [1.0.37]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.36...v1.0.37
2053
- [1.0.36]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.35...v1.0.36
2054
- [1.0.35]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.34...v1.0.35
2055
- [1.0.34]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.33...v1.0.34
2056
- [1.0.33]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.32...v1.0.33
2057
- [1.0.32]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.31...v1.0.32
2058
- [1.0.31]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.30...v1.0.31
2059
- [1.0.30]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.29...v1.0.30
2060
- [1.0.29]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.28...v1.0.29
2061
- [1.0.28]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.27...v1.0.28
2062
- [1.0.27]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.26...v1.0.27
2063
- [1.0.26]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.25...v1.0.26
2064
- [1.0.25]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.24...v1.0.25
2065
- [1.0.24]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.23...v1.0.24
2066
- [1.0.23]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.22...v1.0.23
2067
- [1.0.22]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.21...v1.0.22
2068
- [1.0.21]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.20...v1.0.21
2069
- [1.0.20]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.19...v1.0.20
2070
- [1.0.19]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.18...v1.0.19
2071
- [1.0.18]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.17...v1.0.18
2072
- [1.0.17]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.16...v1.0.17
2073
- [1.0.16]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.15...v1.0.16
2074
- [1.0.15]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.14...v1.0.15
2075
- [1.0.14]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.13...v1.0.14
2076
- [1.0.13]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.12...v1.0.13
2077
- [1.0.12]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.11...v1.0.12
2078
- [1.0.11]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.10...v1.0.11
2079
- [1.0.10]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.9...v1.0.10
2080
- [1.0.9]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.8...v1.0.9
2081
- [1.0.8]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.7...v1.0.8
2082
- [1.0.7]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.6...v1.0.7
2083
- [1.0.6]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.5...v1.0.6
2084
- [1.0.5]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.4...v1.0.5
2085
- [1.0.4]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.3...v1.0.4
2086
- [1.0.3]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/compare/v1.0.2...v1.0.3
2087
- [1.0.2]: https://github.com/Mohamed-Elhawary/eslint-plugin-code-style/releases/tag/v1.0.2