@quo-digital/eslint-config 1.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/README.md +217 -0
- package/index.js +102 -0
- package/package.json +12 -0
package/README.md
ADDED
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
# @quo-digital/eslint-config
|
|
2
|
+
|
|
3
|
+
Configuración oficial y centralizada de ESLint para codigo basado en TypeScript.
|
|
4
|
+
|
|
5
|
+
Publicada en npm como: **@quo-digital/eslint-config**
|
|
6
|
+
|
|
7
|
+
## 🎯 Objetivo
|
|
8
|
+
|
|
9
|
+
Estandarizar las reglas de calidad de código para:
|
|
10
|
+
|
|
11
|
+
- Garantizar consistencia entre repositorios
|
|
12
|
+
- Reducir conflictos en Pull Requests
|
|
13
|
+
- Elevar la calidad técnica del código
|
|
14
|
+
- Centralizar la gobernanza técnica
|
|
15
|
+
- Facilitar la escalabilidad del equipo
|
|
16
|
+
|
|
17
|
+
Esta configuración es la única fuente de verdad para las reglas de ESLint en los las instancias backend y frontend en Typescript.
|
|
18
|
+
|
|
19
|
+
## 📦 Instalación
|
|
20
|
+
|
|
21
|
+
### 1️⃣ Instalar el package
|
|
22
|
+
|
|
23
|
+
En la aplicacion o proyecto:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npm install -D @quo-digital/eslint-config
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### 2️⃣ Instalar dependencias requeridas (si no existen)
|
|
30
|
+
|
|
31
|
+
Este package depende de los siguientes paquetes como devDependencies:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
npm install -D \
|
|
35
|
+
eslint@^8 \
|
|
36
|
+
@typescript-eslint/parser@^8 \
|
|
37
|
+
@typescript-eslint/eslint-plugin@^8 \
|
|
38
|
+
eslint-plugin-sonarjs@^0.21.0 \
|
|
39
|
+
eslint-plugin-simple-import-sort \
|
|
40
|
+
eslint-plugin-unused-imports \
|
|
41
|
+
eslint-plugin-prettier \
|
|
42
|
+
eslint-config-prettier \
|
|
43
|
+
prettier
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Puedes verificar las dependencias requeridas con:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
npm info @quo-digital/eslint-config peerDependencies
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## ⚙️ Configuración
|
|
53
|
+
|
|
54
|
+
Crear o reemplazar el archivo `.eslintrc.js` en el codigo con:
|
|
55
|
+
|
|
56
|
+
```javascript
|
|
57
|
+
module.exports = {
|
|
58
|
+
root: true,
|
|
59
|
+
extends: ['@quo-digital/eslint-config'],
|
|
60
|
+
};
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
> ⚠️ No agregar reglas locales salvo que exista una justificación técnica clara.
|
|
64
|
+
>
|
|
65
|
+
> Toda modificación debe realizarse en el repositorio central.
|
|
66
|
+
|
|
67
|
+
## 📜 Scripts recomendados
|
|
68
|
+
|
|
69
|
+
Asegúrate de que el `package.json` de la instancia contenga:
|
|
70
|
+
|
|
71
|
+
```json
|
|
72
|
+
{
|
|
73
|
+
"scripts": {
|
|
74
|
+
"lint": "eslint \"src/**/*.ts\" --fix",
|
|
75
|
+
"lint:check": "eslint \"src/**/*.ts\""
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## 🔌 Extensiones recomendadas para IDEs
|
|
81
|
+
|
|
82
|
+
Para una mejor experiencia de desarrollo con feedback en tiempo real de ESLint:
|
|
83
|
+
|
|
84
|
+
### VS Code y Cursor
|
|
85
|
+
|
|
86
|
+
Ambos editores comparten el ecosistema de extensiones de VS Code. Instala:
|
|
87
|
+
|
|
88
|
+
| Extensión | ID | Descripción |
|
|
89
|
+
|-----------|-----|-------------|
|
|
90
|
+
| **ESLint** | `dbaeumer.vscode-eslint` | Integración oficial de ESLint |
|
|
91
|
+
| **Prettier** | `esbenp.prettier-vscode` | Formateo de código (requerido por esta config) |
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
# Instalación desde terminal (VS Code / Cursor)
|
|
95
|
+
code --install-extension dbaeumer.vscode-eslint
|
|
96
|
+
code --install-extension esbenp.prettier-vscode
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
O busca "ESLint" y "Prettier" en la vista de extensiones (`Ctrl+Shift+X` / `Cmd+Shift+X`).
|
|
100
|
+
|
|
101
|
+
### WebStorm
|
|
102
|
+
|
|
103
|
+
ESLint viene integrado. Actívalo en:
|
|
104
|
+
|
|
105
|
+
**Settings** → **Languages & Frameworks** → **JavaScript** → **Code Quality Tools** → **ESLint**
|
|
106
|
+
|
|
107
|
+
- Marca **Automatic ESLint configuration** o apunta a tu `.eslintrc.js`
|
|
108
|
+
- Opcional: habilita **Run eslint --fix on save**
|
|
109
|
+
|
|
110
|
+
### Claude Code
|
|
111
|
+
|
|
112
|
+
Claude Code se ejecuta como extensión sobre VS Code, por lo que usa las mismas extensiones:
|
|
113
|
+
|
|
114
|
+
- Instala **ESLint** (`dbaeumer.vscode-eslint`) y **Prettier** (`esbenp.prettier-vscode`)
|
|
115
|
+
- Las reglas se aplicarán automáticamente al editar código
|
|
116
|
+
|
|
117
|
+
## 🚀 Uso
|
|
118
|
+
|
|
119
|
+
### Desarrollo local
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
npm run lint
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Este comando:
|
|
126
|
+
|
|
127
|
+
- Ejecuta ESLint
|
|
128
|
+
- Corrige automáticamente errores auto-fixables
|
|
129
|
+
- Ordena imports
|
|
130
|
+
- Elimina imports no usados
|
|
131
|
+
|
|
132
|
+
### Validación (CI / Pull Requests)
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
npm run lint:check
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Este comando:
|
|
139
|
+
|
|
140
|
+
- Solo valida
|
|
141
|
+
- No modifica archivos
|
|
142
|
+
- Falla si existen errores
|
|
143
|
+
- Debe ejecutarse en el pipeline de CI/CD
|
|
144
|
+
|
|
145
|
+
## 📐 Reglas principales incluidas
|
|
146
|
+
|
|
147
|
+
### TypeScript
|
|
148
|
+
|
|
149
|
+
- Reglas recomendadas oficiales
|
|
150
|
+
- `@typescript-eslint/consistent-type-imports`
|
|
151
|
+
- No obliga `explicit-function-return-type` (decisión pragmática para NestJS)
|
|
152
|
+
|
|
153
|
+
### Clean Code
|
|
154
|
+
|
|
155
|
+
- Eliminación automática de imports no usados
|
|
156
|
+
- Orden obligatorio de imports
|
|
157
|
+
- Control de complejidad cognitiva (sonarjs)
|
|
158
|
+
|
|
159
|
+
### Buenas prácticas
|
|
160
|
+
|
|
161
|
+
- `console.log` prohibido
|
|
162
|
+
- Permitido `console.warn` y `console.error`
|
|
163
|
+
- Integración completa con Prettier
|
|
164
|
+
|
|
165
|
+
## 🏗️ Migración en aplicativos existentes
|
|
166
|
+
|
|
167
|
+
1. Instalar el package
|
|
168
|
+
2. Configurar `.eslintrc.js`
|
|
169
|
+
3. Ejecutar:
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
npm run lint
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
4. Corregir errores no auto-fixables
|
|
176
|
+
5. Validar con:
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
npm run lint:check
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
## 🔐 Requisitos
|
|
183
|
+
|
|
184
|
+
- Node 18+
|
|
185
|
+
- ESLint 8.x
|
|
186
|
+
- TypeScript 5.x
|
|
187
|
+
|
|
188
|
+
## 🔄 Versionado
|
|
189
|
+
|
|
190
|
+
Este package sigue versionado semántico:
|
|
191
|
+
|
|
192
|
+
- **MAJOR** → cambios breaking en reglas
|
|
193
|
+
- **MINOR** → nuevas reglas no breaking
|
|
194
|
+
- **PATCH** → ajustes internos
|
|
195
|
+
|
|
196
|
+
Actualizar en una instancia de node:
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
npm update @quo-digital/eslint-config
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
Instalar versión específica:
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
npm install -D @quo-digital/eslint-config@1.0.2
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
## 🧠 Gobernanza Técnica
|
|
209
|
+
|
|
210
|
+
Cualquier modificación en las reglas debe:
|
|
211
|
+
|
|
212
|
+
- Justificarse técnicamente
|
|
213
|
+
- Evaluar impacto en todos las aplicaciones
|
|
214
|
+
- Versionarse correctamente
|
|
215
|
+
- Documentarse
|
|
216
|
+
|
|
217
|
+
Esta configuración es el estándar oficial para backend y frontend basados en Typescript.
|
package/index.js
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
parser: '@typescript-eslint/parser',
|
|
3
|
+
|
|
4
|
+
parserOptions: {
|
|
5
|
+
project: 'tsconfig.json',
|
|
6
|
+
tsconfigRootDir: process.cwd(),
|
|
7
|
+
},
|
|
8
|
+
|
|
9
|
+
env: {
|
|
10
|
+
node: true,
|
|
11
|
+
jest: true,
|
|
12
|
+
},
|
|
13
|
+
|
|
14
|
+
plugins: [
|
|
15
|
+
'@typescript-eslint',
|
|
16
|
+
'unused-imports',
|
|
17
|
+
'simple-import-sort',
|
|
18
|
+
'sonarjs',
|
|
19
|
+
'prettier',
|
|
20
|
+
],
|
|
21
|
+
|
|
22
|
+
extends: [
|
|
23
|
+
'eslint:recommended',
|
|
24
|
+
'plugin:@typescript-eslint/recommended',
|
|
25
|
+
'plugin:sonarjs/recommended',
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Prettier integration
|
|
29
|
+
* MUST be last
|
|
30
|
+
*/
|
|
31
|
+
'plugin:prettier/recommended',
|
|
32
|
+
'prettier',
|
|
33
|
+
],
|
|
34
|
+
|
|
35
|
+
rules: {
|
|
36
|
+
/**
|
|
37
|
+
* =========================
|
|
38
|
+
* TypeScript
|
|
39
|
+
* =========================
|
|
40
|
+
*/
|
|
41
|
+
'@typescript-eslint/consistent-type-imports': 'error',
|
|
42
|
+
'@typescript-eslint/explicit-function-return-type': 'off',
|
|
43
|
+
|
|
44
|
+
// Disable base rule to avoid duplication
|
|
45
|
+
'@typescript-eslint/no-unused-vars': 'off',
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* =========================
|
|
49
|
+
* Unused Handling
|
|
50
|
+
* =========================
|
|
51
|
+
*/
|
|
52
|
+
'unused-imports/no-unused-imports': 'error',
|
|
53
|
+
|
|
54
|
+
'unused-imports/no-unused-vars': [
|
|
55
|
+
'error',
|
|
56
|
+
{
|
|
57
|
+
vars: 'all',
|
|
58
|
+
varsIgnorePattern: '^_',
|
|
59
|
+
args: 'after-used',
|
|
60
|
+
argsIgnorePattern: '^_',
|
|
61
|
+
},
|
|
62
|
+
],
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* =========================
|
|
66
|
+
* Clean Code
|
|
67
|
+
* =========================
|
|
68
|
+
*/
|
|
69
|
+
'simple-import-sort/imports': 'error',
|
|
70
|
+
'simple-import-sort/exports': 'error',
|
|
71
|
+
|
|
72
|
+
'sonarjs/cognitive-complexity': ['warn', 15],
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* =========================
|
|
76
|
+
* Best Practices
|
|
77
|
+
* =========================
|
|
78
|
+
*/
|
|
79
|
+
'no-console': ['warn', { allow: ['warn', 'error'] }],
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* =========================
|
|
83
|
+
* Prettier enforcement
|
|
84
|
+
* =========================
|
|
85
|
+
*/
|
|
86
|
+
'prettier/prettier': 'error',
|
|
87
|
+
},
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* =========================
|
|
91
|
+
* Overrides for specific files
|
|
92
|
+
* =========================
|
|
93
|
+
*/
|
|
94
|
+
overrides: [
|
|
95
|
+
{
|
|
96
|
+
files: ['*.spec.ts', '*.test.ts'],
|
|
97
|
+
rules: {
|
|
98
|
+
'@typescript-eslint/no-explicit-any': 'off',
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
],
|
|
102
|
+
};
|
package/package.json
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@quo-digital/eslint-config",
|
|
3
|
+
"version": "1.0.2",
|
|
4
|
+
"description": "Configuración ESLint Estandar para Quo Digital",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"peerDependencies": {
|
|
8
|
+
"@typescript-eslint/eslint-plugin": ">=8",
|
|
9
|
+
"@typescript-eslint/parser": ">=8",
|
|
10
|
+
"eslint": ">=8"
|
|
11
|
+
}
|
|
12
|
+
}
|