Files
ONE-OS/axhub-make/scripts/code-review.js
王冕 a27e3b8e43 feat: sync full workspace including web modules, docs, and configurations to Gitea
Optimized the root .gitignore to exclude virtual environments, node modules,
and temp folders to ensure clean and lightweight version tracking.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-09 18:12:25 +08:00

154 lines
3.8 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env node
/**
* 代码检查命令行工具
*
* 使用方法:
* node scripts/code-review.js prototypes/landing-page
* node scripts/code-review.js components/button
*
* 或者在 package.json 中添加脚本:
* "review": "node scripts/code-review.js"
*/
import http from 'http';
// 从命令行参数获取要检查的路径
const targetPath = process.argv[2];
if (!targetPath) {
console.error('❌ 错误:缺少路径参数');
console.log('\n使用方法');
console.log(' node scripts/code-review.js prototypes/landing-page');
console.log(' node scripts/code-review.js components/button');
process.exit(1);
}
// 配置
const HOST = 'localhost';
const PORT = 51720;
// 发送检查请求
function reviewCode(targetPath) {
return new Promise((resolve, reject) => {
const postData = JSON.stringify({ path: targetPath });
const options = {
hostname: HOST,
port: PORT,
path: '/api/code-review',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': Buffer.byteLength(postData)
}
};
const req = http.request(options, (res) => {
let data = '';
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
try {
const result = JSON.parse(data);
resolve(result);
} catch (error) {
reject(new Error(`解析响应失败: ${error.message}`));
}
});
});
req.on('error', (error) => {
reject(new Error(`请求失败: ${error.message}\n请确保开发服务器正在运行 (npm run dev)`));
});
req.write(postData);
req.end();
});
}
// 格式化输出
function formatResult(result) {
console.log('\n' + '='.repeat(60));
console.log(`📋 检查文件: ${result.file}`);
console.log('='.repeat(60));
if (result.issues.length === 0) {
console.log('\n✅ 太棒了!代码完全符合规范,没有发现任何问题。\n');
return;
}
// 统计问题数量
const errors = result.issues.filter(issue => issue.type === 'error');
const warnings = result.issues.filter(issue => issue.type === 'warning');
console.log(`\n发现 ${errors.length} 个错误,${warnings.length} 个警告\n`);
// 输出错误
if (errors.length > 0) {
console.log('❌ 错误 (必须修复):');
console.log('-'.repeat(60));
errors.forEach((issue, index) => {
console.log(`\n${index + 1}. [${issue.rule}]`);
console.log(` ${issue.message}`);
if (issue.suggestion) {
console.log(` 💡 建议: ${issue.suggestion}`);
}
});
console.log();
}
// 输出警告
if (warnings.length > 0) {
console.log('⚠️ 警告 (建议修复):');
console.log('-'.repeat(60));
warnings.forEach((issue, index) => {
console.log(`\n${index + 1}. [${issue.rule}]`);
console.log(` ${issue.message}`);
if (issue.suggestion) {
console.log(` 💡 建议: ${issue.suggestion}`);
}
});
console.log();
}
// 总结
console.log('='.repeat(60));
if (result.passed) {
console.log('✅ 检查通过 (仅有警告,不影响使用)');
} else {
console.log('❌ 检查未通过 (存在错误,需要修复)');
}
console.log('='.repeat(60) + '\n');
}
// 主函数
async function main() {
console.log(`\n🔍 正在检查: ${targetPath}...\n`);
try {
const result = await reviewCode(targetPath);
if (result.error) {
console.error(`❌ 检查失败: ${result.error}`);
process.exit(1);
}
formatResult(result);
// 如果有错误,退出码为 1
if (!result.passed) {
process.exit(1);
}
} catch (error) {
console.error(`\n${error.message}\n`);
process.exit(1);
}
}
main();