Skip to content

Commit 237eb74

Browse files
committed
eslint config helper に移行する
1 parent de76ed3 commit 237eb74

7 files changed

Lines changed: 55 additions & 62 deletions

File tree

packages/eslint-config/src/base/astro.ts

Lines changed: 27 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -4,51 +4,38 @@ import astroPlugin from "eslint-plugin-astro";
44
import * as typescriptESLintParserForExtraFiles from "typescript-eslint-parser-for-extra-files";
55

66
import { __dirname } from "../lib/dir";
7-
import { astroFiles, tsFiles } from "../utils/files";
7+
import { prepareForExtend } from "../utils/eslint";
8+
import { astroFiles } from "../utils/files";
89
import { jsConfig } from "./js";
910
import { stylisticConfig } from "./stylistic";
1011
import { tsConfig } from "./typescript";
1112

12-
export const astroConfig = defineConfig(
13-
{
14-
files: [tsFiles],
15-
languageOptions: {
16-
// @ts-expect-error type mismatch, but works
13+
export const astroConfig = defineConfig({
14+
extends: prepareForExtend(
15+
jsConfig,
16+
stylisticConfig,
17+
tsConfig({ extraFiles: true }),
18+
astroPlugin.configs.recommended,
19+
astroPlugin.configs["jsx-a11y-strict"],
20+
),
21+
files: [astroFiles],
22+
languageOptions: {
23+
parser: astroESLintParser,
24+
parserOptions: {
1725
parser: typescriptESLintParserForExtraFiles,
18-
parserOptions: {
19-
project: true,
20-
projectService: false,
21-
tsconfigRootDir: __dirname,
22-
},
26+
project: true,
27+
projectService: false,
28+
tsconfigRootDir: __dirname,
2329
},
2430
},
25-
{
26-
extends: [
27-
...jsConfig,
28-
...stylisticConfig,
29-
...tsConfig,
30-
...astroPlugin.configs.recommended,
31-
...astroPlugin.configs["jsx-a11y-strict"],
32-
],
33-
files: [astroFiles],
34-
languageOptions: {
35-
parser: astroESLintParser,
36-
parserOptions: {
37-
parser: typescriptESLintParserForExtraFiles,
38-
project: true,
39-
projectService: false,
40-
tsconfigRootDir: __dirname,
41-
},
42-
},
43-
name: "@virtual-live-lab/eslint-config/astro",
44-
rules: {
45-
"astro/no-set-html-directive": "error",
46-
"astro/no-set-text-directive": "error",
47-
"astro/no-unused-css-selector": "error",
48-
"astro/prefer-class-list-directive": "error",
49-
"astro/prefer-object-class-list": "error",
50-
"astro/prefer-split-class-list": "error",
51-
"astro/sort-attributes": "error",
52-
},
31+
name: "@virtual-live-lab/eslint-config/astro",
32+
rules: {
33+
"astro/no-set-html-directive": "error",
34+
"astro/no-set-text-directive": "error",
35+
"astro/no-unused-css-selector": "error",
36+
"astro/prefer-class-list-directive": "error",
37+
"astro/prefer-object-class-list": "error",
38+
"astro/prefer-split-class-list": "error",
39+
"astro/sort-attributes": "error",
5340
},
54-
);
41+
});
Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
import { Linter } from "eslint";
2-
1+
import { defineConfig } from "@eslint/config-helpers";
32
import gitignore from "eslint-config-flat-gitignore";
43

5-
export const baseConfig: Linter.Config[] = [gitignore()];
4+
export const baseConfig = defineConfig({
5+
extends: [gitignore()],
6+
name: "@virtual-live-lab/eslint-config/base",
7+
});
Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
1-
import type { Linter } from "eslint";
2-
1+
import { defineConfig } from "@eslint/config-helpers";
32
import js from "@eslint/js";
43

4+
import { prepareForExtend } from "../utils/eslint";
55
import { jsFiles } from "../utils/files";
66

7-
export const jsConfig: Linter.Config[] = [
8-
{
9-
files: [jsFiles],
10-
...js.configs.recommended,
11-
},
12-
];
7+
export const jsConfig = defineConfig({
8+
extends: prepareForExtend(js.configs.recommended),
9+
files: [jsFiles],
10+
name: "@virtual-live-lab/eslint-config/javascript",
11+
});

packages/eslint-config/src/base/react.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,16 @@ import reactRefresh from "eslint-plugin-react-refresh";
44
import globals from "globals";
55

66
import { compat } from "../lib/compat";
7+
import { prepareForExtend } from "../utils/eslint";
78
import { jsxFiles } from "../utils/files";
89

910
const reactConfig = defineConfig({
10-
extends: [
11-
// @ts-expect-error 型が合わない
12-
react.configs.flat.recommended,
13-
// @ts-expect-error 型が合わない
11+
extends: prepareForExtend(
12+
// @ts-expect-error type mismatch
13+
react.configs.flat["recommended"],
1414
react.configs.flat["jsx-runtime"],
1515
...compat.extends("plugin:react-hooks/recommended"),
16-
],
16+
),
1717
files: [jsxFiles],
1818
languageOptions: {
1919
globals: {

packages/eslint-config/src/base/stylistic.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,14 @@ import { defineConfig } from "@eslint/config-helpers";
22
import prettierConfig from "eslint-config-prettier/flat";
33
import perfectionistPlugin from "eslint-plugin-perfectionist";
44

5+
import { prepareForExtend } from "../utils/eslint";
56
import { jsFiles, tsFiles } from "../utils/files";
67

78
export const stylisticConfig = defineConfig({
8-
extends: [prettierConfig, perfectionistPlugin.configs["recommended-natural"]],
9+
extends: prepareForExtend(
10+
prettierConfig,
11+
perfectionistPlugin.configs["recommended-natural"],
12+
),
913
files: [tsFiles, jsFiles],
1014
name: "@virtual-live-lab/eslint-config/stylistic",
1115
rules: {

packages/eslint-config/src/base/typescript.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import tseslint from "typescript-eslint";
77
import * as typescriptESLintParserForExtraFiles from "typescript-eslint-parser-for-extra-files";
88

99
import { __dirname } from "../lib/dir";
10+
import { prepareForExtend } from "../utils/eslint";
1011
import { tsFiles } from "../utils/files";
1112

1213
type TSConfigParams = {
@@ -21,10 +22,10 @@ export const tsConfig = (params: Partial<TSConfigParams> = {}) => {
2122
const resolvedParams = defu(params, DEFAULT_PARAMS);
2223

2324
return defineConfig({
24-
extends: [
25-
...(tseslint.configs.recommendedTypeChecked as Linter.Config[]),
26-
...(tseslint.configs.stylisticTypeChecked as Linter.Config[]),
27-
],
25+
extends: prepareForExtend(
26+
tseslint.configs.recommendedTypeChecked as unknown as Linter.Config[],
27+
tseslint.configs.stylisticTypeChecked as unknown as Linter.Config[],
28+
),
2829
files: [tsFiles],
2930
languageOptions: getLanguageOptions({
3031
extraFiles: resolvedParams.extraFiles,

packages/eslint-config/src/presets/ts.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@ import { defineConfig } from "@eslint/config-helpers";
33
import { tsConfig } from "../base/typescript";
44
import js from "./js";
55

6-
const ts = defineConfig(...js, ...tsConfig);
6+
const ts = defineConfig(...js, ...tsConfig());
77

88
export default ts;

0 commit comments

Comments
 (0)