# python/03-code-review.py"""Code review standards and checklist"""fromtypingimportList,Dict,Any,OptionalfromdataclassesimportdataclassfromenumimportEnumclassReviewStatus(Enum):"""Review status enumeration"""PENDING="pending"APPROVED="approved"CHANGES_REQUESTED="changes_requested"COMMENTED="commented"@dataclassclassCodeReviewItem:"""Code review item"""category:strdescription:strseverity:str# "critical", "major", "minor", "suggestion"line_number:Optional[int]=Nonefile_path:Optional[str]=NoneclassCodeReviewChecklist:"""Code review checklist and standards"""def__init__(self):self.checklist_items=self._create_checklist()def_create_checklist(self)->List[CodeReviewItem]:"""Create comprehensive code review checklist"""return[# Code QualityCodeReviewItem(category="Code Quality",description="Code follows PEP 8 style guidelines",severity="major"),CodeReviewItem(category="Code Quality",description="Functions and classes have appropriate docstrings",severity="major"),CodeReviewItem(category="Code Quality",description="Variable and function names are descriptive",severity="major"),CodeReviewItem(category="Code Quality",description="Code is properly formatted with Black",severity="major"),CodeReviewItem(category="Code Quality",description="No unused imports or variables",severity="minor"),# Type HintsCodeReviewItem(category="Type Hints",description="All function parameters have type hints",severity="major"),CodeReviewItem(category="Type Hints",description="Function return types are specified",severity="major"),CodeReviewItem(category="Type Hints",description="Type hints are accurate and specific",severity="major"),# TestingCodeReviewItem(category="Testing",description="New code has corresponding tests",severity="critical"),CodeReviewItem(category="Testing",description="Tests cover edge cases and error conditions",severity="major"),CodeReviewItem(category="Testing",description="Test names are descriptive and follow naming conventions",severity="minor"),CodeReviewItem(category="Testing",description="Tests are independent and can run in any order",severity="major"),# SecurityCodeReviewItem(category="Security",description="No hardcoded secrets or credentials",severity="critical"),CodeReviewItem(category="Security",description="Input validation is implemented where needed",severity="major"),CodeReviewItem(category="Security",description="SQL injection prevention measures are in place",severity="critical"),CodeReviewItem(category="Security",description="Authentication and authorization are properly implemented",severity="critical"),# PerformanceCodeReviewItem(category="Performance",description="No obvious performance bottlenecks",severity="major"),CodeReviewItem(category="Performance",description="Database queries are optimized",severity="major"),CodeReviewItem(category="Performance",description="Memory usage is reasonable",severity="major"),# DocumentationCodeReviewItem(category="Documentation",description="README is updated if needed",severity="minor"),CodeReviewItem(category="Documentation",description="API documentation is updated",severity="minor"),CodeReviewItem(category="Documentation",description="Code comments explain complex logic",severity="minor"),# ArchitectureCodeReviewItem(category="Architecture",description="Code follows established patterns and conventions",severity="major"),CodeReviewItem(category="Architecture",description="Separation of concerns is maintained",severity="major"),CodeReviewItem(category="Architecture",description="Dependencies are minimal and justified",severity="minor")]defreview_code(self,file_path:str,code_content:str)->List[CodeReviewItem]:"""Review code against checklist"""issues=[]# Basic checksif"TODO"incode_contentor"FIXME"incode_content:issues.append(CodeReviewItem(category="Code Quality",description="Code contains TODO or FIXME comments",severity="minor",file_path=file_path))if"print("incode_content:issues.append(CodeReviewItem(category="Code Quality",description="Code contains print statements (use logging instead)",severity="minor",file_path=file_path))if"import *"incode_content:issues.append(CodeReviewItem(category="Code Quality",description="Code uses wildcard imports",severity="major",file_path=file_path))returnissuesdefgenerate_review_report(self,issues:List[CodeReviewItem])->Dict[str,Any]:"""Generate code review report"""report={"total_issues":len(issues),"critical_issues":len([iforiinissuesifi.severity=="critical"]),"major_issues":len([iforiinissuesifi.severity=="major"]),"minor_issues":len([iforiinissuesifi.severity=="minor"]),"suggestions":len([iforiinissuesifi.severity=="suggestion"]),"issues_by_category":{},"issues_by_severity":{}}# Group by categoryforissueinissues:ifissue.categorynotinreport["issues_by_category"]:report["issues_by_category"][issue.category]=[]report["issues_by_category"][issue.category].append(issue)# Group by severityforissueinissues:ifissue.severitynotinreport["issues_by_severity"]:report["issues_by_severity"][issue.severity]=[]report["issues_by_severity"][issue.severity].append(issue)returnreport# Usage exampledefperform_code_review(file_path:str,code_content:str):"""Perform code review"""reviewer=CodeReviewChecklist()# Review codeissues=reviewer.review_code(file_path,code_content)# Generate reportreport=reviewer.generate_review_report(issues)print(f"Code review completed for {file_path}")print(f"Total issues: {report['total_issues']}")print(f"Critical: {report['critical_issues']}, Major: {report['major_issues']}")returnreport