You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

61 lines
2.0 KiB

"""
代码分析服务
"""
import os
import json
import subprocess
from typing import List, Dict, Any
from app.core.analyzers.base_analyzer import BaseAnalyzer
from app.core.analyzers.python_analyzer import PythonAnalyzer
from app.core.analyzers.cpp_analyzer import CppAnalyzer
from app.core.analyzers.javascript_analyzer import JavaScriptAnalyzer
from app.services.ai_service import AIService
class AnalyzerService:
"""代码分析服务"""
def __init__(self):
self.analyzers = {
'python': PythonAnalyzer(),
'cpp': CppAnalyzer(),
'javascript': JavaScriptAnalyzer(),
}
self.ai_service = AIService()
async def analyze_project(self, project_path: str, language: str, config: Dict[str, Any] = None) -> List[Dict[str, Any]]:
"""分析项目代码"""
if language not in self.analyzers:
raise ValueError(f"不支持的语言: {language}")
analyzer = self.analyzers[language]
# 运行静态分析
static_results = await analyzer.analyze(project_path, config)
# AI增强分析
ai_enhanced_results = []
for result in static_results:
# 对每个漏洞进行AI增强
ai_enhancement = await self.ai_service.enhance_vulnerability(result)
result.update(ai_enhancement)
ai_enhanced_results.append(result)
return ai_enhanced_results
def get_supported_languages(self) -> List[str]:
"""获取支持的语言列表"""
return list(self.analyzers.keys())
def get_analyzer_info(self, language: str) -> Dict[str, Any]:
"""获取分析器信息"""
if language not in self.analyzers:
return None
analyzer = self.analyzers[language]
return {
'name': analyzer.name,
'version': analyzer.version,
'supported_extensions': analyzer.supported_extensions,
'description': analyzer.description
}