138 lines
5.0 KiB
Python
138 lines
5.0 KiB
Python
|
|
#!/usr/bin/env python3
|
|||
|
|
# -*- coding: utf-8 -*-
|
|||
|
|
|
|||
|
|
import re
|
|||
|
|
|
|||
|
|
print("开始系统性修复括号匹配问题...")
|
|||
|
|
|
|||
|
|
# 读取文件
|
|||
|
|
with open('src/mocks/resumeInterviewMock.js', 'r', encoding='utf-8') as f:
|
|||
|
|
content = f.read()
|
|||
|
|
|
|||
|
|
# 备份
|
|||
|
|
with open('src/mocks/resumeInterviewMock.js.backup_brackets', 'w', encoding='utf-8') as f:
|
|||
|
|
f.write(content)
|
|||
|
|
print("✅ 已创建备份: resumeInterviewMock.js.backup_brackets")
|
|||
|
|
|
|||
|
|
lines = content.split('\n')
|
|||
|
|
|
|||
|
|
# 分析括号匹配
|
|||
|
|
def check_brackets(start_line, end_line):
|
|||
|
|
"""检查指定范围内的括号匹配"""
|
|||
|
|
bracket_stack = []
|
|||
|
|
for i in range(start_line, min(end_line, len(lines))):
|
|||
|
|
line = lines[i]
|
|||
|
|
# 忽略字符串中的括号
|
|||
|
|
# 简单处理,移除字符串内容
|
|||
|
|
cleaned = re.sub(r'"[^"]*"', '""', line)
|
|||
|
|
cleaned = re.sub(r"'[^']*'", "''", cleaned)
|
|||
|
|
cleaned = re.sub(r'`[^`]*`', '``', cleaned)
|
|||
|
|
|
|||
|
|
for char in cleaned:
|
|||
|
|
if char in '{[(':
|
|||
|
|
bracket_stack.append((char, i))
|
|||
|
|
elif char in '}])':
|
|||
|
|
if not bracket_stack:
|
|||
|
|
print(f" 第{i+1}行: 多余的关闭括号 '{char}'")
|
|||
|
|
return False
|
|||
|
|
open_bracket, open_line = bracket_stack.pop()
|
|||
|
|
expected = {'(': ')', '[': ']', '{': '}'}
|
|||
|
|
if expected[open_bracket] != char:
|
|||
|
|
print(f" 第{i+1}行: 括号不匹配 '{open_bracket}'(第{open_line+1}行) vs '{char}'")
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
if bracket_stack:
|
|||
|
|
for bracket, line_num in bracket_stack:
|
|||
|
|
print(f" 第{line_num+1}行: 未关闭的括号 '{bracket}'")
|
|||
|
|
return False
|
|||
|
|
return True
|
|||
|
|
|
|||
|
|
# 查找关键位置
|
|||
|
|
print("\n查找关键结构位置...")
|
|||
|
|
industries_start = None
|
|||
|
|
industries_end = None
|
|||
|
|
resumeTemplates_start = None
|
|||
|
|
resumeTemplates_end = None
|
|||
|
|
myResume_start = None
|
|||
|
|
|
|||
|
|
for i, line in enumerate(lines):
|
|||
|
|
if 'const industries = [' in line:
|
|||
|
|
industries_start = i
|
|||
|
|
print(f"industries开始: 第{i+1}行")
|
|||
|
|
elif industries_start and not industries_end and line.strip() == '];':
|
|||
|
|
industries_end = i
|
|||
|
|
print(f"industries结束: 第{i+1}行")
|
|||
|
|
elif 'const resumeTemplates = {' in line:
|
|||
|
|
resumeTemplates_start = i
|
|||
|
|
print(f"resumeTemplates开始: 第{i+1}行")
|
|||
|
|
elif 'const myResume = {' in line:
|
|||
|
|
myResume_start = i
|
|||
|
|
print(f"myResume开始: 第{i+1}行")
|
|||
|
|
# resumeTemplates应该在myResume之前结束
|
|||
|
|
if resumeTemplates_start and not resumeTemplates_end:
|
|||
|
|
# 找到resumeTemplates的结束位置
|
|||
|
|
for j in range(myResume_start-1, resumeTemplates_start, -1):
|
|||
|
|
if lines[j].strip() == '};':
|
|||
|
|
resumeTemplates_end = j
|
|||
|
|
print(f"resumeTemplates结束: 第{j+1}行")
|
|||
|
|
break
|
|||
|
|
|
|||
|
|
# 检查各部分的括号匹配
|
|||
|
|
print("\n检查industries数组括号匹配:")
|
|||
|
|
if industries_start and industries_end:
|
|||
|
|
if check_brackets(industries_start, industries_end + 1):
|
|||
|
|
print(" ✅ industries数组括号匹配正确")
|
|||
|
|
|
|||
|
|
print("\n检查resumeTemplates对象括号匹配:")
|
|||
|
|
if resumeTemplates_start and resumeTemplates_end:
|
|||
|
|
if not check_brackets(resumeTemplates_start, resumeTemplates_end + 1):
|
|||
|
|
print(" ❌ resumeTemplates对象括号不匹配")
|
|||
|
|
|
|||
|
|
# 尝试修复
|
|||
|
|
print("\n尝试自动修复...")
|
|||
|
|
|
|||
|
|
# 检查第6514-6516行附近的问题
|
|||
|
|
for i in range(6513, min(6517, len(lines))):
|
|||
|
|
print(f" 第{i+1}行: {lines[i][:60]}")
|
|||
|
|
|
|||
|
|
# 如果第6516行是 "};",这应该是resumeTemplates的结束
|
|||
|
|
if len(lines) > 6515 and lines[6515].strip() == '};':
|
|||
|
|
print(" 找到resumeTemplates结束标记在第6516行")
|
|||
|
|
resumeTemplates_end = 6515
|
|||
|
|
|
|||
|
|
print("\n检查myResume对象括号匹配:")
|
|||
|
|
if myResume_start:
|
|||
|
|
# 找到myResume的结束
|
|||
|
|
myResume_end = None
|
|||
|
|
for i in range(myResume_start + 1, min(myResume_start + 50, len(lines))):
|
|||
|
|
if lines[i].strip() == '};':
|
|||
|
|
myResume_end = i
|
|||
|
|
print(f"myResume结束: 第{i+1}行")
|
|||
|
|
break
|
|||
|
|
|
|||
|
|
if myResume_end and check_brackets(myResume_start, myResume_end + 1):
|
|||
|
|
print(" ✅ myResume对象括号匹配正确")
|
|||
|
|
|
|||
|
|
# 验证语法
|
|||
|
|
print("\n验证修复后的语法...")
|
|||
|
|
import subprocess
|
|||
|
|
result = subprocess.run(['node', '-c', 'src/mocks/resumeInterviewMock.js'],
|
|||
|
|
capture_output=True, text=True)
|
|||
|
|
|
|||
|
|
if result.returncode == 0:
|
|||
|
|
print("✅ 语法验证通过!")
|
|||
|
|
else:
|
|||
|
|
print(f"❌ 仍有语法错误:")
|
|||
|
|
# 只显示错误的第一行
|
|||
|
|
error_lines = result.stderr.split('\n')
|
|||
|
|
for line in error_lines[:5]:
|
|||
|
|
print(f" {line}")
|
|||
|
|
|
|||
|
|
# 提取错误行号
|
|||
|
|
match = re.search(r':(\d+)', result.stderr)
|
|||
|
|
if match:
|
|||
|
|
error_line = int(match.group(1))
|
|||
|
|
print(f"\n错误发生在第 {error_line} 行附近:")
|
|||
|
|
for i in range(max(0, error_line-3), min(len(lines), error_line+3)):
|
|||
|
|
prefix = ">>> " if i == error_line-1 else " "
|
|||
|
|
print(f"{prefix}{i+1}: {lines[i][:80]}")
|