Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 1 addition & 73 deletions analyzer.py
Original file line number Diff line number Diff line change
@@ -1,92 +1,20 @@
from pathlib import Path
import ast
import json
import argparse

from analysis.lines import analyze_lines
from analysis.ast_analysis import analyze_ast
from analysis.quality import (
analyze_quality,
calculate_health_score,
get_health_rating,
)

from reporting.terminal import (
generate_codebase_summary,
display_line_metrics,
display_structure_metrics,
display_control_flow_metrics,
display_operation_metrics,
display_function_analysis_metrics,
display_quality_issues_metrics,
display_health_score_metrics,
generate_report,
)


def generate_json_report(results, output_file="codebase_report.json"):
if not results:
print("No valid Python files found.")
return

total_files = len(results)
total_lines = sum(result["total_lines"] for result in results)
total_functions = sum(result["functions"] for result in results)
total_classes = sum(result["classes"] for result in results)
total_todos = sum(result["todos"] for result in results)
total_fixmes = sum(result["fixmes"] for result in results)

average_health_score = (
sum(result["health_score"] for result in results) / total_files
)

report = {
"summary": {
"python_files": total_files,
"total_lines": total_lines,
"total_functions": total_functions,
"total_classes": total_classes,
"total_todos": total_todos,
"total_fixmes": total_fixmes,
"average_health_score": round(average_health_score, 1),
"rating": get_health_rating(average_health_score),
},
"files": [],
}

for result in results:
report["files"].append(
{
"file": result["file"].name,
"total_lines": result["total_lines"],
"code_lines": result["code_lines"],
"blank_lines": result["blank_lines"],
"comment_lines": result["comment_lines"],
"functions": result["functions"],
"classes": result["classes"],
"imports": result["imports"],
"import_from": result["import_from"],
"if_statements": result["if_statements"],
"for_loops": result["for_loops"],
"while_loops": result["while_loops"],
"try_blocks": result["try_blocks"],
"function_calls": result["function_calls"],
"return_statements": result["return_statements"],
"exceptions_raised": result["exceptions_raised"],
"assertions": result["assertions"],
"todos": result["todos"],
"fixmes": result["fixmes"],
"health_score": result["health_score"],
"rating": get_health_rating(result["health_score"]),
"issues": result["issues"],
"functions_details": result["function_details"],
}
)

with open(output_file, "w", encoding="utf-8") as f:
json.dump(report, f, indent=4)

print(f"JSON report saved to: {output_file}")
from reporting.json_report import generate_json_report


def main():
Expand Down
68 changes: 68 additions & 0 deletions reporting/json_report.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
import json

from analysis.quality import get_health_rating


def generate_json_report(results, output_file="codebase_report.json"):
if not results:
print("No valid Python files found.")
return

total_files = len(results)
total_lines = sum(result["total_lines"] for result in results)
total_functions = sum(result["functions"] for result in results)
total_classes = sum(result["classes"] for result in results)
total_todos = sum(result["todos"] for result in results)
total_fixmes = sum(result["fixmes"] for result in results)

average_health_score = (
sum(result["health_score"] for result in results) / total_files
)

report = {
"summary": {
"python_files": total_files,
"total_lines": total_lines,
"total_functions": total_functions,
"total_classes": total_classes,
"total_todos": total_todos,
"total_fixmes": total_fixmes,
"average_health_score": round(average_health_score, 1),
"rating": get_health_rating(average_health_score),
},
"files": [],
}

for result in results:
report["files"].append(
{
"file": result["file"].name,
"total_lines": result["total_lines"],
"code_lines": result["code_lines"],
"blank_lines": result["blank_lines"],
"comment_lines": result["comment_lines"],
"functions": result["functions"],
"classes": result["classes"],
"imports": result["imports"],
"import_from": result["import_from"],
"if_statements": result["if_statements"],
"for_loops": result["for_loops"],
"while_loops": result["while_loops"],
"try_blocks": result["try_blocks"],
"function_calls": result["function_calls"],
"return_statements": result["return_statements"],
"exceptions_raised": result["exceptions_raised"],
"assertions": result["assertions"],
"todos": result["todos"],
"fixmes": result["fixmes"],
"health_score": result["health_score"],
"rating": get_health_rating(result["health_score"]),
"issues": result["issues"],
"functions_details": result["function_details"],
}
)

with open(output_file, "w", encoding="utf-8") as f:
json.dump(report, f, indent=4)

print(f"JSON report saved to: {output_file}")
6 changes: 4 additions & 2 deletions test_analyzer.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,7 @@
analyze_lines,
analyze_quality,
calculate_health_score,
get_health_rating,
parse_python_file,
display_quality_issues_metrics,
main,
)

Expand All @@ -32,6 +30,10 @@

from analysis.lines import count_todos_and_fixmes

from analysis.quality import get_health_rating

from reporting.terminal import display_quality_issues_metrics


# Helper function to capture stdout using a temporary file
def capture_output(func, *args, **kwargs):
Expand Down
Loading