From 2b632657f12a8772b8ee44f63a8970c998ef1621 Mon Sep 17 00:00:00 2001 From: Jonas Uekoetter Date: Mon, 12 May 2025 14:39:01 +0200 Subject: [PATCH 1/5] add module --- dart/lib/src/sentry_stack_trace_factory.dart | 1 + dart/test/stack_trace_test.dart | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/dart/lib/src/sentry_stack_trace_factory.dart b/dart/lib/src/sentry_stack_trace_factory.dart index e6b742fb0d..77e3696235 100644 --- a/dart/lib/src/sentry_stack_trace_factory.dart +++ b/dart/lib/src/sentry_stack_trace_factory.dart @@ -140,6 +140,7 @@ class SentryStackTraceFactory { fileName: fileName, package: frame.package, platform: platform, + module: frame.package == null ? null : frame.uri.pathSegments.sublist(0, frame.uri.pathSegments.length - 1).join('/'), ); final line = frame.line; diff --git a/dart/test/stack_trace_test.dart b/dart/test/stack_trace_test.dart index 54036dd126..1452299ed5 100644 --- a/dart/test/stack_trace_test.dart +++ b/dart/test/stack_trace_test.dart @@ -106,6 +106,25 @@ void main() { expect(serializedFrame.inApp, false); }); + + test('adds module for package frames', () { + final frame = Frame(Uri.parse('package:app_name/features/login/ui/view_model/login_view_model.dart'), 1, 2, 'buzz'); + + expect( + Fixture().getSut().encodeStackTraceFrame(frame)!.toJson(), + { + 'filename': 'login_view_model.dart', + 'package': 'app_name', + 'function': 'buzz', + 'module': 'app_name/features/login/ui/view_model', + 'lineno': 1, + 'colno': 2, + 'abs_path': 'package:app_name/features/login/ui/view_model/login_view_model.dart', + 'in_app': true, + 'platform': 'dart' + }, + ); + }); }); group('encodeStackTrace', () { From 160d30c4c7dd33f31109a0115f74ceada66515c6 Mon Sep 17 00:00:00 2001 From: Jonas Uekoetter Date: Mon, 12 May 2025 14:43:11 +0200 Subject: [PATCH 2/5] formatting --- dart/lib/src/sentry_stack_trace_factory.dart | 6 +++++- dart/test/stack_trace_test.dart | 13 ++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/dart/lib/src/sentry_stack_trace_factory.dart b/dart/lib/src/sentry_stack_trace_factory.dart index 77e3696235..29bdb34ce5 100644 --- a/dart/lib/src/sentry_stack_trace_factory.dart +++ b/dart/lib/src/sentry_stack_trace_factory.dart @@ -140,7 +140,11 @@ class SentryStackTraceFactory { fileName: fileName, package: frame.package, platform: platform, - module: frame.package == null ? null : frame.uri.pathSegments.sublist(0, frame.uri.pathSegments.length - 1).join('/'), + module: frame.package == null + ? null + : frame.uri.pathSegments + .sublist(0, frame.uri.pathSegments.length - 1) + .join('/'), ); final line = frame.line; diff --git a/dart/test/stack_trace_test.dart b/dart/test/stack_trace_test.dart index 1452299ed5..f93c72511a 100644 --- a/dart/test/stack_trace_test.dart +++ b/dart/test/stack_trace_test.dart @@ -108,7 +108,13 @@ void main() { }); test('adds module for package frames', () { - final frame = Frame(Uri.parse('package:app_name/features/login/ui/view_model/login_view_model.dart'), 1, 2, 'buzz'); + final frame = Frame( + Uri.parse( + 'package:app_name/features/login/ui/view_model/login_view_model.dart'), + 1, + 2, + 'buzz', + ); expect( Fixture().getSut().encodeStackTraceFrame(frame)!.toJson(), @@ -119,9 +125,10 @@ void main() { 'module': 'app_name/features/login/ui/view_model', 'lineno': 1, 'colno': 2, - 'abs_path': 'package:app_name/features/login/ui/view_model/login_view_model.dart', + 'abs_path': + 'package:app_name/features/login/ui/view_model/login_view_model.dart', 'in_app': true, - 'platform': 'dart' + 'platform': 'dart', }, ); }); From dcb0a44c1db679eb6c40e8322832d8f5aec73dda Mon Sep 17 00:00:00 2001 From: Jonas Uekoetter Date: Mon, 12 May 2025 14:43:58 +0200 Subject: [PATCH 3/5] changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 41f00f31f7..67c8f4611e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## Unreleased + +- Add module in SentryStackFrame ([#2931](https://github.com/getsentry/sentry-dart/pull/2931)) + ## 9.0.0-RC ### Various fixes & improvements From 27704748ddb043161e39272c46880efe84419e7e Mon Sep 17 00:00:00 2001 From: Jonas Uekoetter Date: Mon, 12 May 2025 14:46:19 +0200 Subject: [PATCH 4/5] fix test --- dart/test/stack_trace_test.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/dart/test/stack_trace_test.dart b/dart/test/stack_trace_test.dart index f93c72511a..6250101fd8 100644 --- a/dart/test/stack_trace_test.dart +++ b/dart/test/stack_trace_test.dart @@ -282,6 +282,7 @@ isolate_instructions: 10fa27070, vm_instructions: 10fa21e20 'abs_path': '${eventOrigin}package:example/main.dart', 'in_app': true, 'platform': 'dart', + 'module': 'example', }, { 'filename': 'main.dart', From 5e99354ee356cc7d68f3cdbddfb4d35e7679b5b0 Mon Sep 17 00:00:00 2001 From: Jonas Uekoetter Date: Mon, 12 May 2025 14:58:18 +0200 Subject: [PATCH 5/5] only test for the module --- dart/test/stack_trace_test.dart | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/dart/test/stack_trace_test.dart b/dart/test/stack_trace_test.dart index 6250101fd8..f1c9886ba6 100644 --- a/dart/test/stack_trace_test.dart +++ b/dart/test/stack_trace_test.dart @@ -116,21 +116,9 @@ void main() { 'buzz', ); - expect( - Fixture().getSut().encodeStackTraceFrame(frame)!.toJson(), - { - 'filename': 'login_view_model.dart', - 'package': 'app_name', - 'function': 'buzz', - 'module': 'app_name/features/login/ui/view_model', - 'lineno': 1, - 'colno': 2, - 'abs_path': - 'package:app_name/features/login/ui/view_model/login_view_model.dart', - 'in_app': true, - 'platform': 'dart', - }, - ); + final sentryStackFrame = Fixture().getSut().encodeStackTraceFrame(frame)!; + + expect(sentryStackFrame.module, 'app_name/features/login/ui/view_model'); }); });