diff --git a/analyzer.py b/analyzer.py index 5aa43f9..2e54dcf 100644 --- a/analyzer.py +++ b/analyzer.py @@ -1,6 +1,5 @@ from pathlib import Path import ast -import json import argparse from analysis.lines import analyze_lines @@ -8,85 +7,14 @@ 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(): diff --git a/reporting/json_report.py b/reporting/json_report.py new file mode 100644 index 0000000..8a8fb6f --- /dev/null +++ b/reporting/json_report.py @@ -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}") \ No newline at end of file diff --git a/test_analyzer.py b/test_analyzer.py index f745aa8..d086e39 100644 --- a/test_analyzer.py +++ b/test_analyzer.py @@ -10,9 +10,7 @@ analyze_lines, analyze_quality, calculate_health_score, - get_health_rating, parse_python_file, - display_quality_issues_metrics, main, ) @@ -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):