eslint-config-greenpie 16.0.0 → 16.2.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.
@@ -91,6 +91,7 @@ Inspect the relevant config files and classify the current state:
91
91
 
92
92
  This matters because the same changelog line can imply different follow-up:
93
93
 
94
+ - **new oxlint rule in an already enabled repository plugin namespace and not configured yet** → likely `add`
94
95
  - **new oxlint implementation of a rule already enforced via ESLint** → likely `add` / `migrate`
95
96
  - **rename / replacement / deprecation** → likely `replace` or `remove`
96
97
  - **new option or behavior fix on a rule already configured** → likely `adjust` or `review-only`
@@ -120,6 +121,7 @@ Treat an entry as actionable only when there is a concrete repository change imp
120
121
 
121
122
  Good examples of actionable items:
122
123
 
124
+ - a supported oxlint plugin gains a new rule and the repository does not configure it yet
123
125
  - a supported oxlint rule has just been implemented and the repository still enforces the equivalent ESLint rule
124
126
  - a supported rule was renamed or replaced and the repository currently uses the old name
125
127
  - a supported rule gained an option that the repository is already relying on or should now align with
@@ -185,9 +187,11 @@ If the user says "apply the obvious ones" or similar, use only the clearly actio
185
187
 
186
188
  - Do not suggest enabling an entire new plugin because one release note mentions it.
187
189
  - Do not treat changelog noise as mandatory work.
188
- - Do not recommend config edits for rules the repository does not use unless the changelog clearly adds a valuable supported rule and the user wants adoption work.
190
+ - For this repository, when a changelog adds a new rule under an already enabled oxlint plugin namespace, treat it as `add` by default unless repository context shows an explicit local opt-out or conflict.
191
+ - Do not recommend config edits for rules under unsupported plugins or for speculative plugin expansion.
189
192
  - If a rule is already handled by oxlint in the repository, a bug fix is usually `review-only`, not a config change.
190
193
  - If a rule is currently enforced only in ESLint-side config and Oxlint just gained support, that is a strong candidate for `migrate`.
194
+ - If a rule is already enabled in oxlint, do not list it as actionable again; classify follow-up bug fixes or diagnostics changes as `review-only` unless a config adjustment is clearly needed.
191
195
 
192
196
  ## Worked examples
193
197
 
package/.oxlintrc.jsonc CHANGED
@@ -8,6 +8,8 @@
8
8
  "ignorePatterns": [
9
9
  "tests/oxlint/__tests__/*.valid.ts",
10
10
  "tests/oxlint/__tests__/*.invalid.ts",
11
+ "tests/oxlint/__tests__/*.valid.vue",
12
+ "tests/oxlint/__tests__/*.invalid.vue",
11
13
  "tests/oxlint/__tests__/valid-filename.ts",
12
14
  "tests/oxlint/__tests__/InvalidFilename.ts"
13
15
  ],
package/configs/base.js CHANGED
@@ -177,6 +177,7 @@ export default defineConfig(
177
177
  'prefer-const': 'off',
178
178
  'prefer-destructuring': 'off',
179
179
  'prefer-exponentiation-operator': 'off',
180
+ 'prefer-named-capture-group': 'off',
180
181
  'prefer-numeric-literals': 'off',
181
182
  'prefer-object-has-own': 'off',
182
183
  'prefer-object-spread': 'off',
@@ -224,7 +225,6 @@ export default defineConfig(
224
225
  'no-octal-escape': 'error',
225
226
  'no-restricted-syntax': 'error',
226
227
  'one-var': ['error', 'never'],
227
- 'prefer-named-capture-group': 'error',
228
228
  strict: 'error'
229
229
  }
230
230
  }
@@ -191,19 +191,31 @@
191
191
  // Vue
192
192
 
193
193
  "vue/no-arrow-functions-in-watch": "error",
194
+ "vue/no-computed-properties-in-data": "error",
194
195
  "vue/no-deprecated-data-object-declaration": "error",
195
196
  "vue/no-deprecated-delete-set": "error",
196
- "vue/no-deprecated-model-definition": "error",
197
197
  "vue/no-deprecated-destroyed-lifecycle": "error",
198
198
  "vue/no-deprecated-events-api": "error",
199
+ "vue/no-deprecated-model-definition": "error",
200
+ "vue/no-deprecated-props-default-this": "error",
201
+ "vue/no-deprecated-vue-config-keycodes": "error",
202
+ "vue/no-expose-after-await": "error",
199
203
  "vue/no-export-in-script-setup": "error",
