From ed9e8a21448586771f85b9d56497fdc67b3106c2 Mon Sep 17 00:00:00 2001 From: bymyself Date: Fri, 19 Sep 2025 21:40:44 -0700 Subject: [PATCH] chore: enforce vue block order in pre-commit --- lint-staged.config.js | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/lint-staged.config.js b/lint-staged.config.js index 0f3808700a..57fa961f40 100644 --- a/lint-staged.config.js +++ b/lint-staged.config.js @@ -1,10 +1,19 @@ +/* eslint-disable @typescript-eslint/no-floating-promises */ +const vueBlockOrderRule = + "vue/block-order: ['error', {'order': ['docs', 'script', 'template', 'i18n', 'style']}]" + export default { './**/*.js': (stagedFiles) => formatAndEslint(stagedFiles), - './**/*.{ts,tsx,vue,mts}': (stagedFiles) => [ + './**/*.{ts,tsx,mts}': (stagedFiles) => [ ...formatAndEslint(stagedFiles), 'pnpm typecheck' - ] + ], + + './**/*.vue': (stagedFiles) => [ + runVueBlockOrder(stagedFiles), + ...formatAndEslint(stagedFiles) + ].filter(Boolean) } function formatAndEslint(fileNames) { @@ -13,3 +22,9 @@ function formatAndEslint(fileNames) { `pnpm exec prettier --cache --write ${fileNames.join(' ')}` ] } + +function runVueBlockOrder(fileNames) { + if (fileNames.length === 0) return null + const quotedFiles = fileNames.map((file) => `"${file}"`).join(' ') + return `pnpm exec eslint --fix --rule "${vueBlockOrderRule}" ${quotedFiles}` +}