Skip to content
Open
34 changes: 19 additions & 15 deletions src/analyzers/base_analyzer.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
from abc import ABC, abstractmethod
from typing import Optional
from typing import Optional, Dict, Any
from core.models.analysis_result import AnalysisResult
from core.analysis_context import AnalysisContext
from core.exceptions import AnalyzerError
from core.metrics import get_metric_metadata
import os


Expand Down Expand Up @@ -90,7 +91,6 @@ def _get_project_folders(self, target_path: str = None) -> list:
for item in os.listdir(target_path):
item_path = os.path.join(target_path, item)
if os.path.isdir(item_path):
# Check if folder contains Python files
has_python = any(
f.endswith('.py')
for f in os.listdir(item_path)
Expand All @@ -99,25 +99,29 @@ def _get_project_folders(self, target_path: str = None) -> list:
if has_python:
folders.append(item)

return folders or ['.'] # Current directory if no folders found
return folders or ['.']

@property
@abstractmethod
def analyzer_id(self) -> str:
"""
Unique identifier for this analyzer.

Returns:
Analyzer identifier string
"""
pass

def _create_result(
self,
score: float,
message_count: Dict[str, Any],
module_count: int,
details: Optional[Dict[str, Any]] = None
) -> AnalysisResult:
return AnalysisResult(
analyzer_id=self.analyzer_id,
score=score,
message_count=message_count,
module_count=module_count,
metric_metadata=get_metric_metadata(self.analyzer_id),
details=details
)

@abstractmethod
def analyze(self) -> AnalysisResult:
"""
Run the analysis.

Returns:
AnalysisResult with metrics and messages
"""
pass
2 changes: 2 additions & 0 deletions src/analyzers/factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,15 @@ def _get_analyzers(cls) -> Dict[str, Type[BaseAnalyzer]]:
from analyzers.radon_mi_analyzer import RadonMIAnalyzer
from analyzers.pipeline_analyzer import PipelineAnalyzer
from analyzers.fpc_analyzer import FPCAnalyzer
from analyzers.pfp_analyzer import PFPAnalyzer

cls._analyzers = {
"pylint": PyLintAnalyzer,
"radon_cc": RadonCCAnalyzer,
"radon_mi": RadonMIAnalyzer,
"pipeline": PipelineAnalyzer,
"fpc": FPCAnalyzer,
"pfp":PFPAnalyzer
}
return cls._analyzers

Expand Down
Loading