Rework configs using tseslint InfiniteArray
Signed-off-by: Émile Ré <emile@getprobo.com>
This commit is contained in:
@@ -2,10 +2,10 @@ import { configs } from "@probo/eslint-config";
|
|||||||
import { defineConfig } from "eslint/config";
|
import { defineConfig } from "eslint/config";
|
||||||
|
|
||||||
export default defineConfig([
|
export default defineConfig([
|
||||||
...configs.base,
|
configs.base,
|
||||||
...configs.ts,
|
configs.ts,
|
||||||
...configs.imports,
|
configs.imports,
|
||||||
...configs.react,
|
configs.react,
|
||||||
|
configs.stylistic,
|
||||||
configs.languageOptions.browser,
|
configs.languageOptions.browser,
|
||||||
...configs.stylistic,
|
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -2,10 +2,10 @@ import { configs } from "@probo/eslint-config";
|
|||||||
import { defineConfig } from "eslint/config";
|
import { defineConfig } from "eslint/config";
|
||||||
|
|
||||||
export default defineConfig([
|
export default defineConfig([
|
||||||
...configs.base,
|
configs.base,
|
||||||
...configs.ts,
|
configs.ts,
|
||||||
...configs.imports,
|
configs.imports,
|
||||||
...configs.react,
|
configs.react,
|
||||||
|
configs.stylistic,
|
||||||
configs.languageOptions.browser,
|
configs.languageOptions.browser,
|
||||||
...configs.stylistic,
|
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -1,13 +1,15 @@
|
|||||||
import { defineConfig } from "eslint/config";
|
import { defineConfig } from "eslint/config";
|
||||||
|
|
||||||
import { baseConfigs } from "#baseConfigs";
|
import { baseConfigs } from "#baseConfigs";
|
||||||
import { tsConfigs } from "#tsConfigs";
|
import { importsConfigs } from "#importsConfigs";
|
||||||
import { nodeLanguageOptionsConfig } from "#languageOptionsConfigs";
|
import { nodeLanguageOptionsConfigs } from "#languageOptionsConfigs";
|
||||||
import { stylisticConfigs } from "#stylisticConfigs";
|
import { stylisticConfigs } from "#stylisticConfigs";
|
||||||
|
import { tsConfigs } from "#tsConfigs";
|
||||||
|
|
||||||
export default defineConfig([
|
export default defineConfig([
|
||||||
...baseConfigs,
|
...baseConfigs,
|
||||||
...tsConfigs,
|
...tsConfigs,
|
||||||
nodeLanguageOptionsConfig,
|
...importsConfigs,
|
||||||
...stylisticConfigs,
|
...stylisticConfigs,
|
||||||
|
...nodeLanguageOptionsConfigs,
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
"imports": {
|
"imports": {
|
||||||
"#baseConfigs": "./src/baseConfigs.ts",
|
"#baseConfigs": "./src/baseConfigs.ts",
|
||||||
"#tsConfigs": "./src/tsConfigs.ts",
|
"#tsConfigs": "./src/tsConfigs.ts",
|
||||||
|
"#importsConfigs": "./src/importsConfigs.ts",
|
||||||
"#languageOptionsConfigs": "./src/languageOptionsConfigs.ts",
|
"#languageOptionsConfigs": "./src/languageOptionsConfigs.ts",
|
||||||
"#stylisticConfigs": "./src/stylisticConfigs.ts"
|
"#stylisticConfigs": "./src/stylisticConfigs.ts"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,7 +1,15 @@
|
|||||||
import js from "@eslint/js";
|
import js from "@eslint/js";
|
||||||
import type { Linter } from "eslint";
|
import { globalIgnores } from "eslint/config";
|
||||||
|
import type { FlatConfig } from "typescript-eslint";
|
||||||
|
|
||||||
export const baseConfigs = [
|
export const baseConfigs: FlatConfig.ConfigArray = [
|
||||||
{ ignores: ["dist", "node_modules", "**/*.d.ts"] } satisfies Pick<Linter.Config, "ignores">,
|
{ files: ["**/*.js", "**/*.mjs", "**/*.ts", "**/*.tsx"] },
|
||||||
|
globalIgnores([
|
||||||
|
".turbo/",
|
||||||
|
"**/dist/",
|
||||||
|
"**/node_modules/",
|
||||||
|
"**/__generated__/",
|
||||||
|
"**/*.d.ts",
|
||||||
|
]),
|
||||||
js.configs.recommended,
|
js.configs.recommended,
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,17 +1,10 @@
|
|||||||
import { createTypeScriptImportResolver } from "eslint-import-resolver-typescript";
|
import { createTypeScriptImportResolver } from "eslint-import-resolver-typescript";
|
||||||
import { importX } from "eslint-plugin-import-x";
|
import { importX } from "eslint-plugin-import-x";
|
||||||
|
import type { FlatConfig } from "typescript-eslint";
|
||||||
|
|
||||||
export const importsConfigs = [
|
export const importsConfigs: FlatConfig.ConfigArray = [
|
||||||
importX.flatConfigs.recommended,
|
importX.flatConfigs.recommended,
|
||||||
{
|
importX.flatConfigs.typescript,
|
||||||
...importX.flatConfigs.typescript,
|
|
||||||
settings: {
|
|
||||||
"import-x/resolver-next": createTypeScriptImportResolver({
|
|
||||||
alwaysTryTypes: true,
|
|
||||||
project: "tsconfig.json",
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
rules: {
|
rules: {
|
||||||
"import-x/order": [
|
"import-x/order": [
|
||||||
@@ -37,5 +30,11 @@ export const importsConfigs = [
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
settings: {
|
||||||
|
"import-x/resolver-next": createTypeScriptImportResolver({
|
||||||
|
alwaysTryTypes: true,
|
||||||
|
project: "tsconfig.json",
|
||||||
|
}),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,18 +1,18 @@
|
|||||||
import { baseConfigs } from "./baseConfigs.ts";
|
import { baseConfigs } from "./baseConfigs.ts";
|
||||||
import { browserLanguageOptionsConfig, nodeLanguageOptionsConfig } from "./languageOptionsConfigs.ts";
|
import { importsConfigs } from "./importsConfigs.ts";
|
||||||
import { tsConfigs } from "./tsConfigs.ts";
|
import { browserLanguageOptionsConfigs, nodeLanguageOptionsConfigs } from "./languageOptionsConfigs.ts";
|
||||||
import { reactConfigs } from "./reactConfigs.ts";
|
import { reactConfigs } from "./reactConfigs.ts";
|
||||||
import { stylisticConfigs } from "./stylisticConfigs.ts";
|
import { stylisticConfigs } from "./stylisticConfigs.ts";
|
||||||
import { importsConfigs } from "./importsConfigs.ts";
|
import { tsConfigs } from "./tsConfigs.ts";
|
||||||
|
|
||||||
export const configs = {
|
export const configs = {
|
||||||
base: baseConfigs,
|
base: baseConfigs,
|
||||||
imports: importsConfigs,
|
imports: importsConfigs,
|
||||||
ts: tsConfigs,
|
ts: tsConfigs,
|
||||||
languageOptions: {
|
|
||||||
browser: browserLanguageOptionsConfig,
|
|
||||||
node: nodeLanguageOptionsConfig,
|
|
||||||
},
|
|
||||||
react: reactConfigs,
|
react: reactConfigs,
|
||||||
stylistic: stylisticConfigs,
|
stylistic: stylisticConfigs,
|
||||||
|
languageOptions: {
|
||||||
|
browser: browserLanguageOptionsConfigs,
|
||||||
|
node: nodeLanguageOptionsConfigs,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,38 +1,42 @@
|
|||||||
import type { Linter } from "eslint";
|
import globals from "globals";
|
||||||
import * as globals from "globals";
|
import type { FlatConfig } from "typescript-eslint";
|
||||||
|
|
||||||
export const browserLanguageOptionsConfig = {
|
export const browserLanguageOptionsConfigs: FlatConfig.ConfigArray = [
|
||||||
languageOptions: {
|
{
|
||||||
// Same as the ones we use in our tsconfig compilerOptions.lib for browser
|
languageOptions: {
|
||||||
ecmaVersion: 2022,
|
// Same as the ones we use in our tsconfig compilerOptions.lib for browser
|
||||||
globals: {
|
ecmaVersion: 2022,
|
||||||
...globals.browser,
|
globals: {
|
||||||
...globals.es2022,
|
...globals.browser,
|
||||||
},
|
...globals.es2022,
|
||||||
sourceType: "module",
|
},
|
||||||
parserOptions: {
|
sourceType: "module",
|
||||||
projectService: true,
|
parserOptions: {
|
||||||
ecmaFeatures: {
|
projectService: true,
|
||||||
impliedStrict: true,
|
ecmaFeatures: {
|
||||||
|
impliedStrict: true,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
} satisfies Pick<Linter.Config, "languageOptions">;
|
];
|
||||||
|
|
||||||
export const nodeLanguageOptionsConfig = {
|
export const nodeLanguageOptionsConfigs: FlatConfig.ConfigArray = [
|
||||||
languageOptions: {
|
{
|
||||||
// Same as the ones we use in our tsconfig compilerOptions.lib for node
|
languageOptions: {
|
||||||
ecmaVersion: 2023,
|
// Same as the ones we use in our tsconfig compilerOptions.lib for node
|
||||||
globals: {
|
ecmaVersion: 2023,
|
||||||
...globals.node,
|
globals: {
|
||||||
...globals.es2023,
|
...globals.node,
|
||||||
},
|
...globals.es2023,
|
||||||
sourceType: "module",
|
},
|
||||||
parserOptions: {
|
sourceType: "module",
|
||||||
projectService: true,
|
parserOptions: {
|
||||||
ecmaFeatures: {
|
projectService: true,
|
||||||
impliedStrict: true,
|
ecmaFeatures: {
|
||||||
|
impliedStrict: true,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
} satisfies Pick<Linter.Config, "languageOptions">;
|
];
|
||||||
|
|||||||
@@ -1,15 +1,16 @@
|
|||||||
import react from "eslint-plugin-react";
|
import react from "eslint-plugin-react";
|
||||||
import * as reactHooks from "eslint-plugin-react-hooks";
|
import reactHooks from "eslint-plugin-react-hooks";
|
||||||
|
import type { FlatConfig } from "typescript-eslint";
|
||||||
|
|
||||||
export const reactConfigs = [
|
export const reactConfigs: FlatConfig.ConfigArray = [
|
||||||
{
|
{
|
||||||
...react.configs.flat.recommended,
|
...react.configs.flat.recommended,
|
||||||
...react.configs.flat["jsx-runtime"],
|
...react.configs.flat["jsx-runtime"],
|
||||||
...reactHooks.configs.flat.recommended,
|
|
||||||
settings: {
|
settings: {
|
||||||
react: {
|
react: {
|
||||||
version: "detect",
|
version: "detect",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
reactHooks.configs.flat.recommended,
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import stylistic from "@stylistic/eslint-plugin";
|
import stylistic from "@stylistic/eslint-plugin";
|
||||||
import type { Linter } from "eslint";
|
import type { FlatConfig } from "typescript-eslint";
|
||||||
|
|
||||||
export const stylisticConfigs = [
|
export const stylisticConfigs: FlatConfig.ConfigArray = [
|
||||||
stylistic.configs.customize({
|
stylistic.configs.customize({
|
||||||
arrowParens: false, // Will actually set it to "as-needed"
|
arrowParens: false, // Will actually set it to "as-needed"
|
||||||
blockSpacing: true,
|
blockSpacing: true,
|
||||||
@@ -28,5 +28,5 @@ export const stylisticConfigs = [
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
} satisfies Linter.Config,
|
},
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,10 +1,8 @@
|
|||||||
import type { Linter } from "eslint";
|
import { configs, type FlatConfig } from "typescript-eslint";
|
||||||
import { configs } from "typescript-eslint";
|
|
||||||
|
|
||||||
export const tsConfigs = [
|
export const tsConfigs: FlatConfig.ConfigArray = [
|
||||||
...configs.recommendedTypeChecked,
|
...configs.recommendedTypeChecked,
|
||||||
{
|
{
|
||||||
files: ["**/*.{ts,tsx}"],
|
|
||||||
rules: {
|
rules: {
|
||||||
"@typescript-eslint/no-unused-vars": [
|
"@typescript-eslint/no-unused-vars": [
|
||||||
"error",
|
"error",
|
||||||
@@ -19,10 +17,5 @@ export const tsConfigs = [
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
languageOptions: {
|
},
|
||||||
parserOptions: {
|
|
||||||
projectService: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
} satisfies Linter.Config,
|
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -2,19 +2,19 @@ import { configs } from "@probo/eslint-config";
|
|||||||
import { defineConfig } from "eslint/config";
|
import { defineConfig } from "eslint/config";
|
||||||
|
|
||||||
export default defineConfig([
|
export default defineConfig([
|
||||||
...configs.base,
|
configs.base,
|
||||||
...configs.ts,
|
configs.ts,
|
||||||
...configs.imports,
|
configs.imports,
|
||||||
...configs.react,
|
configs.react,
|
||||||
...configs.stylistic,
|
configs.stylistic,
|
||||||
{
|
{
|
||||||
|
extends: [configs.languageOptions.browser],
|
||||||
ignores: ["./tailwind.config.js"],
|
ignores: ["./tailwind.config.js"],
|
||||||
...configs.languageOptions.browser,
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
extends: [configs.languageOptions.node],
|
||||||
files: ["./tailwind.config.js"],
|
files: ["./tailwind.config.js"],
|
||||||
languageOptions: {
|
languageOptions: {
|
||||||
...configs.languageOptions.node.languageOptions,
|
|
||||||
sourceType: "commonjs",
|
sourceType: "commonjs",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user