aboutsummaryrefslogtreecommitdiff
path: root/Zig.novaextension/Scripts/normalize-zig-issues.pl
diff options
context:
space:
mode:
authorDavid Czihak <git@dcz.at>2026-05-11 17:45:21 +0200
committerDavid Czihak <git@dcz.at>2026-05-11 17:45:21 +0200
commitbf0eacb506bc8125b0ab8d438913e54feba63391 (patch)
tree31b941c40ce3409022c68d0b413aa64dff905658 /Zig.novaextension/Scripts/normalize-zig-issues.pl
parent7d5fbaa5cae6b08f24c04fe58fbd049be49d8934 (diff)
Fix: Cache compiler errors
Cache compiler errors instead of passing them directly to Nova. This removes the possibility for outdated old errors not going away.
Diffstat (limited to 'Zig.novaextension/Scripts/normalize-zig-issues.pl')
-rw-r--r--Zig.novaextension/Scripts/normalize-zig-issues.pl40
1 files changed, 40 insertions, 0 deletions
diff --git a/Zig.novaextension/Scripts/normalize-zig-issues.pl b/Zig.novaextension/Scripts/normalize-zig-issues.pl
index b6ff328..17620a0 100644
--- a/Zig.novaextension/Scripts/normalize-zig-issues.pl
+++ b/Zig.novaextension/Scripts/normalize-zig-issues.pl
@@ -4,6 +4,7 @@ $| = 1;
my $base = $ENV{NOVA_ZIG_TASK_CWD} || $ENV{PWD} || "";
my %file_cache = ();
+my @collected_issues = ();
sub normalize_path {
my ($path) = @_;
@@ -83,6 +84,16 @@ while (my $line = <STDIN>) {
}
$line = "$normalized:$line_number:$column: $severity: $message";
+
+ if ($severity eq "error" || $severity eq "warning" || $severity eq "note") {
+ push @collected_issues, {
+ file => $normalized,
+ line => int($line_number),
+ column => int($column),
+ severity => $severity,
+ message => $message,
+ };
+ }
} elsif ($line =~ m{^([^:\n]+\.zig):(\d+):(\d+):}) {
my ($path, $line_number, $column) = ($1, $2, $3);
my $normalized = normalize_path($path);
@@ -91,3 +102,32 @@ while (my $line = <STDIN>) {
print $line, $newline;
}
+
+END {
+ my $issue_file = $ENV{NOVA_ZIG_ISSUE_FILE} or return;
+ sub _json_str {
+ my ($s) = @_;
+ $s =~ s/\\/\\\\/g;
+ $s =~ s/"/\\"/g;
+ $s =~ s/\n/\\n/g;
+ $s =~ s/\r/\\r/g;
+ $s =~ s/\t/\\t/g;
+ return qq("$s");
+ }
+ if (open my $fh, ">", $issue_file) {
+ print $fh "[";
+ my $first = 1;
+ for my $issue (@collected_issues) {
+ print $fh "," unless $first;
+ $first = 0;
+ printf $fh '{%s,%s,%s,%s,%s}',
+ '"file":' . _json_str($issue->{file}),
+ '"line":' . $issue->{line},
+ '"column":' . $issue->{column},
+ '"severity":' . _json_str($issue->{severity}),
+ '"message":' . _json_str($issue->{message});
+ }
+ print $fh "]";
+ close $fh;
+ }
+}