diff options
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; + } +} |