200
204
  "vue/no-lifecycle-after-await": "error",
205
+ "vue/no-reserved-component-names": "error",
206
+ "vue/no-shared-component-data": "error",
201
207
  "vue/no-this-in-before-route-enter": "error",
202
- "vue/no-deprecated-vue-config-keycodes": "error",
208
+ "vue/no-watch-after-await": "error",
203
209
  "vue/prefer-import-from-vue": "error",
210
+ "vue/require-prop-type-constructor": "error",
211
+ "vue/require-render-return": "error",
212
+ "vue/require-slots-as-functions": "error",
204
213
  "vue/return-in-computed-property": "off", // It seems to be too strict and not very useful
214
+ "vue/return-in-emits-validator": "error",
205
215
  "vue/valid-define-emits": "error",
216
+ "vue/valid-define-options": "error",
206
217
  "vue/valid-define-props": "error",
218
+ "vue/valid-next-tick": "error",
207
219
 
208
220
  /**
209
221
  * Perf rules
@@ -484,6 +496,7 @@
484
496
  "jsdoc/require-returns-description": "error",
485
497
  "jsdoc/require-returns-type": "off", // TODO: probably not needed when types annotated correctly
486
498
  "jsdoc/require-throws-type": "error",
499
+ "jsdoc/require-yields-description": "error",
487
500
  "jsdoc/require-yields-type": "error",
488
501
 
489
502
  // Oxc
@@ -637,6 +650,7 @@
637
650
  "eslint/prefer-const": "error",
638
651
  "eslint/prefer-destructuring": "error",
639
652
  "eslint/prefer-exponentiation-operator": "error",
653
+ "eslint/prefer-named-capture-group": "error",
640
654
  "eslint/prefer-numeric-literals": "error",
641
655
  "eslint/prefer-object-has-own": "error",
642
656
  "eslint/prefer-object-spread": "error",
@@ -703,6 +717,7 @@
703
717
  "typescript/consistent-type-exports": "error",
704
718
  "typescript/consistent-type-imports": "error",
705
719
  "typescript/dot-notation": "error",
720
+ "typescript/method-signature-style": "error",
706
721
  "typescript/no-empty-interface": "error",
707
722
  "typescript/no-inferrable-types": "error",
708
723
  "typescript/no-unnecessary-qualifier": "error",
@@ -744,6 +759,7 @@
744
759
  "unicorn/prefer-default-parameters": "error",
745
760
  "unicorn/prefer-dom-node-text-content": "error",
746
761
  "unicorn/prefer-global-this": "error",
762
+ "unicorn/import-style": "off", // Needs a project-specific import style policy first
747
763
  "unicorn/prefer-includes": "error",
748
764
  "unicorn/prefer-keyboard-event-key": "error",
749
765
  "unicorn/prefer-logical-operator-over-ternary": "error",
@@ -767,6 +783,7 @@
767
783
  "unicorn/throw-new-error": "error",
768
784
 
769
785
  // Vue
786
+ "vue/component-definition-name-casing": "error",
770
787
  "vue/define-emits-declaration": "error",
771
788
  "vue/define-props-declaration": "error",
772
789
  "vue/define-props-destructuring": "off", // It requires destructuring, even when not needed
@@ -71,6 +71,7 @@
71
71
  "pattern": ".*\\.test\\.ts"
72
72
  }],
73
73
 
74
+ "vitest/consistent-test-it": "error",
74
75
  "vitest/consistent-vitest-vi": "error",
75
76
  "vitest/max-expects": "off",
76
77
  "vitest/max-nested-describe": "error",
@@ -120,4 +121,4 @@
120
121
  }
121
122
  }
122
123
  ]
123
- }
124
+ }
@@ -46,6 +46,7 @@ export default defineConfig({
46
46
  '@typescript-eslint/explicit-module-boundary-types': 'off',
47
47
  '@typescript-eslint/init-declarations': 'off',
48
48
  '@typescript-eslint/max-params': 'off',
49
+ '@typescript-eslint/method-signature-style': 'off',
49
50
  '@typescript-eslint/no-array-constructor': 'off',
50
51
  '@typescript-eslint/no-array-delete': 'off',
51
52
  '@typescript-eslint/no-base-to-string': 'off',
@@ -159,9 +160,6 @@ export default defineConfig({
159
160
  'method'
160
161
  ]
161
162
  }],
162
-
163
- '@typescript-eslint/method-signature-style': 'error',
164
-
165
163
  '@typescript-eslint/naming-convention': ['error', {
166
164
  // Ignore destructured variables
167
165
  selector: 'variable',
package/configs/vue.js CHANGED
@@ -21,29 +21,42 @@ export default defineConfig(
21
21
  rules: {
22
22
  // Disabled in favor of oxlint rules
23
23
 
24
+ 'vue/component-definition-name-casing': 'off',
24
25
  'vue/define-emits-declaration': 'off',
25
26
  'vue/define-props-declaration': 'off',
26
27
  'vue/define-props-destructuring': 'off',
27
28
  'vue/max-props': 'off',
28
29
  'vue/no-arrow-functions-in-watch': 'off',
30
+ 'vue/no-computed-properties-in-data': 'off',
29
31
  'vue/no-deprecated-data-object-declaration': 'off',
30
32
  'vue/no-deprecated-delete-set': 'off',
31
33
  'vue/no-deprecated-destroyed-lifecycle': 'off',
32
34
  'vue/no-deprecated-events-api': 'off',
33
35
  'vue/no-deprecated-model-definition': 'off',
36
+ 'vue/no-deprecated-props-default-this': 'off',
37
+ 'vue/no-deprecated-vue-config-keycodes': 'off',
38
+ 'vue/no-expose-after-await': 'off',
34
39
  'vue/no-export-in-script-setup': 'off',
35
40
  'vue/no-import-compiler-macros': 'off',
36
41
  'vue/no-lifecycle-after-await': 'off',
37
- 'vue/no-deprecated-vue-config-keycodes': 'off',
38
42
  'vue/no-multiple-slot-args': 'off',
43
+ 'vue/no-reserved-component-names': 'off',
39
44
  'vue/no-required-prop-with-default': 'off',
45
+ 'vue/no-shared-component-data': 'off',
40
46
  'vue/no-this-in-before-route-enter': 'off',
47
+ 'vue/no-watch-after-await': 'off',
41
48
  'vue/prefer-import-from-vue': 'off',
42
49
  'vue/require-default-export': 'off',
50
+ 'vue/require-prop-type-constructor': 'off',
51
+ 'vue/require-render-return': 'off',
52
+ 'vue/require-slots-as-functions': 'off',
43
53
  'vue/require-typed-ref': 'off',
44
54
  'vue/return-in-computed-property': 'off',
55
+ 'vue/return-in-emits-validator': 'off',
45
56
  'vue/valid-define-emits': 'off',
57
+ 'vue/valid-define-options': 'off',
46
58
  'vue/valid-define-props': 'off',
59
+ 'vue/valid-next-tick': 'off',
47
60
 
48
61
  // Disable some rules from other configs
49
62
 
@@ -61,17 +74,14 @@ export default defineConfig(
61
74
  'vue/multi-word-component-names': 'error',
62
75
  'vue/no-async-in-computed-properties': 'error',
63
76
  'vue/no-child-content': 'error',
64
- 'vue/no-computed-properties-in-data': 'error',
65
77
  'vue/no-dupe-keys': 'error',
66
78
  'vue/no-dupe-v-else-if': 'error',
67
79
  'vue/no-duplicate-attributes': 'error',
68
80
  'vue/no-mutating-props': 'error',
69
81
  'vue/no-parsing-error': 'error',
70
82
  'vue/no-ref-as-operand': 'error',
71
- 'vue/no-reserved-component-names': 'error',
72
83
  'vue/no-reserved-keys': 'error',
73
84
  'vue/no-reserved-props': 'error',
74
- 'vue/no-shared-component-data': 'error',
75
85
  'vue/no-side-effects-in-computed-properties': 'error',
76
86
  'vue/no-template-key': 'error',
77
87
  'vue/no-textarea-mustache': 'error',
@@ -85,14 +95,10 @@ export default defineConfig(
85
95
  'vue/no-useless-template-attributes': 'error',
86
96
  'vue/no-v-text-v-html-on-component': 'error',
87
97
  'vue/require-component-is': 'error',
88
- 'vue/require-prop-type-constructor': 'error',
89
- 'vue/require-render-return': 'error',
90
98
  'vue/require-v-for-key': 'error',
91
99
  'vue/require-valid-default-prop': 'error',
92
- 'vue/return-in-emits-validator': 'error',
93
100
  'vue/use-v-on-exact': 'error',
94
101
  'vue/valid-attribute-name': 'error',
95
- 'vue/valid-next-tick': 'error',
96
102
  'vue/valid-template-root': 'error',
97
103
  'vue/valid-v-bind': 'error',
98
104
  'vue/valid-v-cloak': 'error',
@@ -114,7 +120,6 @@ export default defineConfig(
114
120
  'vue/no-deprecated-functional-template': 'error',
115
121
  'vue/no-deprecated-html-element-is': 'error',
116
122
  'vue/no-deprecated-inline-template': 'error',
117
- 'vue/no-deprecated-props-default-this': 'error',
118
123
  'vue/no-deprecated-router-link-tag-prop': 'error',
119
124
  'vue/no-deprecated-scope-attribute': 'error',
120
125
  'vue/no-deprecated-slot-attribute': 'error',
@@ -123,10 +128,7 @@ export default defineConfig(
123
128
  'vue/no-deprecated-v-is': 'error',
124
129
  'vue/no-deprecated-v-on-native-modifier': 'error',
125
130
  'vue/no-deprecated-v-on-number-modifiers': 'error',
126
- 'vue/no-expose-after-await': 'error',
127
131
  'vue/no-v-for-template-key-on-child': 'error',
128
- 'vue/no-watch-after-await': 'error',
129
- 'vue/require-slots-as-functions': 'error',
130
132
  'vue/require-toggle-inside-transition': 'error',
131
133
  'vue/valid-v-is': 'error',
132
134
  'vue/valid-v-memo': 'error',
@@ -138,8 +140,6 @@ export default defineConfig(
138
140
  */
