diff options
| author | David Czihak <git@dcz.at> | 2026-05-11 17:45:21 +0200 |
|---|---|---|
| committer | David Czihak <git@dcz.at> | 2026-05-11 17:45:21 +0200 |
| commit | bf0eacb506bc8125b0ab8d438913e54feba63391 (patch) | |
| tree | 31b941c40ce3409022c68d0b413aa64dff905658 /Zig.novaextension/Scripts/normalize-zig-issues.pl | |
| parent | 7d5fbaa5cae6b08f24c04fe58fbd049be49d8934 (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.pl | 40 |
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; + } +} |
