@@ -30090,24 +30090,46 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
3009030090exports.generateRuffSection = generateRuffSection;
3009130091exports.getRuffStatus = getRuffStatus;
3009230092const utils_1 = __nccwpck_require__(8541);
30093+ function formatFixInfo(issue) {
30094+ if (!issue.fix)
30095+ return [];
30096+ const lines = [];
30097+ const applicabilityIcon = issue.fix.applicability === "safe" ? "✅" : "⚠️";
30098+ lines.push(` - ${applicabilityIcon} **Fix available** (${issue.fix.applicability})`);
30099+ if (issue.fix.message) {
30100+ lines.push(` - ${issue.fix.message}`);
30101+ }
30102+ if (issue.fix.edits && issue.fix.edits.length > 0) {
30103+ const edit = issue.fix.edits[0];
30104+ lines.push(" ```python");
30105+ lines.push(edit.content);
30106+ lines.push(" ```");
30107+ }
30108+ return lines;
30109+ }
3009330110function generateRuffSection(ruff, context) {
3009430111 if (!ruff)
3009530112 return "";
3009630113 const lines = [];
3009730114 lines.push("## 🔧 Ruff Linting Results\n");
3009830115 lines.push(`- **Total Issues**: ${ruff.totalIssues}`);
3009930116 lines.push(`- **Files Affected**: ${ruff.filesAffected}\n`);
30117+ if (ruff.fixableCount > 0) {
30118+ lines.push(`- **Auto-fixable**: 🔧 ${ruff.fixableCount} ${(0, utils_1.pluralize)(ruff.fixableCount, "issue")}`);
30119+ }
30120+ lines.push("");
3010030121 if (Object.keys(ruff.issuesByCode).length > 0) {
3010130122 lines.push("### Issues by Type\n");
3010230123 const sortedIssues = Object.entries(ruff.issuesByCode)
3010330124 .sort((a, b) => b[1].count - a[1].count)
3010430125 .slice(0, 5);
3010530126 for (const [code, info] of sortedIssues) {
30106- const pluralS = info.count !== 1 ? "s" : "";
30107- const occurrences = `${info.count} occurrence${pluralS}`;
30127+ const occurrences = `${info.count} ${(0, utils_1.pluralize)(info.count, "occurrence")}`;
3010830128 const url = info.instances[0]?.url;
3010930129 const codeLink = url ? `[${code}](${url})` : `**${code}**`;
30110- lines.push(`#### ${codeLink} (${occurrences})`);
30130+ const safeFixableInCode = info.instances.filter((i) => i.fix && i.fix.applicability === "safe").length;
30131+ const fixableNote = safeFixableInCode > 0 ? ` - ${safeFixableInCode} fixable` : "";
30132+ lines.push(`#### ${codeLink} (${occurrences}${fixableNote})`);
3011130133 lines.push(`${info.message}\n`);
3011230134 // Show up to 3 instances with file locations
3011330135 const maxInstances = 3;
@@ -30118,11 +30140,12 @@ function generateRuffSection(ruff, context) {
3011830140 const lineRange = startRow === endRow ? `${startRow}` : `${startRow}-${endRow}`;
3011930141 const fileLink = (0, utils_1.createGitHubFileLink)(instance.fileName, lineRange, context);
3012030142 lines.push(`- ${fileLink}`);
30143+ const fixInfo = formatFixInfo(instance);
30144+ lines.push(...fixInfo);
3012130145 }
3012230146 if (info.instances.length > maxInstances) {
3012330147 const remaining = info.instances.length - maxInstances;
30124- const pluralS = remaining !== 1 ? "s" : "";
30125- lines.push(`- _...and ${remaining} more instance${pluralS}_`);
30148+ lines.push(`- _...and ${remaining} more instance${(0, utils_1.pluralize)(remaining, "instance")}_`);
3012630149 }
3012730150 lines.push("");
3012830151 }
@@ -30133,8 +30156,7 @@ function getRuffStatus(ruff) {
3013330156 if (!ruff)
3013430157 return { details: "", status: "" };
3013530158 const status = ruff.totalIssues === 0 ? "✅ PASSED" : "⚠️ ISSUES FOUND";
30136- const pluralS = ruff.totalIssues !== 1 ? "s" : "";
30137- const details = `${ruff.totalIssues} linting issue${pluralS}`;
30159+ const details = `${ruff.totalIssues} linting issue${(0, utils_1.pluralize)(ruff.totalIssues, "issue")}`;
3013830160 return { details, status };
3013930161}
3014030162
@@ -30718,6 +30740,7 @@ const base_1 = __nccwpck_require__(7651);
3071830740function parseRuffData(data) {
3071930741 const issuesByCode = {};
3072030742 const filesWithIssues = new Set();
30743+ let fixableCount = 0;
3072130744 for (const issue of data) {
3072230745 const code = issue.code || "UNKNOWN";
3072330746 if (!issuesByCode[code]) {
@@ -30729,21 +30752,26 @@ function parseRuffData(data) {
3072930752 }
3073030753 issuesByCode[code].count++;
3073130754 filesWithIssues.add(issue.filename || "");
30755+ if (issue.fix && issue.fix.applicability === "safe") {
30756+ fixableCount++;
30757+ }
3073230758 issuesByCode[code].instances.push({
3073330759 endLocation: issue.end_location || { column: 0, row: 0 },
3073430760 fileName: issue.filename || "",
3073530761 fix: issue.fix || null,
3073630762 location: issue.location || { column: 0, row: 0 },
3073730763 message: issue.message || "",
30764+ noqa_row: issue.noqa_row,
3073830765 url: issue.url || undefined,
3073930766 });
3074030767 }
3074130768 const summary = {
3074230769 filesAffected: filesWithIssues.size,
30770+ fixableCount,
3074330771 issuesByCode,
3074430772 totalIssues: data.length,
3074530773 };
30746- core.info(`✅ Parsed ruff results: ${summary.totalIssues} issues found`);
30774+ core.info(`✅ Parsed ruff results: ${summary.totalIssues} issues found (${fixableCount} safe fixes available) `);
3074730775 return summary;
3074830776}
3074930777async function parseRuff(filepath) {
0 commit comments