139
141
 
140
142
  'vue/attribute-hyphenation': 'error',
141
- 'vue/component-definition-name-casing': 'error',
142
-
143
143
  'vue/first-attribute-linebreak': ['error', {
144
144
  singleline: 'beside',
145
145
  multiline: 'below'
@@ -347,7 +347,6 @@ export default defineConfig(
347
347
  'vue/v-if-else-key': 'off',
348
348
 
349
349
  'vue/v-on-handler-style': ['error', ['method', 'inline']],
350
- 'vue/valid-define-options': 'error',
351
350
 
352
351
  /**
353
352
  * Extension Rules
package/eslint.config.js CHANGED
@@ -7,6 +7,8 @@ export default defineConfig(
7
7
  ignores: [
8
8
  'tests/oxlint/__tests__/*.valid.ts',
9
9
  'tests/oxlint/__tests__/*.invalid.ts',
10
+ 'tests/oxlint/__tests__/*.valid.vue',
11
+ 'tests/oxlint/__tests__/*.invalid.vue',
10
12
  'tests/oxlint/__tests__/valid-filename.ts',
11
13
  'tests/oxlint/__tests__/InvalidFilename.ts'
12
14
  ]
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "eslint-config-greenpie",
3
- "version": "16.0.0",
3
+ "version": "16.2.0",
4
4
  "description": "GreenPie's ESLint and oxlint configs",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
7
7
  "author": "Roman Nuritdinov (Ky6uk)",
8
8
  "license": "MIT",
9
9
  "type": "module",
10
- "packageManager": "npm@11.14.1",
10
+ "packageManager": "npm@11.15.0",
11
11
  "homepage": "https://github.com/GreenPie/eslint-config-greenpie",
12
12
  "repository": {
13
13
  "type": "git",
@@ -37,21 +37,21 @@
37
37
  "oxlint"
38
38
  ],
39
39
  "devDependencies": {
40
- "@types/node": "^25.9.0",
40
+ "@types/node": "^25.9.1",
41
41
  "execa": "^9.6.1",
42
42
  "husky": "^9.1.7",
43
- "oxlint": "^1.66.0",
44
- "taze": "^19.13.0",
45
- "valibot": "1.4.0",
46
- "vitest": "^4.1.6",
43
+ "oxlint": "^1.68.0",
44
+ "taze": "^19.14.1",
45
+ "valibot": "1.4.1",
46
+ "vitest": "^4.1.7",
47
47
  "vue": "^3.5.34"
48
48
  },
49
49
  "peerDependencies": {
50
50
  "@stylistic/eslint-plugin": "^5.10.0",
51
51
  "eslint": "^10.4.0",
52
52
  "eslint-plugin-vue": "^10.9.1",
53
- "oxlint": "^1.66.0",
54
- "oxlint-tsgolint": "^0.22.1",
55
- "typescript-eslint": "^8.59.4"
53
+ "oxlint": "^1.68.0",
54
+ "oxlint-tsgolint": "^0.23.0",
55
+ "typescript-eslint": "^8.60.0"
56
56
  }
57
57
  }