#!/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]}")