+
+
Input
+
+
+
+
+
+
+
+
+ {showLineNumbers && renderLineNumbers()}
+
+
+
+
+
+
+
+
Validation Results
+
+
+
+
+
+
+ {/* Validation Status */}
+ {isValid !== null && (
+
+ {isValid ? (
+ <>
+
+ Valid Makefile
+ >
+ ) : (
+ <>
+
+
+ {issues.filter((i) => i.type === "error").length} error(s) found
+
+ >
+ )}
+
+ )}
+
+ {/* Issues View */}
+ {viewMode === "issues" && (
+
+ {issues.length === 0 ? (
+
+ {input.trim() ? (
+
+ ) : (
+
Enter a Makefile to validate
+ )}
+
+ ) : (
+
+ {issues.map((issue, idx) => (
+
+ {issue.type === "error" ? (
+
+ ) : (
+
+ )}
+
+
+
+ Line {issue.line}
+
+
+ {issue.type}
+
+
+
{issue.message}
+
+
+ ))}
+
+ )}
+
+ )}
+
+ {/* Structure View */}
+ {viewMode === "structure" && (
+
+ {rules.length === 0 ? (
+
+ {input.trim() ? (
+
No rules found in Makefile
+ ) : (
+
Enter a Makefile to analyze structure
+ )}
+
+ ) : (
+
+
+ Found {rules.length} rule{rules.length !== 1 ? "s" : ""}
+
+ {rules.map((rule, idx) => (
+
+
+
+ {rule.target}
+
+
+ Line {rule.lineNumber}
+
+
+ {rule.dependencies.length > 0 && (
+
+
+ Dependencies:
+
+
+ {rule.dependencies.map((dep, depIdx) => (
+
+ {dep}
+
+ ))}
+
+
+ )}
+ {rule.recipes.length > 0 && (
+
+
+ Recipes:
+
+
+ {rule.recipes.map((recipe, recipeIdx) => (
+
+ {recipe}
+
+ ))}
+
+
+ )}
+
+ ))}
+
+ )}
+
+ )}
+