|
1 | | -import 'dart:convert'; |
2 | 1 | import 'dart:io'; |
3 | 2 |
|
4 | 3 | import 'package:ansicolor/ansicolor.dart'; |
@@ -27,44 +26,55 @@ ansiFormat( |
27 | 26 | } |
28 | 27 |
|
29 | 28 | printFile(TextSpan fileSpan, LcovRecord node, String fullPath) { |
30 | | - final sb = StringBuffer(); |
31 | | - SpanVisitor( |
32 | | - (span, depth) { |
33 | | - if (span.text == null) return; |
34 | | - var text = span.text!; |
35 | | - |
36 | | - final argb = span.style?.foreground.argb ?? 0xFFFFFFFF; |
37 | | - final pen = ansiScopes[argb] ??= AnsiPen() |
38 | | - ..rgb( |
39 | | - r: ((argb & 0xFF0000) >> 16) / 255, |
40 | | - g: ((argb & 0xFF00) >> 8) / 255, |
41 | | - b: (argb & 0xFF) / 255); |
42 | | - |
43 | | - sb.write(pen(text)); |
44 | | - }, |
45 | | - ).visit(fileSpan); |
46 | | - |
47 | 29 | final zero = AnsiPen() |
48 | 30 | ..red(bg: true) |
49 | | - ..white(); |
| 31 | + ..black(); |
50 | 32 | final cover = AnsiPen() |
51 | 33 | ..green(bg: true) |
52 | | - ..white(); |
| 34 | + ..black(); |
53 | 35 | stdout.writeln(''); |
54 | 36 | stdout.writeln( |
55 | 37 | '────┤ $fullPath [${node.linesHit} / ${node.linesFound}] = ${node.percent.toStringAsFixed(2)}% ├────'); |
| 38 | + |
56 | 39 | int lineNumber = 1; |
57 | | - for (final line in LineSplitter.split('$sb')) { |
| 40 | + writeLineHeader() { |
58 | 41 | var hits = node.lines[lineNumber]; |
59 | 42 | if (hits == null) { |
60 | | - stdout.writeln('$ansiDefault${' ' * 8} | $line'); |
| 43 | + stdout.write('$ansiDefault${' ' * 8} | '); |
61 | 44 | } else if (hits == 0) { |
62 | | - stdout.writeln('$ansiDefault${zero('$hits'.padLeft(8, ' '))} | $line'); |
| 45 | + stdout.write('$ansiDefault${zero('$hits'.padLeft(8, ' '))} | '); |
63 | 46 | } else { |
64 | | - stdout.writeln('$ansiDefault${cover('$hits'.padLeft(8, ' '))} | $line'); |
| 47 | + stdout.write('$ansiDefault${cover('$hits'.padLeft(8, ' '))} | '); |
65 | 48 | } |
66 | | - lineNumber++; |
67 | 49 | } |
| 50 | + |
| 51 | + writeLineHeader(); |
| 52 | + SpanVisitor( |
| 53 | + (span, depth) { |
| 54 | + if (span.text == null) { |
| 55 | + return; |
| 56 | + } |
| 57 | + var text = span.text!; |
| 58 | + |
| 59 | + final argb = span.style?.foreground.argb ?? 0xFFFFFFFF; |
| 60 | + final pen = ansiScopes[argb] ??= AnsiPen() |
| 61 | + ..rgb( |
| 62 | + r: ((argb & 0xFF0000) >> 16) / 255, |
| 63 | + g: ((argb & 0xFF00) >> 8) / 255, |
| 64 | + b: (argb & 0xFF) / 255); |
| 65 | + |
| 66 | + stdout.write(pen.down); |
| 67 | + for (int i = 0; i < text.length; i++) { |
| 68 | + final char = text[i]; |
| 69 | + stdout.write(char); |
| 70 | + if (char == '\n') { |
| 71 | + lineNumber++; |
| 72 | + writeLineHeader(); |
| 73 | + stdout.write(pen.down); |
| 74 | + } |
| 75 | + } |
| 76 | + }, |
| 77 | + ).visit(fileSpan); |
68 | 78 | } |
69 | 79 |
|
70 | 80 | for (var child in node.children.values) { |
|
0 commit comments