@@ -51,8 +51,8 @@ class BuildLogMessages {
5151 bool hasMessages ({required String ? phaseName}) =>
5252 _phaseNamesWithMessages.contains (phaseName);
5353
54- List < AnsiBufferLine > render () {
55- final result = < AnsiBufferLine > [] ;
54+ RenderResult render () {
55+ final result = RenderResult () ;
5656
5757 final buildRunnerCategories = < MapEntry <_MessageCategory , List <Message >>> [];
5858 for (final entry in _messageByCategory.entries) {
@@ -72,40 +72,51 @@ class BuildLogMessages {
7272 return result;
7373 }
7474
75- List < AnsiBufferLine > _renderCategory (
75+ RenderResult _renderCategory (
7676 MapEntry <_MessageCategory , List <Message >> entry,
7777 ) {
78- final result = < AnsiBufferLine > [];
7978 final category = entry.key;
8079 final context = category.context;
80+
81+ final messages = _messageByCategory[category]! ;
82+ final failed = messages.any (
83+ (message) => message.severity == Severity .error,
84+ );
85+
86+ final result = < AnsiBufferLine > [];
8187 result.add (
8288 AnsiBufferLine ([
83- 'log output for ' ,
84- AnsiBuffer .bold,
85- category.phaseName ?? 'build_runner' ,
86- AnsiBuffer .reset,
8789 if (context != null ) ...[
88- ' on ' ,
89- AnsiBuffer .bold,
90+ failed ? AnsiBuffer .boldRed : AnsiBuffer .bold,
9091 context,
9192 AnsiBuffer .reset,
93+ ' ' ,
9294 ],
95+ AnsiBuffer .bold,
96+ category.phaseName ?? 'build_runner' ,
97+ AnsiBuffer .reset,
9398 ]),
9499 );
95100
96- for (final message in _messageByCategory[category] ! ) {
101+ for (final message in messages ) {
97102 var first = true ;
103+ final isError = message.severity == Severity .error;
98104 for (final line in message.text.split ('\n ' )) {
99105 result.add (
100106 AnsiBufferLine ([
107+ if (isError) AnsiBuffer .boldRed,
101108 first ? message.severity.prefix : ' ' ,
109+ if (isError) AnsiBuffer .reset,
102110 line,
103111 ], hangingIndent: 2 ),
104112 );
105113 first = false ;
106114 }
107115 }
108- return result;
116+
117+ return failed
118+ ? RenderResult .failed (result)
119+ : RenderResult .succeeded (result);
109120 }
110121}
111122
@@ -177,3 +188,24 @@ enum Severity {
177188 Severity .error => 'E ' ,
178189 };
179190}
191+
192+ class RenderResult {
193+ /// Rendered messages block that does not contain any errors.
194+ final List <AnsiBufferLine > nonFailureLines;
195+
196+ /// Rendered messages block that does contain errors.
197+ final List <AnsiBufferLine > failureLines;
198+
199+ RenderResult () : nonFailureLines = [], failureLines = [];
200+ RenderResult .failed (List <AnsiBufferLine > lines)
201+ : failureLines = lines,
202+ nonFailureLines = [];
203+ RenderResult .succeeded (List <AnsiBufferLine > lines)
204+ : nonFailureLines = lines,
205+ failureLines = [];
206+
207+ void addAll (RenderResult other) {
208+ nonFailureLines.addAll (other.nonFailureLines);
209+ failureLines.addAll (other.failureLines);
210+ }
211+ }
0 commit comments