Skip to content

Commit 79734ab

Browse files
committed
Deal with Flutter web stacktraces
1 parent 30c949e commit 79734ab

File tree

1 file changed

+35
-14
lines changed

1 file changed

+35
-14
lines changed

lib/src/printers/pretty_printer.dart

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,17 @@ class PrettyPrinter extends LogPrinter {
4242
Level.wtf: '👾 ',
4343
};
4444

45-
static final stackTraceRegex = RegExp(r'#[0-9]+[\s]+(.+) \(([^\s]+)\)');
45+
/// Matches a stacktrace line as generated on Android/iOS devices.
46+
/// For example:
47+
/// #1 Logger.log (package:logger/src/logger.dart:115:29)
48+
static final _deviceStackTraceRegex =
49+
RegExp(r'#[0-9]+[\s]+(.+) \(([^\s]+)\)');
50+
51+
/// Matches a stacktrace line as generated by Flutter web.
52+
/// For example:
53+
/// packages/logger/src/printers/pretty_printer.dart 91:37
54+
static final _webStackTraceRegex =
55+
RegExp(r'^((packages|dart-sdk)\/[^\s]+\/)');
4656

4757
static DateTime _startTime;
4858

@@ -110,22 +120,16 @@ class PrettyPrinter extends LogPrinter {
110120

111121
String formatStackTrace(StackTrace stackTrace, int methodCount) {
112122
var lines = stackTrace.toString().split('\n');
113-
114123
var formatted = <String>[];
115124
var count = 0;
116125
for (var line in lines) {
117-
var match = stackTraceRegex.matchAsPrefix(line);
118-
if (match != null) {
119-
if (match.group(2).startsWith('package:logger')) {
120-
continue;
121-
}
122-
var newLine = '#$count ${match.group(1)} (${match.group(2)})';
123-
formatted.add(newLine.replaceAll('<anonymous closure>', '()'));
124-
if (++count == methodCount) {
125-
break;
126-
}
127-
} else {
128-
formatted.add(line);
126+
if (_discardDeviceStacktraceLine(line) ||
127+
_discardWebStacktraceLine(line)) {
128+
continue;
129+
}
130+
formatted.add('#$count ${line.replaceFirst(RegExp(r'#\d+\s+'), '')}');
131+
if (++count == methodCount) {
132+
break;
129133
}
130134
}
131135

@@ -136,6 +140,23 @@ class PrettyPrinter extends LogPrinter {
136140
}
137141
}
138142

143+
bool _discardDeviceStacktraceLine(String line) {
144+
var match = _deviceStackTraceRegex.matchAsPrefix(line);
145+
if (match == null) {
146+
return false;
147+
}
148+
return match.group(2).startsWith('package:logger');
149+
}
150+
151+
bool _discardWebStacktraceLine(String line) {
152+
var match = _webStackTraceRegex.matchAsPrefix(line);
153+
if (match == null) {
154+
return false;
155+
}
156+
return match.group(1).startsWith('packages/logger') ||
157+
match.group(1).startsWith('dart-sdk/lib');
158+
}
159+
139160
String getTime() {
140161
String _threeDigits(int n) {
141162
if (n >= 100) return '$n';

0 commit comments

Comments
 (0)