From 6a3c25a8bd971b0e18d90e52944dea3836f94ccc Mon Sep 17 00:00:00 2001 From: Krille Fear Date: Wed, 24 Nov 2021 07:56:42 +0100 Subject: [PATCH] chore: Make some tryGet errors verbose and display line tryGet messages can spam the logs and may be better if they are just verbose instead of warnings. Also now we display the line where this tryGet call was. --- lib/src/utils/try_get_map_extension.dart | 23 +++++++++++++++++------ test/try_get_map_extension_test.dart | 12 ++++++------ 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/lib/src/utils/try_get_map_extension.dart b/lib/src/utils/try_get_map_extension.dart index 1cc026bc..fbaa7e11 100644 --- a/lib/src/utils/try_get_map_extension.dart +++ b/lib/src/utils/try_get_map_extension.dart @@ -39,7 +39,7 @@ class _RequiredLog implements TryGet { const _RequiredLog(); @override void call(String key, Type expected, Type actual) => Logs().w( - 'Expected "$expected" in event content for the Key "$key" but got "$actual".'); + 'Expected required "$expected" in event content for the Key "$key" but got "$actual" at ${StackTrace.current.firstLine}'); } class _OptionalLog implements TryGet { @@ -48,7 +48,7 @@ class _OptionalLog implements TryGet { void call(String key, Type expected, Type actual) { if (actual != Null) { Logs().w( - 'Expected "$expected" in event content for the Key "$key" but got "$actual".'); + 'Expected optional "$expected" in event content for the Key "$key" but got "$actual" at ${StackTrace.current.firstLine}'); } } } @@ -79,8 +79,8 @@ extension TryGetMapExtension on Map { // copy entries to ensure type check failures here and not an access return value.cast().toList(); } catch (_) { - Logs() - .w('Unable to create "List<$T>" in event content for the key "$key"'); + Logs().v( + 'Unable to create "List<$T>" in event content for the key "$key" at ${StackTrace.current.firstLine}'); return null; } } @@ -95,9 +95,20 @@ extension TryGetMapExtension on Map { // copy map to ensure type check failures here and not an access return Map.from(value.cast()); } catch (_) { - Logs().w( - 'Unable to create "Map<$A,$B>" in event content for the key "$key"'); + Logs().v( + 'Unable to create "Map<$A,$B>" in event content for the key "$key" at ${StackTrace.current.firstLine}'); return null; } } } + +extension on StackTrace { + String get firstLine { + final lines = toString().split('\n'); + return lines.length >= 3 + ? lines[2].replaceFirst('#2 ', '') + : lines.isNotEmpty + ? lines.first + : '(unknown position)'; + } +} diff --git a/test/try_get_map_extension_test.dart b/test/try_get_map_extension_test.dart index d38a1e68..7fe70c28 100644 --- a/test/try_get_map_extension_test.dart +++ b/test/try_get_map_extension_test.dart @@ -26,7 +26,7 @@ import 'package:test/test.dart'; void main() { group('Try-get-map-extension', () { - Logs().level = Level.error; + Logs().level = Level.verbose; test('it should work', () { final data = { 'str': 'foxies', @@ -40,12 +40,12 @@ void main() { expect(data.tryGet('str'), null); expect(data.tryGet('int'), 42); expect(data.tryGet('list'), [2, 3, 4]); - expect(data.tryGet>('map')?.tryGet('beep'), + expect(data.tryGetMap('map')?.tryGet('beep'), 'boop'); - expect(data.tryGet>('map')?.tryGet('meep'), - null); - expect(data.tryGet>('pam')?.tryGet('beep'), - null); + expect( + data.tryGetMap('map')?.tryGet('meep'), null); + expect( + data.tryGetMap('pam')?.tryGet('beep'), null); }); }); }