128 lines
4.0 KiB
JavaScript
128 lines
4.0 KiB
JavaScript
const fs = require('fs');
|
||
const path = 'D:\\project\\zhizhu\\components\\PhotoUploadForm.vue';
|
||
const content = fs.readFileSync(path, 'utf8');
|
||
|
||
// 提取 script 内容
|
||
const scriptMatch = content.match(/<script[^>]*>([\s\S]*?)<\/script>/);
|
||
if (!scriptMatch) {
|
||
console.log('No script section found');
|
||
process.exit(1);
|
||
}
|
||
|
||
const scriptContent = scriptMatch[1];
|
||
const lines = scriptContent.split('\n');
|
||
|
||
// 更智能的括号计数 - 跳过 import 语句中的 {}
|
||
console.log('=== Smart brace counting ===\n');
|
||
|
||
let braceCount = 0;
|
||
let inImport = false;
|
||
let importBraceCount = 0;
|
||
|
||
for (let i = 0; i < lines.length; i++) {
|
||
const line = lines[i];
|
||
|
||
// 检测是否在 import 语句中
|
||
if (line.includes('import ') && line.includes('from ')) {
|
||
// 单行 import,跳过其中的括号计<E58FB7><E8AEA1><EFBFBD>
|
||
if (line.includes('{') && line.includes('}')) {
|
||
// 单行 import,不计入
|
||
continue;
|
||
}
|
||
}
|
||
|
||
// 多行 import 开始
|
||
if (line.includes('import ') && line.includes('{') && !line.includes('}')) {
|
||
inImport = true;
|
||
importBraceCount = 1;
|
||
continue;
|
||
}
|
||
|
||
// 在 import 中
|
||
if (inImport) {
|
||
importBraceCount += (line.match(/{/g) || []).length;
|
||
importBraceCount -= (line.match(/}/g) || []).length;
|
||
if (importBraceCount === 0) {
|
||
inImport = false;
|
||
}
|
||
continue;
|
||
}
|
||
|
||
// 正常代码中的括号计数
|
||
const opens = (line.match(/{/g) || []).length;
|
||
const closes = (line.match(/}/g) || []).length;
|
||
braceCount += opens - closes;
|
||
|
||
// 检查异常变化
|
||
if (braceCount < 0) {
|
||
console.log(`Line ${i + 167}: NEGATIVE brace count!`);
|
||
console.log(` ${line}`);
|
||
}
|
||
|
||
// 检查 export default 开始
|
||
if (line.includes('export default {')) {
|
||
console.log(`Line ${i + 167}: export default starts, braceCount = ${braceCount}`);
|
||
}
|
||
|
||
// 检查 }; 结束
|
||
if (line.trim() === '};') {
|
||
console.log(`Line ${i + 167}: Potential export default end, braceCount = ${braceCount}`);
|
||
}
|
||
}
|
||
|
||
console.log(`\nFinal brace count (excluding imports): ${braceCount}`);
|
||
|
||
if (braceCount === 0) {
|
||
console.log('Braces balanced!');
|
||
} else {
|
||
console.log(`Braces UNBALANCED! Difference: ${braceCount}`);
|
||
}
|
||
|
||
// 检查其他常见语法问题
|
||
console.log('\n=== Checking for common syntax errors ===\n');
|
||
|
||
// 1. 检查是否有缺少逗号的方法声明
|
||
for (let i = 0; i < lines.length - 1; i++) {
|
||
const line = lines[i];
|
||
const nextLine = lines[i + 1];
|
||
|
||
// 方法声明后如果是另一个方法声明,需要逗号
|
||
if (line.trim().endsWith('}') && !line.trim().endsWith('},') && !line.trim().endsWith('};')) {
|
||
// 检查下一行是否是新的方法声明(不是 if/for/while 等)
|
||
if (nextLine.match(/^\s+(async\s+)?\w+\([^)]*\)\s*{/)) {
|
||
if (!nextLine.includes('if (') && !nextLine.includes('for (') && !nextLine.includes('while (') && !nextLine.includes('switch (') && !nextLine.includes('catch (')) {
|
||
console.log(`Line ${i + 167}: Missing comma after method?`);
|
||
console.log(` ${line}`);
|
||
console.log(` Next: ${nextLine}`);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
// 2. 检查是否有未定义的函数调用
|
||
const definedFunctions = new Set();
|
||
for (let i = 0; i < lines.length; i++) {
|
||
const match = lines[i].match(/^\s+(async\s+)?(\w+)\s*\([^)]*\)\s*{/);
|
||
if (match && !['if', 'for', 'while', 'switch', 'catch'].includes(match[2])) {
|
||
definedFunctions.add(match[2]);
|
||
}
|
||
}
|
||
|
||
console.log('\n=== Checking for calls to undefined methods ===');
|
||
for (let i = 0; i < lines.length; i++) {
|
||
const line = lines[i];
|
||
// 检查 this.xxx() 调用
|
||
const calls = line.match(/this\.(\w+)\(/g);
|
||
if (calls) {
|
||
for (const call of calls) {
|
||
const methodName = call.replace('this.', '').replace('(', '');
|
||
if (!definedFunctions.has(methodName)) {
|
||
// 某些是内置方法或外部方法,不报错
|
||
const builtIn = ['$refs', '$emit', '$nextTick', '$set', '$delete', '$forceUpdate', '$mount', '$watch', '$on', '$once', '$off'];
|
||
if (!builtIn.some(b => methodName.includes(b))) {
|
||
console.log(`Line ${i + 167}: Possible undefined method call: this.${methodName}()`);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
} |