Skip to content

Commit 29a1a63

Browse files
committed
fix: enhance naming conventions for Vue modular architecture
- Updated the enforce-naming-convention rule to include validation for entity, routes, and menu file naming conventions. - Added specific checks for PascalCase filenames for entities and exact naming for routes and menu files. - Modified the getFileType function to recognize entities, routes, and menu files. - Updated tests to cover new naming conventions for entities, routes, and menu files, ensuring compliance with the updated rules.
1 parent e71899f commit 29a1a63

File tree

4 files changed

+348
-304
lines changed

4 files changed

+348
-304
lines changed

docs/rules/enforce-naming-convention.md

Lines changed: 102 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@ This rule enforces consistent naming conventions for Vue component filenames and
1010
- **Components** → PascalCase filenames → `UserTable.vue`, `LoginForm.vue`, `CgsIcon.vue`
1111
- **Stores** → Free naming (any filename allowed)
1212
- **Composables** → Free naming (any filename allowed)
13-
- **Services** → Start with lowercase letter → `index.ts`, `auth.api.ts`, `frameMessages.ts`
13+
- **Services** → Start with lowercase letter → `index.ts`, `auth.ts`, `frameMessages.ts`
14+
- **Entities** → PascalCase filenames → `User.ts`, `Settings.ts`, `ApiResponse.ts`
15+
- **Routes** → Must be exactly `routes.ts` in modules
16+
- **Menu** → Must be exactly `menu.ts` in modules
1417

1518
**Note**: This rule is designed for modern Vue applications where components typically don't have explicit `name` properties (especially with `<script setup>`). The rule primarily validates **filenames** rather than component names.
1619

@@ -70,6 +73,30 @@ export class AuthService {
7073
}
7174
```
7275

76+
```js
77+
// File: src/entities/user.ts
78+
// Entity files should use PascalCase
79+
export interface User {
80+
// entity definition
81+
}
82+
```
83+
84+
```js
85+
// File: src/modules/auth/Routes.ts
86+
// Module routes file must be exactly 'routes.ts'
87+
export default [
88+
// route definitions
89+
]
90+
```
91+
92+
```js
93+
// File: src/modules/users/navigation.ts
94+
// Module menu file must be exactly 'menu.ts'
95+
export const moduleNavigation = [
96+
// menu definitions
97+
]
98+
```
99+
73100
#### ✅ Correct
74101

75102
```vue
@@ -133,7 +160,7 @@ export function fetchData() {
133160
```
134161

135162
```js
136-
// File: src/services/auth.api.ts
163+
// File: src/services/auth.ts
137164
// Proper service naming (starts with lowercase)
138165
export class AuthAPI {
139166
// service implementation
@@ -143,7 +170,7 @@ export class AuthAPI {
143170
```js
144171
// File: src/services/index.ts
145172
// Proper service naming (starts with lowercase)
146-
export * from './auth.api'
173+
export * from './auth'
147174
export * from './frameMessages'
148175
```
149176

@@ -155,6 +182,43 @@ export function sendMessage() {
155182
}
156183
```
157184

185+
```js
186+
// File: src/entities/User.ts
187+
// Proper entity naming (PascalCase)
188+
export interface User {
189+
id: string
190+
name: string
191+
email: string
192+
}
193+
```
194+
195+
```js
196+
// File: src/entities/Settings.ts
197+
// Proper entity naming (PascalCase)
198+
export interface Settings {
199+
theme: string
200+
language: string
201+
}
202+
```
203+
204+
```js
205+
// File: src/modules/auth/routes.ts
206+
// Correct module routes file name
207+
export default [
208+
{ path: '/login', component: () => import('./views/LoginView.vue') },
209+
{ path: '/register', component: () => import('./views/RegisterView.vue') },
210+
]
211+
```
212+
213+
```js
214+
// File: src/modules/users/menu.ts
215+
// Correct module menu file name
216+
export const moduleNavigation = [
217+
{ title: 'User List', route: '/users' },
218+
{ title: 'User Roles', route: '/users/roles' },
219+
]
220+
```
221+
158222
## Options
159223

160224
```js
@@ -233,7 +297,28 @@ The rule automatically detects file types based on directory structure and filen
233297
- **Directory patterns**: `/services/`, `/service/`
234298
- **File pattern**: `*.ts`, `*.js`
235299
- **Convention**: Must start with lowercase letter
236-
- **Examples**: `auth.api.ts`, `index.ts`, `frameMessages.ts`, `notifications.api.ts`
300+
- **Examples**: `auth.ts`, `index.ts`, `frameMessages.ts`, `notifications.ts`
301+
302+
### Entities
303+
304+
- **Directory patterns**: `/entities/`, `/entity/`
305+
- **File pattern**: `*.ts`, `*.js`
306+
- **Convention**: PascalCase filenames (domain/business entities)
307+
- **Examples**: `User.ts`, `Settings.ts`, `ApiResponse.ts`, `Permission.ts`
308+
309+
### Routes
310+
311+
- **Directory patterns**: Module files only (`modules/*/routes.ts`)
312+
- **File pattern**: Must be exactly `routes.ts`
313+
- **Convention**: Fixed filename for module route definitions
314+
- **Examples**: `modules/auth/routes.ts`, `modules/users/routes.ts`
315+
316+
### Menu
317+
318+
- **Directory patterns**: Module files only (`modules/*/menu.ts`)
319+
- **File pattern**: Must be exactly `menu.ts`
320+
- **Convention**: Fixed filename for module navigation definitions
321+
- **Examples**: `modules/auth/menu.ts`, `modules/users/menu.ts`
237322

238323
## Configuration Examples
239324

@@ -251,6 +336,8 @@ This enforces:
251336
- File type-specific validation based on directory structure
252337
- **PascalCase component filenames** for all Vue files (regardless of explicit component names)
253338
- Proper filename patterns for services
339+
- **PascalCase entity filenames** for business/domain objects
340+
- **Exact naming for module routes and menu files**
254341
- **Free naming for stores and composables** (no restrictions)
255342

256343
### Legacy Mode (Component Names Only)
@@ -317,6 +404,17 @@ This enforces:
317404
❌ src/services/FrameMessages.ts → Should be frameMessages.ts
318405
✅ src/services/index.ts → OK (starts with lowercase)
319406

407+
# Entity naming issues
408+
❌ src/entities/user.ts → Should be User.ts
409+
❌ src/entities/api-response.ts → Should be ApiResponse.ts
410+
✅ src/entities/Settings.ts → OK (PascalCase)
411+
412+
# Module file naming issues
413+
❌ src/modules/auth/Routes.ts → Should be routes.ts
414+
❌ src/modules/users/navigation.ts → Should be menu.ts
415+
✅ src/modules/auth/routes.ts → OK (exact name)
416+
✅ src/modules/users/menu.ts → OK (exact name)
417+
320418
# Store and composable naming
321419
✅ src/stores/authStore.ts → OK (free naming)
322420
✅ src/stores/useAuthStore.ts → OK (free naming)

0 commit comments

Comments
 (0)