Skip to content

Commit 9982b23

Browse files
timmaffetthaarts
authored andcommitted
added noBoxingByDefault and excludeBox parameters to PrettyPrinter() constructor to control boxing by level
dartfmt changes dartanalyzer changes
1 parent 10748c7 commit 9982b23

File tree

1 file changed

+30
-8
lines changed

1 file changed

+30
-8
lines changed

lib/src/printers/pretty_printer.dart

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,16 @@ class PrettyPrinter extends LogPrinter {
7575
final bool printEmojis;
7676
final bool printTime;
7777

78+
/// To prevent ascii 'boxing' of any log [Level] include the level in map for excludeBox,
79+
/// for example to prevent boxing of [Level.verbose] and [Level.info] use excludeBox:{Level.verbose:true, Level.info:true}
80+
final Map<Level, bool> excludeBox;
81+
82+
/// To make the default for every level to prevent boxing entirely set [noBoxing] to true
83+
/// (boxing can still be turned on for some levels by using something like excludeBox:{Level.error:false} )
84+
final bool noBoxingByDefault;
85+
86+
late final Map<Level, bool> includeBox;
87+
7888
String _topBorder = '';
7989
String _middleBorder = '';
8090
String _bottomBorder = '';
@@ -87,6 +97,8 @@ class PrettyPrinter extends LogPrinter {
8797
this.colors = true,
8898
this.printEmojis = true,
8999
this.printTime = false,
100+
this.excludeBox = const {},
101+
this.noBoxingByDefault = false,
90102
}) {
91103
_startTime ??= DateTime.now();
92104

@@ -100,6 +112,14 @@ class PrettyPrinter extends LogPrinter {
100112
_topBorder = '$topLeftCorner$doubleDividerLine';
101113
_middleBorder = '$middleCorner$singleDividerLine';
102114
_bottomBorder = '$bottomLeftCorner$doubleDividerLine';
115+
116+
// Translate excludeBox map (constant if default) to includeBox map with all Level enum possibilities
117+
includeBox = {};
118+
for (var levelEnum in Level.values) {
119+
includeBox[levelEnum] = excludeBox.containsKey(levelEnum)
120+
? !excludeBox[levelEnum]!
121+
: !noBoxingByDefault;
122+
}
103123
}
104124

105125
@override
@@ -252,38 +272,40 @@ class PrettyPrinter extends LogPrinter {
252272
// This code is non trivial and a type annotation here helps understanding.
253273
// ignore: omit_local_variable_types
254274
List<String> buffer = [];
275+
var verticalLineAtLevel = (includeBox[level]!) ? (verticalLine + ' ') : '';
255276
var color = _getLevelColor(level);
256-
buffer.add(color(_topBorder));
277+
if (includeBox[level]!) buffer.add(color(_topBorder));
257278

258279
if (error != null) {
259280
var errorColor = _getErrorColor(level);
260281
for (var line in error.split('\n')) {
261282
buffer.add(
262-
color('$verticalLine ') +
283+
color(verticalLineAtLevel) +
263284
errorColor.resetForeground +
264285
errorColor(line) +
265286
errorColor.resetBackground,
266287
);
267288
}
268-
buffer.add(color(_middleBorder));
289+
if (includeBox[level]!) buffer.add(color(_middleBorder));
269290
}
270291

271292
if (stacktrace != null) {
272293
for (var line in stacktrace.split('\n')) {
273-
buffer.add(color('$verticalLine $line'));
294+
buffer.add(color('$verticalLineAtLevel$line'));
274295
}
275-
buffer.add(color(_middleBorder));
296+
if (includeBox[level]!) buffer.add(color(_middleBorder));
276297
}
277298

278299
if (time != null) {
279-
buffer..add(color('$verticalLine $time'))..add(color(_middleBorder));
300+
buffer.add(color('$verticalLineAtLevel$time'));
301+
if (includeBox[level]!) buffer.add(color(_middleBorder));
280302
}
281303

282304
var emoji = _getEmoji(level);
283305
for (var line in message.split('\n')) {
284-
buffer.add(color('$verticalLine $emoji$line'));
306+
buffer.add(color('$verticalLineAtLevel$emoji$line'));
285307
}
286-
buffer.add(color(_bottomBorder));
308+
if (includeBox[level]!) buffer.add(color(_bottomBorder));
287309

288310
return buffer;
289311
}

0 commit comments

Comments
 (0)