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
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
|
|
}
|