Skip to main content
Glama
detailed_analysis.py4.23 kB
# 更详细的代码分析 import ast import re from pathlib import Path def detailed_analysis(filepath): with open(filepath, 'r', encoding='utf-8') as f: lines = f.readlines() content = ''.join(lines) issues = [] # 1. 检查代码行长度 for i, line in enumerate(lines, 1): if len(line.rstrip()) > 100: issues.append(f'第{i}行过长: {len(line.rstrip())}字符') # 2. 检查TODO/FIXME等标记 for i, line in enumerate(lines, 1): if 'TODO' in line or 'FIXME' in line or 'XXX' in line or 'HACK' in line: issues.append(f'第{i}行包含未完成标记: {line.strip()}') # 3. 检查异常处理 try: tree = ast.parse(content) for node in ast.walk(tree): if isinstance(node, ast.ExceptHandler): if node.type is None: issues.append(f'第{node.lineno}行使用裸except语句') elif isinstance(node.type, ast.Name) and node.type.id == 'Exception': issues.append(f'第{node.lineno}行捕获过于宽泛的异常: Exception') except: pass # 4. 检查魔法数字 magic_numbers = re.findall(r'\b\d+\b', content) magic_numbers_count = len([n for n in magic_numbers if int(n) not in [0, 1, 2]]) if magic_numbers_count > 10: issues.append(f'过多魔法数字: {magic_numbers_count}个') # 5. 检查注释密度 comment_lines = sum(1 for line in lines if line.strip().startswith('#')) total_lines = len(lines) comment_ratio = comment_lines / total_lines if total_lines > 0 else 0 if comment_ratio < 0.1: issues.append(f'注释密度过低: {comment_ratio:.1%}') # 6. 检查导入语句 import_issues = [] for i, line in enumerate(lines, 1): if line.strip().startswith('import ') or line.strip().startswith('from '): if '*' in line: import_issues.append(f'第{i}行使用了通配符导入: {line.strip()}') issues.extend(import_issues) # 7. 检查函数和变量的命名 try: tree = ast.parse(content) for node in ast.walk(tree): if isinstance(node, ast.FunctionDef): if len(node.name) < 3: issues.append(f'第{node.lineno}行函数名过短: {node.name}') elif '_' not in node.name and not node.name[0].isupper(): # 检查是否是驼峰命名而非蛇形命名 if any(c.isupper() for c in node.name): issues.append(f'第{node.lineno}行函数命名不规范: {node.name} (应为蛇形命名)') except: pass print(f'文件: {filepath}') print(f'总行数: {len(lines)}') print(f'发现的问题数量: {len(issues)}') print() # 分类显示问题 categories = { '代码格式': [], '异常处理': [], '注释和文档': [], '导入问题': [], '命名规范': [], '其他问题': [] } for issue in issues: if '过长' in issue or '字符' in issue: categories['代码格式'].append(issue) elif '异常' in issue: categories['异常处理'].append(issue) elif '注释' in issue or '未完成标记' in issue: categories['注释和文档'].append(issue) elif '导入' in issue or '通配符' in issue: categories['导入问题'].append(issue) elif '命名' in issue: categories['命名规范'].append(issue) else: categories['其他问题'].append(issue) for category, cat_issues in categories.items(): if cat_issues: print(f'{category} ({len(cat_issues)}个):') for issue in cat_issues[:5]: # 只显示前5个 print(f' - {issue}') if len(cat_issues) > 5: print(f' ... 还有{len(cat_issues)-5}个问题') print() return len(issues) if __name__ == "__main__": issue_count = detailed_analysis('src/data_access/cache.py') print(f'总计发现 {issue_count} 个问题')

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kscz0000/Zhiwen-Assistant-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server