| ... | ... | @@ -429,25 +429,23 @@ pub const AllErrors = struct { |
| 429 | 429 | try stderr.print(" ({d} times)\n", .{src.count}); |
| 430 | 430 | } |
| 431 | 431 | ttyconf.setColor(stderr, .Reset); |
| 432 | | if (ttyconf != .no_color) { |
| 433 | | if (src.source_line) |line| { |
| 434 | | for (line) |b| switch (b) { |
| 435 | | '\t' => try stderr.writeByte(' '), |
| 436 | | else => try stderr.writeByte(b), |
| 437 | | }; |
| 438 | | try stderr.writeByte('\n'); |
| 439 | | // TODO basic unicode code point monospace width |
| 440 | | const before_caret = src.span.main - src.span.start; |
| 441 | | // -1 since span.main includes the caret |
| 442 | | const after_caret = src.span.end - src.span.main -| 1; |
| 443 | | try stderr.writeByteNTimes(' ', src.column - before_caret); |
| 444 | | ttyconf.setColor(stderr, .Green); |
| 445 | | try stderr.writeByteNTimes('~', before_caret); |
| 446 | | try stderr.writeByte('^'); |
| 447 | | try stderr.writeByteNTimes('~', after_caret); |
| 448 | | try stderr.writeByte('\n'); |
| 449 | | ttyconf.setColor(stderr, .Reset); |
| 450 | | } |
| 432 | if (src.source_line) |line| { |
| 433 | for (line) |b| switch (b) { |
| 434 | '\t' => try stderr.writeByte(' '), |
| 435 | else => try stderr.writeByte(b), |
| 436 | }; |
| 437 | try stderr.writeByte('\n'); |
| 438 | // TODO basic unicode code point monospace width |
| 439 | const before_caret = src.span.main - src.span.start; |
| 440 | // -1 since span.main includes the caret |
| 441 | const after_caret = src.span.end - src.span.main -| 1; |
| 442 | try stderr.writeByteNTimes(' ', src.column - before_caret); |
| 443 | ttyconf.setColor(stderr, .Green); |
| 444 | try stderr.writeByteNTimes('~', before_caret); |
| 445 | try stderr.writeByte('^'); |
| 446 | try stderr.writeByteNTimes('~', after_caret); |
| 447 | try stderr.writeByte('\n'); |
| 448 | ttyconf.setColor(stderr, .Reset); |
| 451 | 449 | } |
| 452 | 450 | for (src.notes) |note| { |
| 453 | 451 | try note.renderToWriter(ttyconf, stderr, "note", .Cyan, indent); |