feat(eslint): 新增缓存策略规则禁止直接调用 revalidatePath/revalidateTag

This commit is contained in:
SpecialX
2026-07-05 18:44:07 +08:00
parent 80dd67780c
commit 9eb02807a4

View File

@@ -63,6 +63,67 @@ const eslintConfig = defineConfig([
"design-tokens/no-hardcoded-fonts": "error",
},
},
// 缓存策略规则:禁止在 actions / route.ts 中直接调用 revalidatePath/revalidateTag
{
files: ["src/modules/**/actions*.ts", "src/app/api/**/route.ts", "src/i18n/actions*.ts"],
rules: {
"no-restricted-syntax": [
"error",
{
selector: "CallExpression[callee.name='revalidatePath']",
message:
"使用 invalidateFor() 替代直接 revalidatePath(),参见 docs/architecture/004 缓存章节",
},
{
selector: "CallExpression[callee.name='revalidateTag']",
message:
"使用 invalidateFor() 替代直接 revalidateTag(),参见 docs/architecture/004 缓存章节",
},
],
},
},
// 临时豁免:未迁移模块(下期逐模块移除)
{
files: [
"src/i18n/actions*.ts",
"src/modules/adaptive-practice/actions*.ts",
"src/modules/announcements/actions*.ts",
"src/modules/attendance/actions*.ts",
"src/modules/audit/actions*.ts",
"src/modules/course-plans/actions*.ts",
"src/modules/diagnostic/actions*.ts",
"src/modules/elective/actions*.ts",
"src/modules/error-book/actions*.ts",
"src/modules/exams/actions*.ts",
"src/modules/grades/actions*.ts",
"src/modules/homework/actions*.ts",
"src/modules/invitation-codes/actions*.ts",
"src/modules/leave-requests/actions*.ts",
"src/modules/lesson-preparation/actions*.ts",
"src/modules/messaging/actions*.ts",
"src/modules/notifications/actions*.ts",
"src/modules/onboarding/actions*.ts",
"src/modules/proctoring/actions*.ts",
"src/modules/questions/actions*.ts",
"src/modules/rbac/actions*.ts",
"src/modules/scheduling/actions*.ts",
"src/modules/school/actions*.ts",
"src/modules/settings/actions*.ts",
"src/modules/standards/actions*.ts",
"src/modules/textbooks/actions*.ts",
"src/modules/users/actions*.ts",
],
rules: {
"no-restricted-syntax": "off",
},
},
// 豁免:shared/lib/cache/ 内部允许调用 revalidatePath/revalidateTag(invalidate.ts 内部实现)
{
files: ["src/shared/lib/cache/**/*.ts"],
rules: {
"no-restricted-syntax": "off",
},
},
// Override default ignores of eslint-config-next.
globalIgnores([
// Default ignores of eslint-config-next: