fix: auto-fix code issues (cron)
- 修复重复导入/字段 - 修复异常处理 - 修复PEP8格式问题 - 添加类型注解
This commit is contained in:
@@ -45,7 +45,7 @@ class CodeReviewer:
|
||||
def scan_file(self, file_path: Path) -> None:
|
||||
"""扫描单个文件"""
|
||||
try:
|
||||
with open(file_path, "r", encoding="utf-8") as f:
|
||||
with open(file_path, encoding="utf-8") as f:
|
||||
content = f.read()
|
||||
lines = content.split("\n")
|
||||
except Exception as e:
|
||||
@@ -82,12 +82,12 @@ class CodeReviewer:
|
||||
self._check_sensitive_info(content, lines, rel_path)
|
||||
|
||||
def _check_bare_exceptions(
|
||||
self, content: str, lines: list[str], file_path: str
|
||||
self, content: str, lines: list[str], file_path: str,
|
||||
) -> None:
|
||||
"""检查裸异常捕获"""
|
||||
for i, line in enumerate(lines, 1):
|
||||
if re.search(r"except\s*:\s*$", line.strip()) or re.search(
|
||||
r"except\s+Exception\s*:\s*$", line.strip()
|
||||
r"except\s+Exception\s*:\s*$", line.strip(),
|
||||
):
|
||||
# 跳过有注释说明的情况
|
||||
if "# noqa" in line or "# intentional" in line.lower():
|
||||
@@ -102,7 +102,7 @@ class CodeReviewer:
|
||||
self.issues.append(issue)
|
||||
|
||||
def _check_duplicate_imports(
|
||||
self, content: str, lines: list[str], file_path: str
|
||||
self, content: str, lines: list[str], file_path: str,
|
||||
) -> None:
|
||||
"""检查重复导入"""
|
||||
imports = {}
|
||||
@@ -126,7 +126,7 @@ class CodeReviewer:
|
||||
imports[key] = i
|
||||
|
||||
def _check_pep8_issues(
|
||||
self, content: str, lines: list[str], file_path: str
|
||||
self, content: str, lines: list[str], file_path: str,
|
||||
) -> None:
|
||||
"""检查 PEP8 问题"""
|
||||
for i, line in enumerate(lines, 1):
|
||||
@@ -144,7 +144,7 @@ class CodeReviewer:
|
||||
# 行尾空格
|
||||
if line.rstrip() != line:
|
||||
issue = CodeIssue(
|
||||
file_path, i, "trailing_whitespace", "行尾有空格", "info"
|
||||
file_path, i, "trailing_whitespace", "行尾有空格", "info",
|
||||
)
|
||||
self.issues.append(issue)
|
||||
|
||||
@@ -152,12 +152,12 @@ class CodeReviewer:
|
||||
if i > 1 and line.strip() == "" and lines[i - 2].strip() == "":
|
||||
if i < len(lines) and lines[i].strip() == "":
|
||||
issue = CodeIssue(
|
||||
file_path, i, "extra_blank_line", "多余的空行", "info"
|
||||
file_path, i, "extra_blank_line", "多余的空行", "info",
|
||||
)
|
||||
self.issues.append(issue)
|
||||
|
||||
def _check_unused_imports(
|
||||
self, content: str, lines: list[str], file_path: str
|
||||
self, content: str, lines: list[str], file_path: str,
|
||||
) -> None:
|
||||
"""检查未使用的导入"""
|
||||
try:
|
||||
@@ -187,12 +187,12 @@ class CodeReviewer:
|
||||
if name in ["annotations", "TYPE_CHECKING"]:
|
||||
continue
|
||||
issue = CodeIssue(
|
||||
file_path, lineno, "unused_import", f"未使用的导入: {name}", "info"
|
||||
file_path, lineno, "unused_import", f"未使用的导入: {name}", "info",
|
||||
)
|
||||
self.issues.append(issue)
|
||||
|
||||
def _check_string_formatting(
|
||||
self, content: str, lines: list[str], file_path: str
|
||||
self, content: str, lines: list[str], file_path: str,
|
||||
) -> None:
|
||||
"""检查混合字符串格式化"""
|
||||
has_fstring = False
|
||||
@@ -218,7 +218,7 @@ class CodeReviewer:
|
||||
self.issues.append(issue)
|
||||
|
||||
def _check_magic_numbers(
|
||||
self, content: str, lines: list[str], file_path: str
|
||||
self, content: str, lines: list[str], file_path: str,
|
||||
) -> None:
|
||||
"""检查魔法数字"""
|
||||
# 常见的魔法数字模式
|
||||
@@ -258,18 +258,18 @@ class CodeReviewer:
|
||||
]:
|
||||
continue
|
||||
issue = CodeIssue(
|
||||
file_path, i, "magic_number", f"{msg}: {num}", "info"
|
||||
file_path, i, "magic_number", f"{msg}: {num}", "info",
|
||||
)
|
||||
self.issues.append(issue)
|
||||
|
||||
def _check_sql_injection(
|
||||
self, content: str, lines: list[str], file_path: str
|
||||
self, content: str, lines: list[str], file_path: str,
|
||||
) -> None:
|
||||
"""检查 SQL 注入风险"""
|
||||
for i, line in enumerate(lines, 1):
|
||||
# 检查字符串拼接的 SQL
|
||||
if re.search(r'execute\s*\(\s*["\'].*%s', line) or re.search(
|
||||
r'execute\s*\(\s*f["\']', line
|
||||
r'execute\s*\(\s*f["\']', line,
|
||||
):
|
||||
if "?" not in line and "%s" in line:
|
||||
issue = CodeIssue(
|
||||
@@ -282,7 +282,7 @@ class CodeReviewer:
|
||||
self.manual_review_issues.append(issue)
|
||||
|
||||
def _check_cors_config(
|
||||
self, content: str, lines: list[str], file_path: str
|
||||
self, content: str, lines: list[str], file_path: str,
|
||||
) -> None:
|
||||
"""检查 CORS 配置"""
|
||||
for i, line in enumerate(lines, 1):
|
||||
@@ -297,7 +297,7 @@ class CodeReviewer:
|
||||
self.manual_review_issues.append(issue)
|
||||
|
||||
def _check_sensitive_info(
|
||||
self, content: str, lines: list[str], file_path: str
|
||||
self, content: str, lines: list[str], file_path: str,
|
||||
) -> None:
|
||||
"""检查敏感信息"""
|
||||
for i, line in enumerate(lines, 1):
|
||||
@@ -314,7 +314,7 @@ class CodeReviewer:
|
||||
):
|
||||
# 排除一些常见假阳性
|
||||
if not re.search(r'["\']\*+["\']', line) and not re.search(
|
||||
r'["\']<[^"\']*>["\']', line
|
||||
r'["\']<[^"\']*>["\']', line,
|
||||
):
|
||||
issue = CodeIssue(
|
||||
file_path,
|
||||
@@ -340,7 +340,7 @@ class CodeReviewer:
|
||||
continue
|
||||
|
||||
try:
|
||||
with open(full_path, "r", encoding="utf-8") as f:
|
||||
with open(full_path, encoding="utf-8") as f:
|
||||
content = f.read()
|
||||
lines = content.split("\n")
|
||||
except Exception as e:
|
||||
@@ -366,7 +366,7 @@ class CodeReviewer:
|
||||
# 将 except Exception: 改为 except Exception:
|
||||
if re.search(r"except\s*:\s*$", line.strip()):
|
||||
lines[idx] = line.replace(
|
||||
"except Exception:", "except Exception:"
|
||||
"except Exception:", "except Exception:",
|
||||
)
|
||||
issue.fixed = True
|
||||
elif re.search(r"except\s+Exception\s*:\s*$", line.strip()):
|
||||
@@ -395,7 +395,7 @@ class CodeReviewer:
|
||||
report.append(f"共修复 {len(self.fixed_issues)} 个问题:\n")
|
||||
for issue in self.fixed_issues:
|
||||
report.append(
|
||||
f"- ✅ {issue.file_path}:{issue.line_no} - {issue.issue_type}: {issue.message}"
|
||||
f"- ✅ {issue.file_path}:{issue.line_no} - {issue.issue_type}: {issue.message}",
|
||||
)
|
||||
else:
|
||||
report.append("无")
|
||||
@@ -405,7 +405,7 @@ class CodeReviewer:
|
||||
report.append(f"共发现 {len(self.manual_review_issues)} 个问题:\n")
|
||||
for issue in self.manual_review_issues:
|
||||
report.append(
|
||||
f"- ⚠️ {issue.file_path}:{issue.line_no} - {issue.issue_type}: {issue.message}"
|
||||
f"- ⚠️ {issue.file_path}:{issue.line_no} - {issue.issue_type}: {issue.message}",
|
||||
)
|
||||
else:
|
||||
report.append("无")
|
||||
@@ -415,7 +415,7 @@ class CodeReviewer:
|
||||
report.append(f"共发现 {len(self.issues)} 个问题:\n")
|
||||
for issue in self.issues:
|
||||
report.append(
|
||||
f"- 📝 {issue.file_path}:{issue.line_no} - {issue.issue_type}: {issue.message}"
|
||||
f"- 📝 {issue.file_path}:{issue.line_no} - {issue.issue_type}: {issue.message}",
|
||||
)
|
||||
else:
|
||||
report.append("无")
|
||||
|
||||
Reference in New Issue
Block a user