@kazupon/eslint-config 0.37.2 → 0.39.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.
package/README.md CHANGED
@@ -30,6 +30,7 @@ ESLint config for @kazupon
30
30
  - `css`
31
31
  - `html`
32
32
  - `deps`
33
+ - `oxlint`
33
34
  - Support primitive eslint flat configuration
34
35
  - Support overrides for built-in configurations
35
36
  - `rules`
@@ -146,6 +147,7 @@ The following built-in preset configurations are supported:
146
147
  | `css` | [`@eslint/css`](https://www.npmjs.com/package/@eslint/css) | yes |
147
148
  | `html` | [`@html-eslint/eslint-plugin`](https://www.npmjs.com/package/@html-eslint/eslint-plugin) | yes |
148
149
  | `deps` | [`eslint-plugin-barrel-files`](https://www.npmjs.com/package/eslint-plugin-barrel-files) | yes |
150
+ | `oxclint` | [`eslint-plugin-oxlint`](https://www.npmjs.com/package/eslint-plugin-oxlint) | yes |
149
151
 
150
152
  You can use `import` syntax:
151
153
 
@@ -5,6 +5,10 @@ import * as typescript0 from "typescript";
5
5
  import { StylisticCustomizeOptions } from "@stylistic/eslint-plugin";
6
6
 
7
7
  //#region src/config.d.ts
8
+ /**
9
+ * @author kazuya kawaguchi (a.k.a. `@kazupon`)
10
+ * @license MIT
11
+ */
8
12
 
9
13
  /**
10
14
  * define eslint configurations
@@ -32,6 +36,10 @@ interface OverridesOptions<Rules = Linter.Config["rules"]> {
32
36
  */
33
37
  rules?: Rules;
34
38
  /**
39
+ * Override globals
40
+ */
41
+ globals?: ESLint.Environment["globals"];
42
+ /**
35
43
  * Override parser options
36
44
  */
37
45
  parserOptions?: ESLint.Environment["parserOptions"];
@@ -655,6 +663,7 @@ type HtmlEslintIndent = [] | [("tab" | number)] | [("tab" | number), {
655
663
  tagChildrenIndent?: {
656
664
  [k: string]: number;
657
665
  };
666
+ ignoreComment?: boolean;
658
667
  }];
659
668
  type HtmlEslintMaxElementDepth = [] | [{
660
669
  max: number;
@@ -4325,6 +4334,11 @@ interface JsdocRules {
4325
4334
  */
4326
4335
  "jsdoc/require-property-type"?: Linter.RuleEntry<[]>;
4327
4336
  /**
4337
+ * Requires that Promise rejections are documented with `@rejects` tags.
4338
+ * @see https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-rejects.md#repos-sticky-header
4339
+ */
4340
+ "jsdoc/require-rejects"?: Linter.RuleEntry<JsdocRequireRejects>;
4341
+ /**
4328
4342
  * Requires that returns are documented with `@returns`.
4329
4343
  * @see https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-returns.md#repos-sticky-header
4330
4344
  */
@@ -4465,6 +4479,7 @@ type JsdocCheckExamples = [] | [{
4465
4479
  reportUnusedDisableDirectives?: boolean;
4466
4480
  }];
4467
4481
  type JsdocCheckIndentation = [] | [{
4482
+ allowIndentedSections?: boolean;
4468
4483
  excludeTags?: string[];
4469
4484
  }];
4470
4485
  type JsdocCheckLineAlignment = [] | [("always" | "never" | "any")] | [("always" | "never" | "any"), {
@@ -4776,6 +4791,13 @@ type JsdocRequireParamType = [] | [{
4776
4791
  defaultDestructuredRootType?: string;
4777
4792
  setDefaultDestructuredRootType?: boolean;
4778
4793
  }];
4794
+ type JsdocRequireRejects = [] | [{
4795
+ contexts?: (string | {
4796
+ comment?: string;
4797
+ context?: string;
4798
+ })[];
4799
+ exemptedBy?: string[];
4800
+ }];
4779
4801
  type JsdocRequireReturns = [] | [{
4780
4802
  checkConstructors?: boolean;
4781
4803
  checkGetters?: boolean;
@@ -4856,6 +4878,9 @@ type JsdocSortTags = [] | [{
4856
4878
  linesBetween?: number;
4857
4879
  reportIntraTagGroupSpacing?: boolean;
4858
4880
  reportTagGroupSpacing?: boolean;
4881
+ tagExceptions?: {
4882
+ [k: string]: number;
4883
+ };
4859
4884
  tagSequence?: {
4860
4885
  tags?: string[];
4861
4886
  }[];
@@ -5940,7 +5965,6 @@ type MarkdownPreferencesSortDefinitions = [] | [{
5940
5965
  match: (string | [string, ...(string)[]]);
5941
5966
  sort: ("alphabetical" | "ignore");
5942
5967
  })[];
5943
- alphabetical?: boolean;
5944
5968
  }];
5945
5969
  type MarkdownPreferencesStrikethroughDelimitersStyle = [] | [{
5946
5970
  delimiter?: ("~" | "~~");
@@ -6271,7 +6295,7 @@ interface ReactRules {
6271
6295
  */
6272
6296
  "react-hooks/use-memo"?: Linter.RuleEntry<ReactHooksUseMemo>;
6273
6297
  /**
6274
- * Validates that useMemos always return a value. See [`useMemo()` docs](https://react.dev/reference/react/useMemo) for more information.
6298
+ * Validates that useMemos always return a value and that the result of the useMemo is used by the component/hook. See [`useMemo()` docs](https://react.dev/reference/react/useMemo) for more information.
6275
6299
  */
6276
6300
  "react-hooks/void-use-memo"?: Linter.RuleEntry<ReactHooksVoidUseMemo>;
6277
6301
  "react-refresh/only-export-components"?: Linter.RuleEntry<ReactRefreshOnlyExportComponents>;
@@ -10566,6 +10590,11 @@ interface TypescriptRules {
10566
10590
  */
10567
10591
  "@typescript-eslint/no-unused-expressions"?: Linter.RuleEntry<TypescriptEslintNoUnusedExpressions>;
10568
10592
  /**
10593
+ * Disallow unused private class members
10594
+ * @see https://typescript-eslint.io/rules/no-unused-private-class-members
10595
+ */
10596
+ "@typescript-eslint/no-unused-private-class-members"?: Linter.RuleEntry<[]>;
10597
+ /**
10569
10598
  * Disallow unused variables
10570
10599
  * @see https://typescript-eslint.io/rules/no-unused-vars
10571
10600
  */
@@ -12557,6 +12586,11 @@ type UnicornTemplateIndent = [] | [{
12557
12586
  //#endregion
12558
12587
  //#region src/types/gens/vitest.d.ts
12559
12588
  interface VitestRules {
12589
+ /**
12590
+ * enforce using `.each` or `.for` consistently
12591
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/consistent-each-for.md
12592
+ */
12593
+ "vitest/consistent-each-for"?: Linter.RuleEntry<VitestConsistentEachFor>;
12560
12594
  /**
12561
12595
  * require test file pattern
12562
12596
  * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/consistent-test-filename.md
@@ -12774,7 +12808,7 @@ interface VitestRules {
12774
12808
  */
12775
12809
  "vitest/prefer-each"?: Linter.RuleEntry<[]>;
12776
12810
  /**
12777
- * enforce using the built-in quality matchers
12811
+ * enforce using the built-in equality matchers
12778
12812
  * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-equality-matcher.md
12779
12813
  */
12780
12814
  "vitest/prefer-equality-matcher"?: Linter.RuleEntry<[]>;
@@ -12884,11 +12918,21 @@ interface VitestRules {
12884
12918
  */
12885
12919
  "vitest/prefer-vi-mocked"?: Linter.RuleEntry<[]>;
12886
12920
  /**
12921
+ * ensure that every `expect.poll` call is awaited
12922
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/require-awaited-expect-poll.md
12923
+ */
12924
+ "vitest/require-awaited-expect-poll"?: Linter.RuleEntry<[]>;
12925
+ /**
12887
12926
  * require setup and teardown to be within a hook
12888
12927
  * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/require-hook.md
12889
12928
  */
12890
12929
  "vitest/require-hook"?: Linter.RuleEntry<VitestRequireHook>;
12891
12930
  /**
12931
+ * require usage of import in vi.mock()
12932
+ * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/require-import-vi-mock.md
12933
+ */
12934
+ "vitest/require-import-vi-mock"?: Linter.RuleEntry<[]>;
12935
+ /**
12892
12936
  * require local Test Context for concurrent snapshot tests
12893
12937
  * @see https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/require-local-test-context-for-concurrent-snapshots.md
12894
12938
  */
@@ -12934,6 +12978,12 @@ interface VitestRules {
12934
12978
  */
12935
12979
  "vitest/warn-todo"?: Linter.RuleEntry<[]>;
12936
12980
  }
12981
+ type VitestConsistentEachFor = [] | [{
12982
+ test?: ("each" | "for");
12983
+ it?: ("each" | "for");
12984
+ describe?: ("each" | "for");
12985
+ suite?: ("each" | "for");
12986
+ }];
12937
12987
  type VitestConsistentTestFilename = [] | [{
12938
12988
  pattern?: string;
12939
12989
  allTestPattern?: string;
@@ -12959,7 +13009,7 @@ type VitestNoFocusedTests = [] | [{
12959
13009
  fixable?: boolean;
12960
13010
  }];
12961
13011
  type VitestNoHooks = [] | [{
12962
- allow?: unknown[];
13012
+ allow?: ("beforeAll" | "beforeEach" | "afterAll" | "afterEach")[];
12963
13013
  }];
12964
13014
  type VitestNoLargeSnapshots = [] | [{
12965
13015
  maxSize?: number;
@@ -13654,6 +13704,11 @@ interface VueRules {
13654
13704
  */
13655
13705
  "vue/no-duplicate-attributes"?: Linter.RuleEntry<VueNoDuplicateAttributes>;
13656
13706
  /**
13707
+ * disallow duplication of class names in class attributes
13708
+ * @see https://eslint.vuejs.org/rules/no-duplicate-class-names.html
13709
+ */
13710
+ "vue/no-duplicate-class-names"?: Linter.RuleEntry<[]>;
13711
+ /**
13657
13712
  * disallow the `<template>` `<script>` `<style>` block to be empty
13658
13713
  * @see https://eslint.vuejs.org/rules/no-empty-component-block.html
13659
13714
  */
@@ -16055,6 +16110,16 @@ type YmlSpacedComment = [] | [("always" | "never")] | [("always" | "never"), {
16055
16110
  markers?: string[];
16056
16111
  }];
16057
16112
  //#endregion
16113
+ //#region src/types/gens/oxlint.d.ts
16114
+ interface OxlintRules {}
16115
+ //#endregion
16116
+ //#region src/types/gens/eslint.d.ts
16117
+ declare module "eslint" {
16118
+ namespace Linter {
16119
+ interface RulesRecord extends CommentsRules, CssRules, DepsRules, HtmlRules, ImportsRules, JavascriptRules, JsdocRules, JsoncRules, MarkdownRules, OxlintRules, PrettierRules, PromiseRules, ReactRules, RegexpRules, StylisticRules, SvelteRules, TomlRules, TypescriptRules, UnicornRules, VitestRules, VueRules, YmlRules {}
16120
+ }
16121
+ }
16122
+ //#endregion
16058
16123
  //#region src/configs/comments.d.ts
16059
16124
  /**
16060
16125
  * comments preset options
@@ -16328,6 +16393,28 @@ interface MarkdownOptions {
16328
16393
  declare function markdown(options?: MarkdownOptions & OverridesOptions<MarkdownRules>): Promise<Linter.Config[]>;
16329
16394
  declare const md: typeof markdown;
16330
16395
  //#endregion
16396
+ //#region src/configs/oxlint.d.ts
16397
+ /**
16398
+ * Oxlint configuration options
16399
+ */
16400
+ interface OxlintOptions {
16401
+ /**
16402
+ * oxlint config file path
16403
+ */
16404
+ configFile?: string;
16405
+ /**
16406
+ * enable nursery rules
16407
+ */
16408
+ withNursery?: boolean;
16409
+ }
16410
+ /**
16411
+ * `eslint-plugin-oxlint` and overrides configuration options
16412
+ *
16413
+ * @param {OxlintOptions & OverridesOptions} options - eslint configuration options for oxlint
16414
+ * @returns {Promise<Linter.Config[]>} eslint flat configurations with `eslint-plugin-oxlint` and overrides
16415
+ */
16416
+ declare function oxlint(options?: OxlintOptions & OverridesOptions): Promise<Linter.Config[]>;
16417
+ //#endregion
16331
16418
  //#region src/configs/prettier.d.ts
16332
16419
  /**
16333
16420
  * Prettier configuration options
@@ -16639,4 +16726,4 @@ interface YmlOptions {
16639
16726
  declare function yml(options?: YmlOptions & OverridesOptions<YmlRules>): Promise<Linter.Config[]>;
16640
16727
  declare const yaml: typeof yml;
16641
16728
  //#endregion
16642
- export { CommentsOptions, CommentsRules, CssOptions, CssRules, DepsOptions, DepsRules, HtmlOptions, HtmlRules, ImportsOptions, ImportsRules, JavaScriptOptions, JavascriptRules, JsDocumentOptions, JsdocRules, JsoncOptions, JsoncRules, MarkdownOptions, MarkdownRules, OverridesOptions, PrettierOptions, PrettierRules, PromiseOptions, PromiseRules, ReactOptions, ReactRules, RegexpOptions, RegexpRules, StylisticOptions, StylisticRules, SvelteRules, SvelteScriptOptions, TomlOptions, TomlRules, TypeScriptOptions, TypeScriptParserOptions, TypeScriptProjectServiceOptions, TypescriptRules, UnicornOptions, UnicornRules, VitestOptions, VitestRules, VueI18nOptions, VueRules, VueScriptOptions, YmlOptions, YmlRules, comments, css, defineConfig, deps, html, imports, javascript, jsdoc, jsonc, markdown, md, prettier, promise, react, regexp, stylistic, svelte, toml, typescript, unicorn, vitest, vue, yaml, yml };
16729
+ export { CommentsOptions, CommentsRules, CssOptions, CssRules, DepsOptions, DepsRules, HtmlOptions, HtmlRules, ImportsOptions, ImportsRules, JavaScriptOptions, JavascriptRules, JsDocumentOptions, JsdocRules, JsoncOptions, JsoncRules, MarkdownOptions, MarkdownRules, OverridesOptions, OxlintOptions, PrettierOptions, PrettierRules, PromiseOptions, PromiseRules, ReactOptions, ReactRules, RegexpOptions, RegexpRules, StylisticOptions, StylisticRules, SvelteRules, SvelteScriptOptions, TomlOptions, TomlRules, TypeScriptOptions, TypeScriptParserOptions, TypeScriptProjectServiceOptions, TypescriptRules, UnicornOptions, UnicornRules, VitestOptions, VitestRules, VueI18nOptions, VueRules, VueScriptOptions, YmlOptions, YmlRules, comments, css, defineConfig, deps, html, imports, javascript, jsdoc, jsonc, markdown, md, oxlint, prettier, promise, react, regexp, stylistic, svelte, toml, typescript, unicorn, vitest, vue, yaml, yml };
@@ -6,6 +6,10 @@ import { mergeProcessors, processorPassThrough } from "eslint-merge-processors";
6
6
 
7
7
  //#region src/config.ts
8
8
  /**
9
+ * @author kazuya kawaguchi (a.k.a. `@kazupon`)
10
+ * @license MIT
11
+ */
12
+ /**
9
13
  * define eslint configurations
10
14
  *
11
15
  * @param {Awaitable<Linter.Config | Linter.Config[]>[]} configs - eslint flat configurations
@@ -25,38 +29,56 @@ function defineConfig(...configs) {
25
29
  * @author kazuya kawaguchi (a.k.a. `@kazupon`)
26
30
  * @license MIT
27
31
  */
28
- const GLOB_JS = "**/*.?([cm])js";
29
- const GLOB_JSX = "**/*.?([cm])jsx";
30
- const GLOB_TS = "**/*.?([cm])ts";
31
- const GLOB_TSX = "**/*.?([cm])tsx";
32
- const GLOB_JSON = "**/*.json";
33
- const GLOB_JSON5 = "**/*.json5";
34
- const GLOB_JSONC = "**/*.jsonc";
35
- const GLOB_YAML = "**/*.y?(a)ml";
36
- const GLOB_TOML = "**/*.toml";
37
- const GLOB_VUE = "**/*.vue";
38
- const GLOB_SVELTE = "**/*.svelte";
39
- const GLOB_MARKDOWN = "**/*.md";
40
- const GLOB_HTML = "**/*.html";
41
- const GLOB_CSS = "**/*.css";
42
- const GLOB_SRC_EXT = "?([cm])[jt]s?(x)";
43
- const GLOB_SRC = "**/*.?([cm])[jt]s?(x)";
32
+ const EXT_JS = "?([cm])js";
33
+ const EXT_JSX = "?([cm])jsx";
34
+ const EXT_TS = "?([cm])ts";
35
+ const EXT_TSX = "?([cm])tsx";
36
+ const EXT_JSON = "json";
37
+ const EXT_JSON5 = "json5";
38
+ const EXT_JSONC = "jsonc";
39
+ const EXT_YAML = "y?(a)ml";
40
+ const EXT_TOML = "toml";
41
+ const EXT_VUE = "vue";
42
+ const EXT_SVELTE = "svelte";
43
+ const EXT_MD = "md";
44
+ const EXT_HTML = "html";
45
+ const EXT_CSS = "css";
46
+ const GLOB_JS = `**/*.${EXT_JS}`;
47
+ const GLOB_JSX = `**/*.${EXT_JSX}`;
48
+ const GLOB_TS = `**/*.${EXT_TS}`;
49
+ const GLOB_TSX = `**/*.${EXT_TSX}`;
50
+ const GLOB_JSON = `**/*.${EXT_JSON}`;
51
+ const GLOB_JSON5 = `**/*.${EXT_JSON5}`;
52
+ const GLOB_JSONC = `**/*.${EXT_JSONC}`;
53
+ const GLOB_YAML = `**/*.${EXT_YAML}`;
54
+ const GLOB_TOML = `**/*.${EXT_TOML}`;
55
+ const GLOB_VUE = `**/*.${EXT_VUE}`;
56
+ const GLOB_SVELTE = `**/*.${EXT_SVELTE}`;
57
+ const GLOB_MARKDOWN = `**/*.${EXT_MD}`;
58
+ const GLOB_HTML = `**/*.${EXT_HTML}`;
59
+ const GLOB_CSS = `**/*.${EXT_CSS}`;
60
+ const SRC_EXT = "?([cm])[jt]s?(x)";
61
+ const GLOB_SRC = `**/*.${SRC_EXT}`;
44
62
  const GLOB_TESTS = [
45
- `**/test/**/*.${GLOB_SRC_EXT}`,
46
- `**/tests/**/*.${GLOB_SRC_EXT}`,
47
- `**/spec/**/*.${GLOB_SRC_EXT}`,
48
- `**/specs/**/*.${GLOB_SRC_EXT}`,
49
- `**/e2e/**/*.${GLOB_SRC_EXT}`,
50
- `**/__tests__/**/*.${GLOB_SRC_EXT}`,
51
- `**/__test__/**/*.${GLOB_SRC_EXT}`,
52
- `**/*.spec.${GLOB_SRC_EXT}`,
53
- `**/*.test.${GLOB_SRC_EXT}`
63
+ `**/test/**/*.${SRC_EXT}`,
64
+ `**/tests/**/*.${SRC_EXT}`,
65
+ `**/spec/**/*.${SRC_EXT}`,
66
+ `**/specs/**/*.${SRC_EXT}`,
67
+ `**/e2e/**/*.${SRC_EXT}`,
68
+ `**/__tests__/**/*.${SRC_EXT}`,
69
+ `**/__test__/**/*.${SRC_EXT}`,
70
+ `**/*.spec.${SRC_EXT}`,
71
+ `**/*.test.${SRC_EXT}`
54
72
  ];
55
- const GLOB_TESTS_TYPE = [`**/*.test-d.${GLOB_SRC_EXT}`, `**/*.spec-d.${GLOB_SRC_EXT}`];
73
+ const GLOB_TESTS_TYPE = [`**/*.test-d.${SRC_EXT}`, `**/*.spec-d.${SRC_EXT}`];
56
74
 
57
75
  //#endregion
58
76
  //#region src/utils.ts
59
77
  /**
78
+ * @author kazuya kawaguchi (a.k.a. `@kazupon`)
79
+ * @license MIT
80
+ */
81
+ /**
60
82
  * load eslint plugin
61
83
  *
62
84
  * @typeParam T - plugin type
@@ -97,6 +119,10 @@ function getGlobSourceFiles(useTypeScript = false) {
97
119
  //#endregion
98
120
  //#region src/configs/comments.ts
99
121
  /**
122
+ * @author kazuya kawaguchi (a.k.a. `@kazupon`)
123
+ * @license MIT
124
+ */
125
+ /**
100
126
  * configure comments preset for the below plugins
101
127
  *
102
128
  * - `@eslint-community/eslint-plugin-eslint-comments`
@@ -133,6 +159,10 @@ async function comments(options = {}) {
133
159
  //#endregion
134
160
  //#region src/configs/css.ts
135
161
  /**
162
+ * @author kazuya kawaguchi (a.k.a. `@kazupon`)
163
+ * @license MIT
164
+ */
165
+ /**
136
166
  * `@eslint/css` and overrides configuration options
137
167
  *
138
168
  * @param {CssOptions & OverridesOptions} options
@@ -169,6 +199,10 @@ async function css(options = {}) {
169
199
  //#endregion
170
200
  //#region src/configs/deps.ts
171
201
  /**
202
+ * @author kazuya kawaguchi (a.k.a. `@kazupon`)
203
+ * @license MIT
204
+ */
205
+ /**
172
206
  * `eslint-plugin-barrel-files` and overrides configuration options
173
207
  *
174
208
  * @param {DepsOptions & OverridesOptions} options - deps configuration options
@@ -197,6 +231,10 @@ async function deps(options = {}) {
197
231
  //#endregion
198
232
  //#region src/configs/html.ts
199
233
  /**
234
+ * @author kazuya kawaguchi (a.k.a. `@kazupon`)
235
+ * @license MIT
236
+ */
237
+ /**
200
238
  * `@html-eslint/eslint-plugin` and overrides configuration options
201
239
  *
202
240
  * @param {HtmlOptions & OverridesOptions} options - eslint configuration options for HTML
@@ -260,6 +298,10 @@ function resolveTemplateEngineSyntax(syntax, parser) {
260
298
 
261
299
  //#endregion
262
300
  //#region src/configs/imports.ts
301
+ /**
302
+ * @author kazuya kawaguchi (a.k.a. `@kazupon`)
303
+ * @license MIT
304
+ */
263
305
  const IMPORTS_FILES = [
264
306
  GLOB_JS,
265
307
  GLOB_JSX,
@@ -330,13 +372,17 @@ async function imports(options = {}) {
330
372
  //#endregion
331
373
  //#region src/configs/javascript.ts
332
374
  /**
375
+ * @author kazuya kawaguchi (a.k.a. `@kazupon`)
376
+ * @license MIT
377
+ */
378
+ /**
333
379
  * `@eslint/js` and overrides configuration options
334
380
  *
335
381
  * @param {JavaScriptOptions & OverridesOptions} options - eslint configuration options for JavaScript
336
382
  * @returns {Promise<Linter.Config[]>} eslint flat configurations with `@eslint/js` and overrides
337
383
  */
338
384
  async function javascript(options = {}) {
339
- const { rules: overrideRules = {} } = options;
385
+ const { rules: overrideRules = {}, globals: overrideGlobals = {} } = options;
340
386
  return [(
341
387
  /**
342
388
  * {
@@ -358,7 +404,8 @@ async function javascript(options = {}) {
358
404
  ...globals.es2022,
359
405
  document: "readonly",
360
406
  navigator: "readonly",
361
- window: "readonly"
407
+ window: "readonly",
408
+ ...overrideGlobals
362
409
  },
363
410
  parserOptions: {
364
411
  ecmaFeatures: { jsx: true },
@@ -375,6 +422,11 @@ async function javascript(options = {}) {
375
422
  //#endregion
376
423
  //#region src/configs/jsdoc.ts
377
424
  /**
425
+ * @author kazuya kawaguchi (a.k.a. `@kazupon`)
426
+ *
427
+ * @license MIT
428
+ */
429
+ /**
378
430
  * `eslint-plugin-jsdoc` and overrides configuration options
379
431
  *
380
432
  * @param {JsDocOptions & OverridesOptions} options - eslint configuration options for JavaScript
@@ -455,6 +507,10 @@ async function jsdoc(options = {}) {
455
507
  //#endregion
456
508
  //#region src/configs/jsonc.ts
457
509
  /**
510
+ * @author kazuya kawaguchi (a.k.a. `@kazupon`)
511
+ * @license MIT
512
+ */
513
+ /**
458
514
  * `eslint-plugin-jsonc` and overrides configuration options
459
515
  *
460
516
  * @param {JsoncOptions & OverridesOptions} options - eslint jsonc configuration options for json, jsonc, json5
@@ -582,6 +638,10 @@ function jsoncSort() {
582
638
  //#endregion
583
639
  //#region src/configs/markdown.ts
584
640
  /**
641
+ * @author kazuya kawaguchi (a.k.a. `@kazupon`)
642
+ * @license MIT
643
+ */
644
+ /**
585
645
  * `@eslint/markdown` and overrides configuration options
586
646
  *
587
647
  * @param {MarkdownOptions & OverridesOptions} options - eslint unicorn configuration options
@@ -640,9 +700,35 @@ async function markdown(options = {}) {
640
700
  }
641
701
  const md = markdown;
642
702
 
703
+ //#endregion
704
+ //#region src/configs/oxlint.ts
705
+ /**
706
+ * @author kazuya kawaguchi (a.k.a. `@kazupon`)
707
+ * @license MIT
708
+ */
709
+ /**
710
+ * `eslint-plugin-oxlint` and overrides configuration options
711
+ *
712
+ * @param {OxlintOptions & OverridesOptions} options - eslint configuration options for oxlint
713
+ * @returns {Promise<Linter.Config[]>} eslint flat configurations with `eslint-plugin-oxlint` and overrides
714
+ */
715
+ async function oxlint(options = {}) {
716
+ const { rules: overrideRules = {} } = options;
717
+ const oxlint$1 = await loadPlugin("eslint-plugin-oxlint");
718
+ const customConfig = {
719
+ name: "@kazupon/oxlint",
720
+ rules: { ...overrideRules }
721
+ };
722
+ return [...options.configFile ? oxlint$1.buildFromOxlintConfigFile(options.configFile, { withNursery: options.withNursery }) : oxlint$1.configs["flat/all"], customConfig];
723
+ }
724
+
643
725
  //#endregion
644
726
  //#region src/configs/prettier.ts
645
727
  /**
728
+ * @author kazuya kawaguchi (a.k.a. `@kazupon`)
729
+ * @license MIT
730
+ */
731
+ /**
646
732
  * `eslint-config-prettier` and overrides configuration options
647
733
  *
648
734
  * @param {PrettierOptions & OverridesOptions} options - eslint configuration options for Prettier
@@ -662,6 +748,10 @@ async function prettier(options = {}) {
662
748
  //#endregion
663
749
  //#region src/configs/promise.ts
664
750
  /**
751
+ * @author kazuya kawaguchi (a.k.a. `@kazupon`)
752
+ * @license MIT
753
+ */
754
+ /**
665
755
  * `eslint-plugin-promise` and overrides configuration options
666
756
  *
667
757
  * @param {PromiseOptions & OverridesOptions} options - eslint promise configuration options
@@ -681,6 +771,10 @@ async function promise(options = {}) {
681
771
  //#endregion
682
772
  //#region src/configs/react.ts
683
773
  /**
774
+ * @author kazuya kawaguchi (a.k.a. `@kazupon`)
775
+ * @license MIT
776
+ */
777
+ /**
684
778
  * `eslint-plugin-react` and overrides configuration options
685
779
  *
686
780
  * @param {ReactOptions & OverridesOptions} options - eslint react configuration options for regular expressions
@@ -728,6 +822,10 @@ async function react(options = {}) {
728
822
  //#endregion
729
823
  //#region src/configs/regexp.ts
730
824
  /**
825
+ * @author kazuya kawaguchi (a.k.a. `@kazupon`)
826
+ * @license MIT
827
+ */
828
+ /**
731
829
  * `eslint-plugin-regexp` and overrides configuration options
732
830
  *
733
831
  * @param {RegexpOptions & OverridesOptions} options - eslint regexp configuration options for regular expressions
@@ -749,6 +847,10 @@ async function regexp(options = {}) {
749
847
  //#endregion
750
848
  //#region src/configs/stylistic.ts
751
849
  /**
850
+ * @author kazuya kawaguchi (a.k.a. `@kazupon`)
851
+ * @license MIT
852
+ */
853
+ /**
752
854
  * `@stylistic/eslint-plugin` and overrides configuration options
753
855
  *
754
856
  * @param {StylisticOptions & OverridesOptions} options - stylistic eslint plugin configuration options
@@ -793,6 +895,10 @@ async function stylistic(options = {}) {
793
895
  //#endregion
794
896
  //#region src/configs/svelte.ts
795
897
  /**
898
+ * @author kazuya kawaguchi (a.k.a. `@kazupon`)
899
+ * @license MIT
900
+ */
901
+ /**
796
902
  * `eslint-plugin-svelte` and overrides configuration options
797
903
  *
798
904
  * @param {SvelteScriptOptions & TypeScriptOptions & OverridesOptions} options - eslint configuration options for Vue
@@ -828,6 +934,10 @@ async function svelte(options = {}) {
828
934
  //#endregion
829
935
  //#region src/configs/toml.ts
830
936
  /**
937
+ * @author kazuya kawaguchi (a.k.a. `@kazupon`)
938
+ * @license MIT
939
+ */
940
+ /**
831
941
  * `eslint-plugin-yml` and overrides configuration options
832
942
  *
833
943
  * @param {YmlOptions & OverridesOptions} options - eslint yml configuration options for yml, yaml
@@ -857,6 +967,10 @@ async function toml(options = {}) {
857
967
  //#endregion
858
968
  //#region src/configs/typescript.ts
859
969
  /**
970
+ * @author kazuya kawaguchi (a.k.a. `@kazupon`)
971
+ * @license MIT
972
+ */
973
+ /**
860
974
  * `typescript-eslint` and overrides configuration options
861
975
  *
862
976
  * @param {TypeScriptOptions & OverridesOptions} options - eslint configuration options for TypeScript
@@ -874,7 +988,11 @@ async function typescript(options = {}) {
874
988
  return [
875
989
  ...ts.configs.recommendedTypeChecked.map((config) => {
876
990
  const mapped = { ...config };
877
- if (config.files) mapped.files = [...config.files, `${GLOB_MARKDOWN}/**/${GLOB_TS}`];
991
+ mapped.files = [...config.files ?? files, ...[
992
+ EXT_TS,
993
+ EXT_TSX,
994
+ ...extraFileExtensions
995
+ ].map((ext) => `${GLOB_MARKDOWN}/**/*.${ext}`)];
878
996
  return mapped;
879
997
  }),
880
998
  {
@@ -892,10 +1010,6 @@ async function typescript(options = {}) {
892
1010
  ],
893
1011
  ...ts.configs.disableTypeChecked
894
1012
  },
895
- {
896
- name: "@kazupon/typescipt/typescript-eslint/overrides-for-disable-type-checked",
897
- rules: { ...ts.configs.disableTypeChecked.rules }
898
- },
899
1013
  {
900
1014
  name: "@kazupon/typescipt/typescript-eslint",
901
1015
  files,
@@ -934,6 +1048,10 @@ async function typescript(options = {}) {
934
1048
  //#endregion
935
1049
  //#region src/configs/unicorn.ts
936
1050
  /**
1051
+ * @author kazuya kawaguchi (a.k.a. `@kazupon`)
1052
+ * @license MIT
1053
+ */
1054
+ /**
937
1055
  * `eslint-plugin-unicorn` and overrides configuration options
938
1056
  *
939
1057
  * @param {UnicornOptions & OverridesOptions} options - eslint unicorn configuration options
@@ -957,6 +1075,10 @@ async function unicorn(options = {}) {
957
1075
  //#endregion
958
1076
  //#region src/configs/vitest.ts
959
1077
  /**
1078
+ * @author kazuya kawaguchi (a.k.a. `@kazupon`)
1079
+ * @license MIT
1080
+ */
1081
+ /**
960
1082
  * `@vitest/eslint-plugin` and overrides configuration options
961
1083
  *
962
1084
  * @param {VitestOptions & OverridesOptions} options - eslint vitest configuration options
@@ -990,6 +1112,10 @@ async function vitest(options = {}) {
990
1112
  //#endregion
991
1113
  //#region src/configs/vue.ts
992
1114
  /**
1115
+ * @author kazuya kawaguchi (a.k.a. `@kazupon`)
1116
+ * @license MIT
1117
+ */
1118
+ /**
993
1119
  * `eslint-plugin-vue`, `eslint-plugin-vue-composable`, `eslint-plugin-vue-eslint-plugin-vuejs-accessibility` and overrides configuration options
994
1120
  *
995
1121
  * @param {VueScriptOptions & TypeScriptOptions & OverridesOptions} options - eslint configuration options for Vue
@@ -1066,6 +1192,10 @@ async function vue(options = {}) {
1066
1192
  //#endregion
1067
1193
  //#region src/configs/yml.ts
1068
1194
  /**
1195
+ * @author kazuya kawaguchi (a.k.a. `@kazupon`)
1196
+ * @license MIT
1197
+ */
1198
+ /**
1069
1199
  * `eslint-plugin-yml` and overrides configuration options
1070
1200
  *
1071
1201
  * @param {YmlOptions & OverridesOptions} options - eslint yml configuration options for yml, yaml
@@ -1099,4 +1229,4 @@ async function yml(options = {}) {
1099
1229
  const yaml = yml;
1100
1230
 
1101
1231
  //#endregion
1102
- export { comments, css, defineConfig, deps, html, imports, javascript, jsdoc, jsonc, markdown, md, prettier, promise, react, regexp, stylistic, svelte, toml, typescript, unicorn, vitest, vue, yaml, yml };
1232
+ export { comments, css, defineConfig, deps, html, imports, javascript, jsdoc, jsonc, markdown, md, oxlint, prettier, promise, react, regexp, stylistic, svelte, toml, typescript, unicorn, vitest, vue, yaml, yml };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kazupon/eslint-config",
3
3
  "description": "ESLint config for @kazupon",
4
- "version": "0.37.2",
4
+ "version": "0.39.0",
5
5
  "author": {
6
6
  "email": "kawakazu80@gmail.com",
7
7
  "name": "kazuya kawaguchi"
@@ -50,13 +50,13 @@
50
50
  },
51
51
  "dependencies": {
52
52
  "@eslint-community/eslint-plugin-eslint-comments": "^4.5.0",
53
- "@eslint/js": "^9.37.0",
53
+ "@eslint/js": "^9.39.1",
54
54
  "@kazupon/eslint-plugin": "^0.6.2",
55
55
  "@kazupon/jts-utils": "^0.7.1",
56
56
  "@stylistic/eslint-plugin": "^4.4.1",
57
57
  "eslint-flat-config-utils": "^2.1.4",
58
58
  "eslint-merge-processors": "^2.0.0",
59
- "globals": "^16.4.0"
59
+ "globals": "^16.5.0"
60
60
  },
61
61
  "peerDependencies": {
62
62
  "@eslint/css": ">=0.13.0",
@@ -73,6 +73,7 @@
73
73
  "eslint-plugin-jsonc": ">=2.21.0",
74
74
  "eslint-plugin-markdown-preferences": ">=0.36.2",
75
75
  "eslint-plugin-module-interop": ">=0.3.0",
76
+ "eslint-plugin-oxlint": ">=1.30.0",
76
77
  "eslint-plugin-promise": ">=7.2.0",
77
78
  "eslint-plugin-react": ">=7.37.0",
78
79
  "eslint-plugin-react-hooks": ">=7.0.0",
@@ -131,6 +132,9 @@
131
132
  "eslint-plugin-module-interop": {
132
133
  "optional": true
133
134
  },
135
+ "eslint-plugin-oxlint": {
136
+ "optional": true
137
+ },
134
138
  "eslint-plugin-promise": {
135
139
  "optional": true
136
140
  },
@@ -184,35 +188,36 @@
184
188
  }
185
189
  },
186
190
  "devDependencies": {
187
- "@eslint/compat": "^1.4.0",
191
+ "@eslint/compat": "^1.4.1",
188
192
  "@eslint/css": "^0.13.0",
189
- "@eslint/markdown": "^7.4.0",
190
- "@html-eslint/eslint-plugin": "^0.47.0",
193
+ "@eslint/markdown": "^7.5.1",
194
+ "@html-eslint/eslint-plugin": "^0.48.0",
191
195
  "@intlify/eslint-plugin-vue-i18n": "^4.1.0",
192
196
  "@kazupon/prettier-config": "^0.1.1",
193
197
  "@types/eslint": "^9.6.1",
194
- "@types/node": "^22.18.9",
195
- "@vitest/eslint-plugin": "^1.3.16",
198
+ "@types/node": "^22.19.1",
199
+ "@vitest/eslint-plugin": "^1.5.0",
196
200
  "bumpp": "^10.3.1",
197
- "eslint": "^9.37.0",
201
+ "eslint": "^9.39.1",
198
202
  "eslint-config-prettier": "^10.1.8",
199
203
  "eslint-import-resolver-typescript": "^4.4.4",
200
204
  "eslint-plugin-barrel-files": "^3.0.1",
201
205
  "eslint-plugin-import": "^2.32.0",
202
- "eslint-plugin-jsdoc": "^61.1.4",
206
+ "eslint-plugin-jsdoc": "^61.4.1",
203
207
  "eslint-plugin-jsonc": "^2.21.0",
204
- "eslint-plugin-markdown-preferences": "^0.36.2",
208
+ "eslint-plugin-markdown-preferences": "^0.36.3",
205
209
  "eslint-plugin-module-interop": "^0.3.1",
210
+ "eslint-plugin-oxlint": "^1.30.0",
206
211
  "eslint-plugin-promise": "^7.2.1",
207
212
  "eslint-plugin-react": "^7.37.5",
208
- "eslint-plugin-react-hooks": "^7.0.0",
209
- "eslint-plugin-react-refresh": "^0.4.23",
213
+ "eslint-plugin-react-hooks": "^7.0.1",
214
+ "eslint-plugin-react-refresh": "^0.4.24",
210
215
  "eslint-plugin-regexp": "^2.10.0",
211
- "eslint-plugin-svelte": "^3.12.0",
216
+ "eslint-plugin-svelte": "^3.13.0",
212
217
  "eslint-plugin-toml": "^0.12.0",
213
218
  "eslint-plugin-unicorn": "^61.0.2",
214
- "eslint-plugin-unused-imports": "^4.2.0",
215
- "eslint-plugin-vue": "^10.5.0",
219
+ "eslint-plugin-unused-imports": "^4.3.0",
220
+ "eslint-plugin-vue": "^10.6.0",
216
221
  "eslint-plugin-vue-composable": "^1.0.0",
217
222
  "eslint-plugin-vue-scoped-css": "^2.12.0",
218
223
  "eslint-plugin-vuejs-accessibility": "^2.4.1",
@@ -220,14 +225,14 @@
220
225
  "eslint-typegen": "^2.3.0",
221
226
  "gh-changelogen": "^0.2.8",
222
227
  "jiti": "^2.6.1",
223
- "knip": "^5.64.3",
224
- "lint-staged": "^16.2.4",
228
+ "knip": "^5.70.2",
229
+ "lint-staged": "^16.2.7",
225
230
  "prettier": "^3.6.2",
226
- "svelte": "^5.39.11",
231
+ "svelte": "^5.44.1",
227
232
  "tailwind-csstree": "^0.1.4",
228
- "tsdown": "^0.15.6",
233
+ "tsdown": "^0.16.4",
229
234
  "typescript": "^5.9.3",
230
- "typescript-eslint": "^8.46.0",
235
+ "typescript-eslint": "^8.48.0",
231
236
  "vitest": "^3.2.4"
232
237
  },
233
238
  "prettier": "@kazupon/prettier-config",