chore: update lint rules (WIP)

This commit is contained in:
2026-09-10 21:15:15 +05:00
parent 75f6891e7c
commit 4223ee6aa9
2 changed files with 41 additions and 14 deletions
@@ -17,13 +17,16 @@
import fs from "node:fs"; import fs from "node:fs";
import path from "node:path"; import path from "node:path";
const DEFAULT_OLD = ["routes/(old)/**", "lib/old/**"]; // FIXME: change paths to new ones
// TODO: test case for this lint rules
const DEFAULT_OLD = ["routes/v1/**", "lib/v1/**"];
const DEFAULT_NEW = [ const DEFAULT_NEW = [
"routes/preview/**", "routes/**",
"lib/components/kit/**", "lib/components/kit/**",
"lib/preview/**", "lib/**",
"lib/registry-new/**", "lib/registry/**",
"lib/registry-schema.ts", "lib/registry-schema.ts",
"lib/registry-schema.test.ts", "lib/registry-schema.test.ts",
]; ];
+34 -10
View File
@@ -1,16 +1,18 @@
import js from "@eslint/js"; import js from "@eslint/js";
import prettier from "eslint-config-prettier"; import prettier from "eslint-config-prettier";
import svelte from "eslint-plugin-svelte"; import svelte from "eslint-plugin-svelte";
import designTokens from "./eslint-plugins/index.js";
import isolationPlugin from "./eslint-plugins/isolation/index.js";
import globals from "globals"; import globals from "globals";
import svelteParser from "svelte-eslint-parser"; import svelteParser from "svelte-eslint-parser";
import tseslint from "typescript-eslint"; import tseslint from "typescript-eslint";
import designTokens from "./eslint-plugins/index.js";
import isolationPlugin from "./eslint-plugins/isolation/index.js";
// FIXME: надо игнорировать старые файлы, после переноса пути новых компонентов включают старые
// Новый код редизайна: к нему применяем полные recommended-наборы уже сейчас. // Новый код редизайна: к нему применяем полные recommended-наборы уже сейчас.
// Когда старый дизайн удалим (C19), этот scoped-блок убирается и recommended // Когда старый дизайн удалим (C19), этот scoped-блок убирается и recommended
// включается на весь код (см. план-redesign §10, шаг 6). // включается на весь код (см. план-redesign §10, шаг 6).
const newCode = ["**/src/lib/components/kit/**", "**/src/routes/preview/**"]; const newCode = ["**/src/lib/components/**", "**/src/routes/**"];
const oldCode = ["**/src/lib/v1/**", "**/src/routes/v1/**"];
// Полные recommended-наборы — только на новый код (см. ниже, блок перед prettier). // Полные recommended-наборы — только на новый код (см. ниже, блок перед prettier).
const jsRecommended = Array.isArray(js.configs.recommended) const jsRecommended = Array.isArray(js.configs.recommended)
@@ -21,10 +23,19 @@ const svelteRecommended = Array.isArray(svelte.configs["flat/recommended"])
: [svelte.configs["flat/recommended"]]; : [svelte.configs["flat/recommended"]];
// Svelte-рекомендации применяем только к .svelte-файлам нового кода, иначе // Svelte-рекомендации применяем только к .svelte-файлам нового кода, иначе
// svelte-eslint-parser "съедает" обычные .ts в тех же папках (напр. +page.ts). // svelte-eslint-parser "съедает" обычные .ts в тех же папках (напр. +page.ts).
const svelteFiles = [ const newSvelteFiles = [
"**/src/lib/components/kit/**/*.svelte", "**/src/lib/components/**/*.svelte",
"**/src/routes/preview/**/*.svelte", "**/src/routes/**/*.svelte",
]; ];
const oldSvelteFiles = [
"**/src/lib/v1/**/*.svelte",
"**/src/routes/v1/**/*.svelte",
];
// FIXME:
// The signature '(...configs: InfiniteDepthConfigWithExtends[]): ConfigArray' of 'tseslint.config' is deprecated.ts
// Migrate to defineConfig(...)
// The core defineConfig(...) helper is a nearly exact clone of tseslint.config(...)
export default tseslint.config( export default tseslint.config(
{ {
@@ -100,7 +111,8 @@ export default tseslint.config(
// Применяется к новому коду редизайна (см. newCode выше). Когда старый дизайн // Применяется к новому коду редизайна (см. newCode выше). Когда старый дизайн
// удалят, расширить glob на весь код, исключив (old)/. // удалят, расширить glob на весь код, исключив (old)/.
{ {
files: svelteFiles, files: newSvelteFiles,
ignores: oldSvelteFiles,
plugins: { plugins: {
"design-tokens": designTokens, "design-tokens": designTokens,
}, },
@@ -113,9 +125,21 @@ export default tseslint.config(
}, },
// Полные recommended-наборы — только на новый код. // Полные recommended-наборы — только на новый код.
...[ ...[
...jsRecommended.map((cfg) => ({ ...cfg, files: newCode })), ...jsRecommended.map((cfg) => ({
...tseslint.configs.recommended.map((cfg) => ({ ...cfg, files: newCode })), ...cfg,
...svelteRecommended.map((cfg) => ({ ...cfg, files: svelteFiles })), files: newCode,
ignores: oldCode,
})),
...tseslint.configs.recommended.map((cfg) => ({
...cfg,
files: newCode,
ignores: oldCode,
})),
...svelteRecommended.map((cfg) => ({
...cfg,
files: newSvelteFiles,
ignores: oldSvelteFiles,
})),
], ],
// В Svelte 5 пропсы деструктурируются через `let` (конвенция документации и // В Svelte 5 пропсы деструктурируются через `let` (конвенция документации и