@homer0/oxlint-config 0.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.
@@ -0,0 +1,336 @@
1
+ # Rule differences
2
+
3
+ This record compares enabled rules in `@homer0/eslint-plugin` with the initial Oxlint policy. The source inventory is resolved from the current package configs.
4
+
5
+ ## Policy decisions
6
+
7
+ - `sort-imports` is disabled. Import ordering remains outside this package.
8
+ - JSDoc is opt-in through `jsdoc: true` and includes native rules only.
9
+ - Rules without a native Oxlint equivalent are omitted rather than provided through JavaScript plugins.
10
+
11
+ ## Intentional omissions and approximations
12
+
13
+ The initial profile is native-only. Unsupported `import-x` rules for dependency checks, package boundaries, path cleanup, resolution, and ordering are omitted; import ordering remains formatter-owned. Unsupported Node compatibility and dependency rules are also omitted rather than approximated with JavaScript plugins.
14
+
15
+ The opt-in JSDoc profile uses the native subset that covers access, tags, parameters, properties, and returns. Its unsupported validation and description policy remains omitted. React's obsolete JSX-use rules are covered by Oxlint's unused-variable analysis; `react/no-deprecated` can only be partially covered by optional type-aware `typescript/no-deprecated` when project typings mark an API as deprecated.
16
+
17
+ ## Native equivalents
18
+
19
+ | ESLint rule | Oxlint rule |
20
+ | -------------------------------------------------------- | -------------------------------------------------------- |
21
+ | `@typescript-eslint/ban-ts-comment` | `typescript/ban-ts-comment` |
22
+ | `@typescript-eslint/dot-notation` | `typescript/dot-notation` |
23
+ | `@typescript-eslint/no-array-constructor` | `typescript/no-array-constructor` |
24
+ | `@typescript-eslint/no-duplicate-enum-values` | `typescript/no-duplicate-enum-values` |
25
+ | `@typescript-eslint/no-empty-object-type` | `typescript/no-empty-object-type` |
26
+ | `@typescript-eslint/no-explicit-any` | `typescript/no-explicit-any` |
27
+ | `@typescript-eslint/no-extra-non-null-assertion` | `typescript/no-extra-non-null-assertion` |
28
+ | `@typescript-eslint/no-misused-new` | `typescript/no-misused-new` |
29
+ | `@typescript-eslint/no-namespace` | `typescript/no-namespace` |
30
+ | `@typescript-eslint/no-non-null-asserted-optional-chain` | `typescript/no-non-null-asserted-optional-chain` |
31
+ | `@typescript-eslint/no-require-imports` | `typescript/no-require-imports` |
32
+ | `@typescript-eslint/no-this-alias` | `typescript/no-this-alias` |
33
+ | `@typescript-eslint/no-unnecessary-type-constraint` | `typescript/no-unnecessary-type-constraint` |
34
+ | `@typescript-eslint/no-unsafe-declaration-merging` | `typescript/no-unsafe-declaration-merging` |
35
+ | `@typescript-eslint/no-unsafe-function-type` | `typescript/no-unsafe-function-type` |
36
+ | `@typescript-eslint/no-unused-expressions` | `typescript/no-unused-expressions` |
37
+ | `@typescript-eslint/no-unused-vars` | `typescript/no-unused-vars` |
38
+ | `@typescript-eslint/no-wrapper-object-types` | `typescript/no-wrapper-object-types` |
39
+ | `@typescript-eslint/prefer-as-const` | `typescript/prefer-as-const` |
40
+ | `@typescript-eslint/prefer-namespace-keyword` | `typescript/prefer-namespace-keyword` |
41
+ | `@typescript-eslint/triple-slash-reference` | `typescript/triple-slash-reference` |
42
+ | `array-callback-return` | `array-callback-return` |
43
+ | `arrow-body-style` | `arrow-body-style` |
44
+ | `block-scoped-var` | `block-scoped-var` |
45
+ | `complexity` | `complexity` |
46
+ | `consistent-return` | `consistent-return` |
47
+ | `constructor-super` | `constructor-super` |
48
+ | `default-case` | `default-case` |
49
+ | `default-case-last` | `default-case-last` |
50
+ | `default-param-last` | `default-param-last` |
51
+ | `eqeqeq` | `eqeqeq` |
52
+ | `for-direction` | `for-direction` |
53
+ | `func-names` | `func-names` |
54
+ | `getter-return` | `getter-return` |
55
+ | `grouped-accessor-pairs` | `grouped-accessor-pairs` |
56
+ | `guard-for-in` | `guard-for-in` |
57
+ | `import-x/export` | `import/export` |
58
+ | `import-x/first` | `import/first` |
59
+ | `import-x/named` | `import/named` |
60
+ | `import-x/newline-after-import` | `import/newline-after-import` |
61
+ | `import-x/no-absolute-path` | `import/no-absolute-path` |
62
+ | `import-x/no-amd` | `import/no-amd` |
63
+ | `import-x/no-cycle` | `import/no-cycle` |
64
+ | `import-x/no-duplicates` | `import/no-duplicates` |
65
+ | `import-x/no-dynamic-require` | `import/no-dynamic-require` |
66
+ | `import-x/no-mutable-exports` | `import/no-mutable-exports` |
67
+ | `import-x/no-named-as-default` | `import/no-named-as-default` |
68
+ | `import-x/no-named-as-default-member` | `import/no-named-as-default-member` |
69
+ | `import-x/no-named-default` | `import/no-named-default` |
70
+ | `import-x/no-self-import` | `import/no-self-import` |
71
+ | `import-x/no-webpack-loader-syntax` | `import/no-webpack-loader-syntax` |
72
+ | `max-classes-per-file` | `max-classes-per-file` |
73
+ | `n/global-require` | `node/global-require` |
74
+ | `n/handle-callback-err` | `node/handle-callback-err` |
75
+ | `n/no-exports-assign` | `node/no-exports-assign` |
76
+ | `n/no-mixed-requires` | `node/no-mixed-requires` |
77
+ | `n/no-new-require` | `node/no-new-require` |
78
+ | `n/no-path-concat` | `node/no-path-concat` |
79
+ | `n/no-process-env` | `node/no-process-env` |
80
+ | `new-cap` | `new-cap` |
81
+ | `no-alert` | `no-alert` |
82
+ | `no-array-constructor` | `no-array-constructor` |
83
+ | `no-async-promise-executor` | `no-async-promise-executor` |
84
+ | `no-bitwise` | `no-bitwise` |
85
+ | `no-caller` | `no-caller` |
86
+ | `no-case-declarations` | `no-case-declarations` |
87
+ | `no-class-assign` | `no-class-assign` |
88
+ | `no-compare-neg-zero` | `no-compare-neg-zero` |
89
+ | `no-cond-assign` | `no-cond-assign` |
90
+ | `no-console` | `no-console` |
91
+ | `no-const-assign` | `no-const-assign` |
92
+ | `no-constructor-return` | `no-constructor-return` |
93
+ | `no-continue` | `no-continue` |
94
+ | `no-control-regex` | `no-control-regex` |
95
+ | `no-debugger` | `no-debugger` |
96
+ | `no-delete-var` | `no-delete-var` |
97
+ | `no-dupe-class-members` | `no-dupe-class-members` |
98
+ | `no-dupe-else-if` | `no-dupe-else-if` |
99
+ | `no-dupe-keys` | `no-dupe-keys` |
100
+ | `no-duplicate-case` | `no-duplicate-case` |
101
+ | `no-else-return` | `no-else-return` |
102
+ | `no-empty` | `no-empty` |
103
+ | `no-empty-character-class` | `no-empty-character-class` |
104
+ | `no-empty-pattern` | `no-empty-pattern` |
105
+ | `no-eval` | `no-eval` |
106
+ | `no-ex-assign` | `no-ex-assign` |
107
+ | `no-extend-native` | `no-extend-native` |
108
+ | `no-extra-bind` | `no-extra-bind` |
109
+ | `no-extra-boolean-cast` | `no-extra-boolean-cast` |
110
+ | `no-extra-label` | `no-extra-label` |
111
+ | `no-fallthrough` | `no-fallthrough` |
112
+ | `no-func-assign` | `no-func-assign` |
113
+ | `no-global-assign` | `no-global-assign` |
114
+ | `no-implied-eval` | `no-implied-eval` |
115
+ | `no-import-assign` | `no-import-assign` |
116
+ | `no-inner-declarations` | `no-inner-declarations` |
117
+ | `no-invalid-regexp` | `no-invalid-regexp` |
118
+ | `no-irregular-whitespace` | `no-irregular-whitespace` |
119
+ | `no-iterator` | `no-iterator` |
120
+ | `no-label-var` | `no-label-var` |
121
+ | `no-labels` | `no-labels` |
122
+ | `no-lone-blocks` | `no-lone-blocks` |
123
+ | `no-lonely-if` | `no-lonely-if` |
124
+ | `no-loop-func` | `no-loop-func` |
125
+ | `no-loss-of-precision` | `no-loss-of-precision` |
126
+ | `no-magic-numbers` | `no-magic-numbers` |
127
+ | `no-misleading-character-class` | `no-misleading-character-class` |
128
+ | `no-multi-assign` | `no-multi-assign` |
129
+ | `no-multi-str` | `no-multi-str` |
130
+ | `no-nested-ternary` | `no-nested-ternary` |
131
+ | `no-new` | `no-new` |
132
+ | `no-new-func` | `no-new-func` |
133
+ | `no-new-wrappers` | `no-new-wrappers` |
134
+ | `no-nonoctal-decimal-escape` | `no-nonoctal-decimal-escape` |
135
+ | `no-obj-calls` | `no-obj-calls` |
136
+ | `no-param-reassign` | `no-param-reassign` |
137
+ | `no-promise-executor-return` | `no-promise-executor-return` |
138
+ | `no-proto` | `no-proto` |
139
+ | `no-prototype-builtins` | `no-prototype-builtins` |
140
+ | `no-redeclare` | `no-redeclare` |
141
+ | `no-regex-spaces` | `no-regex-spaces` |
142
+ | `no-restricted-exports` | `no-restricted-exports` |
143
+ | `no-restricted-properties` | `no-restricted-properties` |
144
+ | `no-return-assign` | `no-return-assign` |
145
+ | `no-script-url` | `no-script-url` |
146
+ | `no-self-assign` | `no-self-assign` |
147
+ | `no-self-compare` | `no-self-compare` |
148
+ | `no-sequences` | `no-sequences` |
149
+ | `no-setter-return` | `no-setter-return` |
150
+ | `no-shadow` | `no-shadow` |
151
+ | `no-shadow-restricted-names` | `no-shadow-restricted-names` |
152
+ | `no-sparse-arrays` | `no-sparse-arrays` |
153
+ | `no-template-curly-in-string` | `no-template-curly-in-string` |
154
+ | `no-this-before-super` | `no-this-before-super` |
155
+ | `no-throw-literal` | `no-throw-literal` |
156
+ | `no-undef` | `no-undef` |
157
+ | `no-underscore-dangle` | `no-underscore-dangle` |
158
+ | `no-unmodified-loop-condition` | `no-unmodified-loop-condition` |
159
+ | `no-unneeded-ternary` | `no-unneeded-ternary` |
160
+ | `no-unreachable` | `no-unreachable` |
161
+ | `no-unreachable-loop` | `no-unreachable-loop` |
162
+ | `no-unsafe-finally` | `no-unsafe-finally` |
163
+ | `no-unsafe-negation` | `no-unsafe-negation` |
164
+ | `no-unsafe-optional-chaining` | `no-unsafe-optional-chaining` |
165
+ | `no-unused-expressions` | `no-unused-expressions` |
166
+ | `no-unused-labels` | `no-unused-labels` |
167
+ | `no-use-before-define` | `no-use-before-define` |
168
+ | `no-useless-backreference` | `no-useless-backreference` |
169
+ | `no-useless-call` | `no-useless-call` |
170
+ | `no-useless-catch` | `no-useless-catch` |
171
+ | `no-useless-computed-key` | `no-useless-computed-key` |
172
+ | `no-useless-concat` | `no-useless-concat` |
173
+ | `no-useless-rename` | `no-useless-rename` |
174
+ | `no-useless-return` | `no-useless-return` |
175
+ | `no-var` | `no-var` |
176
+ | `no-void` | `no-void` |
177
+ | `no-with` | `no-with` |
178
+ | `object-shorthand` | `object-shorthand` |
179
+ | `operator-assignment` | `operator-assignment` |
180
+ | `prefer-arrow-callback` | `prefer-arrow-callback` |
181
+ | `prefer-const` | `prefer-const` |
182
+ | `prefer-destructuring` | `prefer-destructuring` |
183
+ | `prefer-exponentiation-operator` | `prefer-exponentiation-operator` |
184
+ | `prefer-numeric-literals` | `prefer-numeric-literals` |
185
+ | `prefer-object-spread` | `prefer-object-spread` |
186
+ | `prefer-promise-reject-errors` | `prefer-promise-reject-errors` |
187
+ | `prefer-regex-literals` | `prefer-regex-literals` |
188
+ | `prefer-rest-params` | `prefer-rest-params` |
189
+ | `prefer-spread` | `prefer-spread` |
190
+ | `prefer-template` | `prefer-template` |
191
+ | `radix` | `radix` |
192
+ | `require-yield` | `require-yield` |
193
+ | `symbol-description` | `symbol-description` |
194
+ | `unicode-bom` | `unicode-bom` |
195
+ | `use-isnan` | `use-isnan` |
196
+ | `valid-typeof` | `valid-typeof` |
197
+ | `vars-on-top` | `vars-on-top` |
198
+ | `yoda` | `yoda` |
199
+ | `jsx-a11y/alt-text` | `jsx-a11y/alt-text` |
200
+ | `jsx-a11y/anchor-has-content` | `jsx-a11y/anchor-has-content` |
201
+ | `jsx-a11y/anchor-is-valid` | `jsx-a11y/anchor-is-valid` |
202
+ | `jsx-a11y/aria-activedescendant-has-tabindex` | `jsx-a11y/aria-activedescendant-has-tabindex` |
203
+ | `jsx-a11y/aria-props` | `jsx-a11y/aria-props` |
204
+ | `jsx-a11y/aria-proptypes` | `jsx-a11y/aria-proptypes` |
205
+ | `jsx-a11y/aria-role` | `jsx-a11y/aria-role` |
206
+ | `jsx-a11y/aria-unsupported-elements` | `jsx-a11y/aria-unsupported-elements` |
207
+ | `jsx-a11y/autocomplete-valid` | `jsx-a11y/autocomplete-valid` |
208
+ | `jsx-a11y/click-events-have-key-events` | `jsx-a11y/click-events-have-key-events` |
209
+ | `jsx-a11y/control-has-associated-label` | `jsx-a11y/control-has-associated-label` |
210
+ | `jsx-a11y/heading-has-content` | `jsx-a11y/heading-has-content` |
211
+ | `jsx-a11y/html-has-lang` | `jsx-a11y/html-has-lang` |
212
+ | `jsx-a11y/iframe-has-title` | `jsx-a11y/iframe-has-title` |
213
+ | `jsx-a11y/img-redundant-alt` | `jsx-a11y/img-redundant-alt` |
214
+ | `jsx-a11y/interactive-supports-focus` | `jsx-a11y/interactive-supports-focus` |
215
+ | `jsx-a11y/label-has-associated-control` | `jsx-a11y/label-has-associated-control` |
216
+ | `jsx-a11y/media-has-caption` | `jsx-a11y/media-has-caption` |
217
+ | `jsx-a11y/mouse-events-have-key-events` | `jsx-a11y/mouse-events-have-key-events` |
218
+ | `jsx-a11y/no-access-key` | `jsx-a11y/no-access-key` |
219
+ | `jsx-a11y/no-autofocus` | `jsx-a11y/no-autofocus` |
220
+ | `jsx-a11y/no-distracting-elements` | `jsx-a11y/no-distracting-elements` |
221
+ | `jsx-a11y/no-interactive-element-to-noninteractive-role` | `jsx-a11y/no-interactive-element-to-noninteractive-role` |
222
+ | `jsx-a11y/no-noninteractive-element-interactions` | `jsx-a11y/no-noninteractive-element-interactions` |
223
+ | `jsx-a11y/no-noninteractive-element-to-interactive-role` | `jsx-a11y/no-noninteractive-element-to-interactive-role` |
224
+ | `jsx-a11y/no-noninteractive-tabindex` | `jsx-a11y/no-noninteractive-tabindex` |
225
+ | `jsx-a11y/no-redundant-roles` | `jsx-a11y/no-redundant-roles` |
226
+ | `jsx-a11y/no-static-element-interactions` | `jsx-a11y/no-static-element-interactions` |
227
+ | `jsx-a11y/role-has-required-aria-props` | `jsx-a11y/role-has-required-aria-props` |
228
+ | `jsx-a11y/role-supports-aria-props` | `jsx-a11y/role-supports-aria-props` |
229
+ | `jsx-a11y/scope` | `jsx-a11y/scope` |
230
+ | `jsx-a11y/tabindex-no-positive` | `jsx-a11y/tabindex-no-positive` |
231
+ | `react-hooks/exhaustive-deps` | `react/exhaustive-deps` |
232
+ | `react-hooks/rules-of-hooks` | `react/rules-of-hooks` |
233
+ | `react/display-name` | `react/display-name` |
234
+ | `react/jsx-key` | `react/jsx-key` |
235
+ | `react/jsx-no-comment-textnodes` | `react/jsx-no-comment-textnodes` |
236
+ | `react/jsx-no-duplicate-props` | `react/jsx-no-duplicate-props` |
237
+ | `react/jsx-no-target-blank` | `react/jsx-no-target-blank` |
238
+ | `react/jsx-no-undef` | `react/jsx-no-undef` |
239
+ | `react/no-children-prop` | `react/no-children-prop` |
240
+ | `react/no-danger-with-children` | `react/no-danger-with-children` |
241
+ | `react/no-direct-mutation-state` | `react/no-direct-mutation-state` |
242
+ | `react/no-find-dom-node` | `react/no-find-dom-node` |
243
+ | `react/no-is-mounted` | `react/no-is-mounted` |
244
+ | `react/no-render-return-value` | `react/no-render-return-value` |
245
+ | `react/no-string-refs` | `react/no-string-refs` |
246
+ | `react/no-unescaped-entities` | `react/no-unescaped-entities` |
247
+ | `react/no-unknown-property` | `react/no-unknown-property` |
248
+ | `react/require-render-return` | `react/require-render-return` |
249
+
250
+ ## Disabled for formatter compatibility
251
+
252
+ | ESLint rule | Oxlint rule | Reason |
253
+ | ------------------------- | ----------- | ---------------------------- |
254
+ | `curly` | — | Formatter owns this concern. |
255
+ | `no-unexpected-multiline` | — | Formatter owns this concern. |
256
+
257
+ ## Omitted rules
258
+
259
+ | ESLint rule | Oxlint rule | Reason |
260
+ | ----------------------------------------------- | ------------------------------------ | --------------------------------------------------------- |
261
+ | `camelcase` | — | Oxlint 1.77 has no native equivalent. |
262
+ | `import-x/no-extraneous-dependencies` | — | Oxlint 1.77 has no native equivalent. |
263
+ | `import-x/no-import-module-exports` | — | Oxlint 1.77 has no native equivalent. |
264
+ | `import-x/no-relative-packages` | — | Oxlint 1.77 has no native equivalent. |
265
+ | `import-x/no-unresolved` | — | Oxlint 1.77 has no native equivalent. |
266
+ | `import-x/no-useless-path-segments` | — | Oxlint 1.77 has no native equivalent. |
267
+ | `import-x/order` | — | Import ordering remains outside this package. |
268
+ | `n/no-deprecated-api` | — | Oxlint 1.77 has no native equivalent. |
269
+ | `n/no-extraneous-import` | — | Oxlint 1.77 has no native equivalent. |
270
+ | `n/no-extraneous-require` | — | Oxlint 1.77 has no native equivalent. |
271
+ | `n/no-unsupported-features/es-builtins` | — | Oxlint 1.77 has no native equivalent. |
272
+ | `n/no-unsupported-features/es-syntax` | — | Oxlint 1.77 has no native equivalent. |
273
+ | `n/no-unsupported-features/node-builtins` | — | Oxlint 1.77 has no native equivalent. |
274
+ | `n/process-exit-as-throw` | — | Oxlint 1.77 has no native equivalent. |
275
+ | `no-dupe-args` | — | Oxlint 1.77 has no native equivalent. |
276
+ | `no-octal` | — | Oxlint 1.77 has no native equivalent. |
277
+ | `no-octal-escape` | — | Oxlint 1.77 has no native equivalent. |
278
+ | `no-restricted-globals` | — | Browser globals are provided by the browser profile. |
279
+ | `no-restricted-syntax` | — | Oxlint 1.77 has no native equivalent. |
280
+ | `no-undef-init` | — | Oxlint 1.77 has no native equivalent. |
281
+ | `one-var` | — | Oxlint 1.77 has no native equivalent. |
282
+ | `strict` | — | Oxlint 1.77 has no native equivalent. |
283
+ | `react-hooks/config` | — | React Compiler rules are outside the initial profile. |
284
+ | `react-hooks/error-boundaries` | — | React Compiler rules are outside the initial profile. |
285
+ | `react-hooks/gating` | — | React Compiler rules are outside the initial profile. |
286
+ | `react-hooks/globals` | — | React Compiler rules are outside the initial profile. |
287
+ | `react-hooks/immutability` | — | React Compiler rules are outside the initial profile. |
288
+ | `react-hooks/incompatible-library` | — | React Compiler rules are outside the initial profile. |
289
+ | `react-hooks/preserve-manual-memoization` | — | React Compiler rules are outside the initial profile. |
290
+ | `react-hooks/purity` | — | React Compiler rules are outside the initial profile. |
291
+ | `react-hooks/refs` | — | React Compiler rules are outside the initial profile. |
292
+ | `react-hooks/set-state-in-effect` | — | React Compiler rules are outside the initial profile. |
293
+ | `react-hooks/set-state-in-render` | — | React Compiler rules are outside the initial profile. |
294
+ | `react-hooks/static-components` | — | React Compiler rules are outside the initial profile. |
295
+ | `react-hooks/unsupported-syntax` | — | React Compiler rules are outside the initial profile. |
296
+ | `react-hooks/use-memo` | — | React Compiler rules are outside the initial profile. |
297
+ | `react/jsx-uses-react` | — | React 17+ uses the automatic JSX transform. |
298
+ | `react/jsx-uses-vars` | — | Oxlint’s unused-variable analysis recognizes JSX usage. |
299
+ | `react/no-deprecated` | — | Type-aware TypeScript provides the available replacement. |
300
+ | `react/prop-types` | — | The package targets TypeScript rather than PropTypes. |
301
+ | `jsdoc/check-access` | `jsdoc/check-access` | Native equivalent. |
302
+ | `jsdoc/check-alignment` | — | The initial package omits the JSDoc profile. |
303
+ | `jsdoc/check-param-names` | — | The initial package omits the JSDoc profile. |
304
+ | `jsdoc/check-property-names` | `jsdoc/check-property-names` | Native equivalent. |
305
+ | `jsdoc/check-syntax` | — | The initial package omits the JSDoc profile. |
306
+ | `jsdoc/check-tag-names` | `jsdoc/check-tag-names` | Native equivalent; custom tags are not configured. |
307
+ | `jsdoc/check-types` | — | The initial package omits the JSDoc profile. |
308
+ | `jsdoc/implements-on-classes` | `jsdoc/implements-on-classes` | Native equivalent. |
309
+ | `jsdoc/match-description` | — | The initial package omits the JSDoc profile. |
310
+ | `jsdoc/require-description` | — | The initial package omits the JSDoc profile. |
311
+ | `jsdoc/require-hyphen-before-param-description` | — | The initial package omits the JSDoc profile. |
312
+ | `jsdoc/require-jsdoc` | — | The initial package omits the JSDoc profile. |
313
+ | `jsdoc/require-param` | `jsdoc/require-param` | Native equivalent. |
314
+ | `jsdoc/require-param-description` | `jsdoc/require-param-description` | Native equivalent. |
315
+ | `jsdoc/require-param-name` | `jsdoc/require-param-name` | Native equivalent. |
316
+ | `jsdoc/require-param-type` | `jsdoc/require-param-type` | Native equivalent. |
317
+ | `jsdoc/require-property` | `jsdoc/require-property` | Native equivalent. |
318
+ | `jsdoc/require-property-description` | `jsdoc/require-property-description` | Native equivalent. |
319
+ | `jsdoc/require-property-name` | `jsdoc/require-property-name` | Native equivalent. |
320
+ | `jsdoc/require-property-type` | `jsdoc/require-property-type` | Native equivalent. |
321
+ | `jsdoc/require-returns` | `jsdoc/require-returns` | Native equivalent. |
322
+ | `jsdoc/require-returns-check` | — | The initial package omits the JSDoc profile. |
323
+ | `jsdoc/require-returns-type` | `jsdoc/require-returns-type` | Native equivalent. |
324
+ | `jsdoc/require-throws` | — | The initial package omits the JSDoc profile. |
325
+ | `jsdoc/valid-types` | — | The initial package omits the JSDoc profile. |
326
+
327
+ ## Profile overrides
328
+
329
+ - Browser provides the globals from the `globals` package.
330
+ - Node provides the globals from the `globals` package.
331
+ - TypeScript enables native equivalents of `typescript-eslint`'s recommended rules, alongside this package's TypeScript overrides.
332
+ - `typeAware: true` additionally checks deprecated APIs, floating promises, and Promises used in synchronous contexts.
333
+ - JSDoc is opt-in through `jsdoc: true`.
334
+ - `createNextjsConfig` adds native Next.js recommended and Core Web Vitals rules, plus Next.js build-output ignores.
335
+ - Tests disable `import/first`, `max-classes-per-file`, and `no-magic-numbers`; custom test options can select the Vitest rule policy with `framework: 'vitest'`.
336
+ - React and Next.js profiles also enable rules that prohibit new arrays, functions, and objects passed directly as JSX props.
package/package.json ADDED
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "@homer0/oxlint-config",
3
+ "description": "My Oxlint configurations.",
4
+ "version": "0.2.0",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/homer0/packages.git",
8
+ "directory": "packages/personal/oxlint-config"
9
+ },
10
+ "author": "Leonardo Apiwan (@homer0) <me@homer0.com>",
11
+ "license": "MIT",
12
+ "publishConfig": {
13
+ "access": "public"
14
+ },
15
+ "type": "module",
16
+ "main": "./dist/index.js",
17
+ "types": "./src/index.ts",
18
+ "exports": {
19
+ ".": {
20
+ "import": "./dist/index.js",
21
+ "types": "./src/index.ts"
22
+ },
23
+ "./package.json": "./package.json"
24
+ },
25
+ "files": [
26
+ "dist/",
27
+ "docs/",
28
+ "src/"
29
+ ],
30
+ "dependencies": {
31
+ "globals": "^17.9.0"
32
+ },
33
+ "devDependencies": {
34
+ "@homer0/tsconfig": "workspace:*",
35
+ "@vitest/coverage-v8": "catalog:",
36
+ "tsup": "catalog:",
37
+ "typescript": "catalog:",
38
+ "unplugin-swc": "catalog:",
39
+ "vitest": "catalog:"
40
+ },
41
+ "peerDependencies": {
42
+ "oxlint": ">=1.77.0",
43
+ "oxlint-tsgolint": ">=0.0.0"
44
+ },
45
+ "peerDependenciesMeta": {
46
+ "oxlint-tsgolint": {
47
+ "optional": true
48
+ }
49
+ },
50
+ "engine-strict": true,
51
+ "engines": {
52
+ "node": ">=22"
53
+ },
54
+ "scripts": {
55
+ "lint": "oxlint .",
56
+ "test": "vitest run $@",
57
+ "types:check": "tsc --noEmit && tsc --noEmit --project ./tests/tsconfig.json",
58
+ "build": "tsup",
59
+ "prepublishOnly": "pnpm run build"
60
+ }
61
+ }
package/src/consts.ts ADDED
@@ -0,0 +1,20 @@
1
+ export const DEFAULT_IGNORES = ['coverage/', 'coverage-*/', 'dist/', 'node_modules/'];
2
+
3
+ export const TEST_FILES = {
4
+ colocated: ['**/*.{test,spec}.{js,jsx,ts,tsx,mjs,cjs,mts,cts}'],
5
+ directory: ['tests/**/*.{js,jsx,ts,tsx,mjs,cjs,mts,cts}'],
6
+ } as const;
7
+
8
+ export const EXTENSION_FRAGMENT_NAMES = [
9
+ 'base',
10
+ 'browser',
11
+ 'jsdoc',
12
+ 'node',
13
+ 'react',
14
+ 'tests',
15
+ 'typescript',
16
+ ] as const;
17
+
18
+ export type TestConvention = keyof typeof TEST_FILES;
19
+
20
+ export type ExtensionFragmentName = (typeof EXTENSION_FRAGMENT_NAMES)[number];