@nitra/eslint-config 3.7.0 → 3.8.0

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.
Files changed (3) hide show
  1. package/README.md +27 -0
  2. package/index.js +19 -0
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -84,3 +84,30 @@ export default [
84
84
  - Для **Node**: eslint-plugin-n
85
85
  - Для **Vue**: eslint-plugin-vue з правилами атрибутів та порядку
86
86
  - Oxlint (recommended)
87
+
88
+ ## Стиль коду
89
+
90
+ ### `for...in` заборонено — рефакторити на `for...of`
91
+
92
+ `no-restricted-syntax` із селектором `ForInStatement` забороняє `for...in` у всіх JS-подібних файлах (`.js`, `.mjs`, `.cjs`, `.vue`). Разом із цим зникає потреба в `Object.hasOwn`-guard — він має зникнути з кодом одночасно з `for...in`.
93
+
94
+ ```js
95
+ // ❌ погано
96
+ for (const k in obj) {
97
+ if (!Object.hasOwn(obj, k)) continue
98
+ use(k, obj[k])
99
+ }
100
+ for (const i in arr) {
101
+ use(arr[i])
102
+ }
103
+
104
+ // ✅ добре
105
+ for (const [k, v] of Object.entries(obj)) {
106
+ use(k, v)
107
+ }
108
+ for (const item of arr) {
109
+ use(item)
110
+ }
111
+ ```
112
+
113
+ Альтернативи залежно від потреби: `Object.keys(obj)`, `Object.values(obj)`, `Object.entries(obj)` — або пряма ітерація масиву через `for...of`.
package/index.js CHANGED
@@ -27,6 +27,18 @@ const GRAPHQL_EXTRACTED_IGNORES = ['**/node_modules/**']
27
27
  /** Glob-патерни файлів для eslint-plugin-unicorn (JS-подібні джерела; без сирих YAML/Markdown). */
28
28
  const UNICORN_FILES = ['**/*.{js,mjs,cjs,vue}']
29
29
 
30
+ /**
31
+ * Заборона `for...in`: підказує рефакторинг на `for...of` з `Object.entries/keys/values` чи прямою ітерацією масиву.
32
+ * Разом із цим зникає потреба в `Object.hasOwn`-guard.
33
+ */
34
+ const NO_FOR_IN_RESTRICTED_SYNTAX = [
35
+ 'error',
36
+ {
37
+ selector: 'ForInStatement',
38
+ message: 'Use for...of with Object.entries/keys/values or iterate arrays directly'
39
+ }
40
+ ]
41
+
30
42
  /** Узгоджені опції `no-unused-vars` для `.js` і Vue SFC (`eslint-plugin-oxlint` не вимикає це правило для `.vue`, тож oxlint CLI його там не покриває). */
31
43
  const NO_UNUSED_VARS_RULE = ['error', { argsIgnorePattern: '^_', varsIgnorePattern: '^_' }]
32
44
 
@@ -288,6 +300,13 @@ const all = [
288
300
  ]
289
301
  }
290
302
  },
303
+ // Заборона `for...in` для всіх JS-подібних файлів, включно з Vue SFC (див. `NO_FOR_IN_RESTRICTED_SYNTAX`).
304
+ {
305
+ files: UNICORN_FILES,
306
+ rules: {
307
+ 'no-restricted-syntax': NO_FOR_IN_RESTRICTED_SYNTAX
308
+ }
309
+ },
291
310
  // eslint-plugin-security (лише JS-подібні файли — як unicorn)
292
311
  { ...securityPlugin.configs.recommended, files: UNICORN_FILES },
293
312
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nitra/eslint-config",
3
- "version": "3.7.0",
3
+ "version": "3.8.0",
4
4
  "description": "An ESLint shareable config for projects using Vue and Node",
5
5
  "keywords": [
6
6
  "eslint",