レポートの修正

This commit is contained in:
ry.yamafuji 2025-12-04 20:38:27 +09:00
parent f2961daec1
commit 3ed1efbbe0
5 changed files with 106 additions and 90 deletions

View File

@ -42,7 +42,7 @@ jobs:
- name: Generate Linter Report - name: Generate Linter Report
id: generateLinterReport id: generateLinterReport
run: | run: |
python scripts/generate_linter_from_json.py python scripts/generate_linter.py
- name: pull_request message with Ruff Lint results - name: pull_request message with Ruff Lint results

15
lint-result.md Normal file
View File

@ -0,0 +1,15 @@
## Linter(リンタ)レビュー
以下の指摘事項があります。コードを見直してください。
総数:6個
### 指摘事項一覧
|コード|重要性|項目|ファイル名|行数|
|---|---|---|---|---|
|W291|🟢低|行末に不要な空白があります。|examples/example.py|14行目27列 〜 14行目28列|
|W291|🟢低|行末に不要な空白があります。|scripts/generate_coverage.py|5行目23列 〜 5行目24列|
|E501|🟢低|行が長すぎます。79文字以内にしてください。|scripts/generate_coverage.py|38行目89列 〜 38行目107列|
|W291|🟢低|行末に不要な空白があります。|scripts/generate_linter_from_json.py|4行目23列 〜 4行目24列|
|W291|🟢低|行末に不要な空白があります。|scripts/generate_linter_from_json.py|25行目31列 〜 25行目39列|
|W292|🟢低|ファイルの最後に改行がありません。|scripts/generate_linter_from_json.py|53行目42列 〜 53行目42列|

View File

@ -0,0 +1,90 @@
import json
from pathlib import Path
PROJECT_NAME = Path(".").resolve().name
print(f"Project Name: {PROJECT_NAME}")
CODE_MAP = {
"W291": {"message": "行末に不要な空白があります。", "severity": "🟢低"},
"W292": {"message": "ファイルの最後に改行がありません。", "severity": "🟢低"} ,
"E501": {
"message": "行が長すぎます。79文字以内にしてください。",
"severity": "🟢低",
},
}
def get_relative_path(absolute_path: str) -> str:
"""
絶対パスからプロジェクトルートからの相対パスを取得
"""
try:
index = absolute_path.index(PROJECT_NAME)
return absolute_path[index + len(PROJECT_NAME) + 1 :]
except ValueError:
return absolute_path
class GenerateLinter:
def __init__(self, json_file="ruff-report.json", output_file="lint-result.json"):
"""
初期化
"""
self.json_file = json_file
self.output_file = output_file
def _genarate_lint_report(self, data: list) -> str:
_str = ""
if not data:
_str += "## Linter(リンタ)指摘事項なし\n\n"
_str += "素晴らしいコードです!🎉\n"
return _str
_str += "## Linter(リンタ)レビュー\n\n"
_str += "以下の指摘事項があります。コードを見直してください。\n\n"
_str += f"総数:{len(data)}\n"
_str += "### 指摘事項一覧\n"
_str += "|コード|重要性|項目|ファイル名|行数|\n"
_str += "|---|---|---|---|---|\n"
for issue in data:
code = issue.get("code", "-")
severity = (
CODE_MAP.get(code, {}).get("severity", "❓不明")
if code != "-"
else "-"
)
message = CODE_MAP.get(code, {}).get("message", issue.get("message", "-"))
filename = get_relative_path(issue.get("filename", "-"))
line = ""
if issue.get("location") and issue["location"].get("row"):
line = f"{issue['location']['row']}行目"
if issue["location"].get("column"):
line += f"{issue['location']['column']}"
if issue.get("end_location"):
if issue["end_location"].get("row"):
line += f"{issue['end_location']['row']}行目"
if issue["end_location"].get("column"):
line += f"{issue['end_location']['column']}"
_str += f"|{code}|{severity}|{message}|{filename}|{line}|\n"
return _str
def generate_lint_report_json(self):
with open(self.json_file, "r") as f:
data = json.load(f)
with open(self.output_file, "w") as f:
report_body = self._genarate_lint_report(data)
f.write(report_body)
# report = {"body": self._genarate_lint_report(data)}
# json.dump(report, f, ensure_ascii=False, indent=4)
print(f"Linter report generated: {self.output_file}")
if __name__ == "__main__":
generator = GenerateLinter()
generator.generate_lint_report_json()

View File

@ -1,40 +0,0 @@
#!/usr/bin/env bash
# scripts/genarater_linter.sh
set -u # 未定義変数の利用で落とす(-e は付けない)
RUFF_STATUS=0
OUTPUT_MD=${1:-lint-result.md}
{
echo "## 🧹 Ruff Lint Result"
echo
echo "### Command"
echo '```bash'
echo '$ ruff check .'
echo '```'
echo
echo "### Output"
echo '```text'
# ruff がエラーになってもスクリプト自体は落とさず、ステータスだけ拾う
ruff check . || RUFF_STATUS=$?
echo '```'
echo
echo "### Summary"
echo
echo "| Tool | Status |"
echo "|------|--------|"
if [ "$RUFF_STATUS" -eq 0 ]; then
echo "| ruff | ✅ OK |"
else
echo "| ruff | ❌ Error (exit $RUFF_STATUS) |"
fi
} | tee "$OUTPUT_MD"
# GitHub Actions から呼ばれた場合は、出力変数としてステータスを渡す
if [ -n "${GITHUB_OUTPUT:-}" ]; then
echo "ruff_status=$RUFF_STATUS" >> "$GITHUB_OUTPUT"
fi
# ここでは常に 0 で終了(失敗にするかどうかはワークフロー側で制御)
exit 0

View File

@ -1,49 +0,0 @@
import json
class GenerateLinter:
def __init__(self,
json_file="ruff-report.json",
output_file="lint-result.json"):
"""
初期化
"""
self.json_file = json_file
self.output_file = output_file
def _genarate_lint_report(self, data: list) -> str:
_str = ""
if not data:
_str += "## Linter(リンタ)指摘事項なし\n\n"
_str += "素晴らしいコードです!🎉\n"
return _str
_str += "## Linter(リンタ)レビュー\n\n"
_str += "以下の指摘事項があります。コードを見直してください。\n\n"
_str += "### 指摘事項一覧\n"
_str += "|コード|重要性|ファイル名|行数|課題内容\n"
_str += "|---|---|---|---|---|\n"
for issue in data:
code = issue.get("code", "-")
severity = issue.get("severity", "-")
filename = issue.get("filename", "-")
line = issue.get("location", {}).get("line", "-")
message = issue.get("message", "-")
_str += f"|{code}|{severity}|{filename}|{line}|{message}|\n"
return _str
def generate_lint_report_json(self):
with open(self.json_file, "r") as f:
data = json.load(f)
with open(self.output_file, "w") as f:
report = {"body": self._genarate_lint_report(data)}
json.dump(report, f, ensure_ascii=False, indent=4)
print(f"Linter report generated: {self.output_file}")
if __name__ == "__main__":
generator = GenerateLinter()
generator.generate_lint_report_json()