const fs = require('node:fs'); const path = require('node:path'); const { execFileSync } = require('node:child_process'); const { createLogger } = require('../src/generator/utils/logger'); const log = createLogger('lint'); function collectJsFiles(rootDir) { const files = []; const walk = (currentDir) => { let entries; try { entries = fs.readdirSync(currentDir, { withFileTypes: true }); } catch { return; } entries.forEach((entry) => { const fullPath = path.join(currentDir, entry.name); if (entry.isDirectory()) { if (entry.name === 'node_modules' || entry.name === 'dist') return; walk(fullPath); return; } if (entry.isFile() && entry.name.endsWith('.js')) { files.push(fullPath); } }); }; walk(rootDir); return files; } function main() { const projectRoot = path.resolve(__dirname, '..'); const targetDirs = ['src', 'scripts', 'test'].map((dir) => path.join(projectRoot, dir)); const jsFiles = targetDirs.flatMap((dir) => collectJsFiles(dir)).sort(); if (jsFiles.length === 0) { log.ok('未发现需要检查的 .js 文件,跳过'); return; } let hasError = false; jsFiles.forEach((filePath) => { const relativePath = path.relative(projectRoot, filePath); try { execFileSync(process.execPath, ['--check', filePath], { stdio: 'inherit' }); } catch (error) { hasError = true; log.error('语法检查失败', { file: relativePath, exit: error && error.status }); } }); if (hasError) { log.error('语法检查未通过', { files: jsFiles.length }); process.exitCode = 1; } else { log.ok('语法检查通过', { files: jsFiles.length }); } } main();