From 3ed1efbbe058db64928cf330031bf15b7df42048 Mon Sep 17 00:00:00 2001 From: "ry.yamafuji" Date: Thu, 4 Dec 2025 20:38:27 +0900 Subject: [PATCH] =?UTF-8?q?=E3=83=AC=E3=83=9D=E3=83=BC=E3=83=88=E3=81=AE?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/pyruff.yml | 2 +- lint-result.md | 15 +++++ scripts/generate_linter.py | 90 ++++++++++++++++++++++++++++ scripts/generate_linter.sh | 40 ------------- scripts/generate_linter_from_json.py | 49 --------------- 5 files changed, 106 insertions(+), 90 deletions(-) create mode 100644 lint-result.md create mode 100644 scripts/generate_linter.py delete mode 100644 scripts/generate_linter.sh delete mode 100644 scripts/generate_linter_from_json.py diff --git a/.github/workflows/pyruff.yml b/.github/workflows/pyruff.yml index a2bb9eb..6a11a11 100644 --- a/.github/workflows/pyruff.yml +++ b/.github/workflows/pyruff.yml @@ -42,7 +42,7 @@ jobs: - name: Generate Linter Report id: generateLinterReport run: | - python scripts/generate_linter_from_json.py + python scripts/generate_linter.py - name: pull_request message with Ruff Lint results diff --git a/lint-result.md b/lint-result.md new file mode 100644 index 0000000..c292e80 --- /dev/null +++ b/lint-result.md @@ -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列| diff --git a/scripts/generate_linter.py b/scripts/generate_linter.py new file mode 100644 index 0000000..93ea827 --- /dev/null +++ b/scripts/generate_linter.py @@ -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() diff --git a/scripts/generate_linter.sh b/scripts/generate_linter.sh deleted file mode 100644 index fbad27b..0000000 --- a/scripts/generate_linter.sh +++ /dev/null @@ -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 \ No newline at end of file diff --git a/scripts/generate_linter_from_json.py b/scripts/generate_linter_from_json.py deleted file mode 100644 index 9d3c076..0000000 --- a/scripts/generate_linter_from_json.py +++ /dev/null @@ -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() \ No newline at end of file