diff --git a/packages/coverde_cli/CHANGELOG.md b/packages/coverde_cli/CHANGELOG.md index 39236e6..f7599e1 100644 --- a/packages/coverde_cli/CHANGELOG.md +++ b/packages/coverde_cli/CHANGELOG.md @@ -1,6 +1,7 @@ ## [Unreleased] - **FEAT (BREAKING)**: require Dart 3. +- **FIX (BREAKING)**: keep relative paths when filtering. ## 0.1.0+1 diff --git a/packages/coverde_cli/lib/src/commands/filter/filter.dart b/packages/coverde_cli/lib/src/commands/filter/filter.dart index ef20bf1..dae4bdf 100644 --- a/packages/coverde_cli/lib/src/commands/filter/filter.dart +++ b/packages/coverde_cli/lib/src/commands/filter/filter.dart @@ -2,7 +2,6 @@ import 'package:args/command_runner.dart'; import 'package:coverde/src/entities/cov_file.dart'; import 'package:coverde/src/entities/tracefile.dart'; import 'package:coverde/src/utils/command.dart'; -import 'package:coverde/src/utils/path.dart'; import 'package:meta/meta.dart'; import 'package:universal_io/io.dart'; @@ -26,7 +25,7 @@ class FilterCommand extends Command { help: ''' Destination coverage info file to dump the resulting coverage data into.''', defaultsTo: 'coverage/filtered.lcov.info', - valueHelp: _outpitHelpValue, + valueHelp: _outputHelpValue, ) ..addMultiOption( filtersOption, @@ -39,7 +38,7 @@ Set of comma-separated path patterns of the files to be ignored.''', ..addOption( modeOption, abbr: modeOption[0], - help: 'The mode in which the $_outpitHelpValue can be generated.', + help: 'The mode in which the $_outputHelpValue can be generated.', valueHelp: _modeHelpValue, allowed: _outModeAllowedHelp.keys, allowedHelp: _outModeAllowedHelp, @@ -50,14 +49,14 @@ Set of comma-separated path patterns of the files to be ignored.''', final Stdout _out; static const _inputHelpValue = 'INPUT_LCOV_FILE'; - static const _outpitHelpValue = 'OUTPUT_LCOV_FILE'; + static const _outputHelpValue = 'OUTPUT_LCOV_FILE'; static const _filtersHelpValue = 'FILTERS'; static const _modeHelpValue = 'MODE'; static const _outModeAllowedHelp = { 'a': ''' -Append filtered content to the $_outpitHelpValue content, if any.''', +Append filtered content to the $_outputHelpValue content, if any.''', 'w': ''' -Override the $_outpitHelpValue content, if any, with the filtered content.''', +Override the $_outputHelpValue content, if any, with the filtered content.''', }; /// Option name for identifier patters to be used for tracefile filtering. @@ -81,7 +80,7 @@ Override the $_outpitHelpValue content, if any, with the filtered content.''', Filter a coverage trace file. Filter the coverage info by ignoring data related to files with paths that matches the given $_filtersHelpValue. -The coverage data is taken from the $_inputHelpValue file and the result is appended to the $_outpitHelpValue file.'''; +The coverage data is taken from the $_inputHelpValue file and the result is appended to the $_outputHelpValue file.'''; @override String get name => 'filter'; @@ -115,7 +114,6 @@ The coverage data is taken from the $_inputHelpValue file and the result is appe final origin = File(originPath); final destination = File(destinationPath); - final pwd = Directory.current; if (!origin.existsSync()) { usageException('The trace file located at `$originPath` does not exist.'); @@ -138,7 +136,7 @@ The coverage data is taken from the $_inputHelpValue file and the result is appe }, ); - // Conditionaly include file coverage data. + // Conditionally include file coverage data. if (shouldBeIgnored) { _out.writeln('<${fileCovData.source.path}> coverage data ignored.'); } else { @@ -146,14 +144,9 @@ The coverage data is taken from the $_inputHelpValue file and the result is appe } } - // Use absolute path. final finalContent = acceptedSrcFilesCovData .map((srcFileCovData) => srcFileCovData.raw) - .join('\n') - .replaceAll( - RegExp(CovFile.sourceFileTag), - '${CovFile.sourceFileTag}${pwd.path}${path.separator}', - ); + .join('\n'); // Generate destination file and its content. destination diff --git a/packages/coverde_cli/test/src/commands/filter/filter_test.dart b/packages/coverde_cli/test/src/commands/filter/filter_test.dart index d3429b8..d7a34be 100644 --- a/packages/coverde_cli/test/src/commands/filter/filter_test.dart +++ b/packages/coverde_cli/test/src/commands/filter/filter_test.dart @@ -1,3 +1,5 @@ +import 'dart:convert'; + import 'package:args/command_runner.dart'; import 'package:coverde/src/commands/filter/filter.dart'; import 'package:coverde/src/entities/tracefile.dart'; @@ -79,8 +81,11 @@ THEN a filtered tracefile should be created final patternsRegex = patterns.map(RegExp.new); final originalFilePath = 'original.lcov.info'.fixturePath; final filteredFilePath = 'unquoted.filtered.lcov.info'.fixturePath; + final expectedFilteredFilePath = + 'expected.unquoted.filtered.lcov.info'.fixturePath; final originalFile = File(originalFilePath); final filteredFile = File(filteredFilePath); + final expectedFilteredFile = File(expectedFilteredFilePath); if (filteredFile.existsSync()) { filteredFile.deleteSync(recursive: true); } @@ -112,12 +117,21 @@ THEN a filtered tracefile should be created ]); // ASSERT + const splitter = LineSplitter(); expect(originalFile.existsSync(), isTrue); expect(filteredFile.existsSync(), isTrue); - final filteredFileIncludeFileThatMatchPatterns = Tracefile.parse( - filteredFile.readAsStringSync(), - ).includeFileThatMatchPatterns(patterns); + final filteredFileContent = filteredFile.readAsStringSync(); + final expectedFilteredFileContent = + expectedFilteredFile.readAsStringSync(); + final filteredFileIncludeFileThatMatchPatterns = + Tracefile.parse(filteredFileContent) + .includeFileThatMatchPatterns(patterns); expect(filteredFileIncludeFileThatMatchPatterns, isFalse); + expect( + splitter.convert(filteredFileContent), + splitter.convert(expectedFilteredFileContent), + reason: 'Error: Non-matching filtered file content.', + ); for (final fileData in filesDataToBeRemoved) { final path = fileData.source.path; verify( @@ -142,8 +156,11 @@ THEN a filtered tracefile should be created final patternsRegex = patterns.map(RegExp.new); final originalFilePath = 'original.lcov.info'.fixturePath; final filteredFilePath = 'raw.filtered.lcov.info'.fixturePath; + final expectedFilteredFilePath = + 'expected.raw.filtered.lcov.info'.fixturePath; final originalFile = File(originalFilePath); final filteredFile = File(filteredFilePath); + final expectedFilteredFile = File(expectedFilteredFilePath); if (filteredFile.existsSync()) { filteredFile.deleteSync(recursive: true); } @@ -175,12 +192,21 @@ THEN a filtered tracefile should be created ]); // ASSERT + const splitter = LineSplitter(); expect(originalFile.existsSync(), isTrue); expect(filteredFile.existsSync(), isTrue); - final filteredFileIncludeFileThatMatchPatterns = Tracefile.parse( - filteredFile.readAsStringSync(), - ).includeFileThatMatchPatterns(patterns); + final filteredFileContent = filteredFile.readAsStringSync(); + final expectedFilteredFileContent = + expectedFilteredFile.readAsStringSync(); + final filteredFileIncludeFileThatMatchPatterns = + Tracefile.parse(filteredFileContent) + .includeFileThatMatchPatterns(patterns); expect(filteredFileIncludeFileThatMatchPatterns, isFalse); + expect( + splitter.convert(filteredFileContent), + splitter.convert(expectedFilteredFileContent), + reason: 'Error: Non-matching filtered file content.', + ); for (final fileData in filesDataToBeRemoved) { final path = fileData.source.path; verify( diff --git a/packages/coverde_cli/test/src/commands/filter/fixtures/expected.raw.filtered.lcov.info b/packages/coverde_cli/test/src/commands/filter/fixtures/expected.raw.filtered.lcov.info new file mode 100644 index 0000000..a54da67 --- /dev/null +++ b/packages/coverde_cli/test/src/commands/filter/fixtures/expected.raw.filtered.lcov.info @@ -0,0 +1,459 @@ +SF:lib\core\config.dart +DA:33,1 +DA:34,1 +DA:36,2 +DA:37,1 +LF:4 +LH:4 +end_of_record +SF:lib\core\dependency_injection.dart +DA:6,6 +DA:7,2 +DA:12,6 +DA:13,2 +DA:18,1 +DA:22,1 +DA:23,2 +DA:24,2 +LF:8 +LH:8 +end_of_record +SF:lib\core\flavors.dart +DA:1,17 +DA:20,1 +DA:21,1 +DA:22,1 +DA:26,1 +DA:31,3 +DA:33,3 +DA:35,3 +DA:37,3 +LF:9 +LH:9 +end_of_record +SF:lib\features\auth\application\authenticator_cubit\authenticator_cubit.dart +DA:18,2 +DA:21,2 +DA:29,1 +DA:30,1 +DA:32,3 +DA:34,1 +DA:42,1 +DA:45,1 +DA:47,3 +DA:51,1 +DA:52,1 +DA:53,2 +DA:54,1 +DA:56,1 +DA:62,1 +DA:63,1 +DA:64,3 +DA:65,1 +LF:18 +LH:18 +end_of_record +SF:lib\features\auth\core\dependency_injection.dart +DA:12,3 +DA:13,1 +DA:14,2 +DA:15,1 +DA:19,3 +DA:20,1 +DA:23,3 +DA:24,1 +DA:25,2 +DA:26,1 +DA:32,6 +DA:33,1 +DA:34,2 +DA:35,1 +DA:41,3 +DA:42,1 +DA:43,2 +DA:44,1 +DA:50,3 +DA:51,1 +DA:52,2 +DA:53,2 +DA:54,1 +DA:61,3 +DA:62,1 +DA:63,2 +DA:64,1 +LF:27 +LH:27 +end_of_record +SF:lib\features\auth\infrastructure\external\dio_interceptors.dart +DA:5,2 +DA:14,1 +DA:18,5 +DA:19,3 +DA:20,1 +DA:23,2 +DA:24,1 +DA:25,1 +DA:31,1 +LF:9 +LH:9 +end_of_record +SF:lib\features\stared_repos\application\starred_repos_cubit\cubit.dart +DA:23,2 +DA:28,2 +DA:48,4 +DA:52,3 +DA:55,1 +DA:56,2 +DA:58,1 +DA:59,1 +DA:60,2 +DA:65,3 +DA:66,2 +DA:69,2 +DA:70,3 +DA:72,2 +DA:73,4 +DA:74,3 +DA:76,1 +DA:77,1 +DA:78,1 +DA:80,1 +DA:81,1 +DA:82,1 +DA:89,1 +DA:90,1 +DA:91,1 +DA:92,1 +DA:98,2 +LF:27 +LH:27 +end_of_record +SF:lib\features\stared_repos\domain\repo.dart +DA:27,3 +DA:29,10 +LF:2 +LH:2 +end_of_record +SF:lib\features\stared_repos\core\dependency_injection.dart +DA:20,3 +DA:21,2 +DA:26,3 +DA:27,1 +DA:28,2 +DA:29,1 +DA:35,3 +DA:36,1 +DA:37,2 +DA:38,1 +DA:44,3 +DA:45,1 +DA:46,2 +DA:47,2 +DA:48,1 +DA:49,3 +DA:56,3 +DA:57,1 +DA:58,2 +DA:59,1 +DA:65,3 +DA:66,1 +DA:67,2 +DA:68,1 +DA:74,3 +DA:75,1 +DA:76,2 +DA:77,2 +DA:78,1 +DA:85,3 +DA:86,1 +DA:87,2 +DA:88,1 +DA:94,1 +DA:95,2 +DA:96,2 +DA:97,2 +DA:98,3 +DA:99,3 +LF:39 +LH:39 +end_of_record +SF:lib\features\stared_repos\infrastructure\data_sources\etags_lds\interface.dart +DA:2,2 +LF:1 +LH:1 +end_of_record +SF:lib\features\stared_repos\infrastructure\data_sources\stared_repos_rds\interface.dart +DA:31,9 +LF:1 +LH:1 +end_of_record +SF:lib\features\stared_repos\infrastructure\data_sources\starred_repos_lds\interface.dart +DA:5,2 +LF:1 +LH:1 +end_of_record +SF:lib\features\stared_repos\infrastructure\external\etags_dio_interceptor.dart +DA:6,2 +DA:15,1 +DA:19,5 +DA:20,2 +DA:21,1 +DA:22,3 +DA:26,2 +DA:27,1 +DA:34,1 +DA:38,1 +DA:42,3 +DA:44,3 +DA:45,1 +DA:46,3 +DA:52,1 +LF:15 +LH:15 +end_of_record +SF:lib\features\stared_repos\infrastructure\data_sources\etags_lds\sembast_implementation.dart +DA:7,2 +DA:10,2 +DA:21,1 +DA:25,5 +DA:28,1 +DA:32,4 +LF:6 +LH:6 +end_of_record +SF:lib\features\stared_repos\infrastructure\data_sources\stared_repos_rds\rest_implementation.dart +DA:23,2 +DA:44,1 +DA:50,3 +DA:52,1 +DA:56,1 +DA:57,1 +DA:60,3 +DA:66,1 +DA:67,1 +DA:68,1 +DA:69,3 +DA:73,1 +DA:74,3 +DA:83,1 +DA:86,1 +DA:87,2 +DA:91,1 +DA:93,1 +DA:94,1 +DA:101,1 +DA:102,2 +DA:106,2 +DA:110,1 +DA:111,2 +DA:112,1 +DA:115,1 +DA:117,1 +DA:119,3 +DA:122,1 +DA:123,2 +DA:127,1 +LF:31 +LH:31 +end_of_record +SF:lib\features\stared_repos\infrastructure\data_sources\starred_repos_lds\sembast_implementation.dart +DA:10,2 +DA:13,2 +DA:24,1 +DA:28,4 +DA:29,1 +DA:30,1 +DA:31,2 +DA:37,1 +DA:40,5 +DA:42,1 +DA:44,2 +LF:11 +LH:11 +end_of_record +SF:lib\features\stared_repos\infrastructure\facades\starred_repos_repo\implementation.dart +DA:16,2 +DA:28,1 +DA:34,3 +DA:37,1 +DA:38,3 +DA:41,1 +DA:42,2 +DA:44,1 +DA:46,1 +DA:48,1 +DA:49,2 +DA:53,2 +DA:59,3 +DA:60,1 +DA:61,1 +DA:62,2 +LF:16 +LH:16 +end_of_record +SF:lib\features\stared_repos\infrastructure\converters\page.dart +DA:6,2 +DA:7,2 +DA:8,2 +DA:9,2 +DA:10,2 +DA:11,4 +DA:13,2 +DA:20,1 +DA:23,1 +DA:24,1 +DA:25,3 +DA:28,1 +DA:32,1 +DA:33,1 +DA:34,1 +DA:35,1 +DA:36,1 +DA:37,1 +LF:18 +LH:18 +end_of_record +SF:lib\features\stared_repos\infrastructure\converters\repo.dart +DA:6,4 +DA:7,4 +DA:8,2 +DA:9,2 +DA:10,2 +LF:5 +LH:5 +end_of_record +SF:lib\features\stared_repos\infrastructure\dtos\github_repo.dart +DA:35,2 +DA:36,2 +LF:2 +LH:2 +end_of_record +SF:lib\features\stared_repos\infrastructure\converters\user.dart +DA:5,6 +DA:6,3 +DA:7,3 +LF:3 +LH:3 +end_of_record +SF:lib\features\stared_repos\infrastructure\dtos\user.dart +DA:25,2 +DA:26,2 +LF:2 +LH:2 +end_of_record +SF:lib\features\users_placeholder\application\users_cubit\cubit.dart +DA:13,2 +DA:16,2 +DA:22,1 +DA:23,1 +DA:25,3 +DA:27,1 +DA:28,1 +DA:29,2 +DA:30,1 +DA:34,2 +DA:35,1 +LF:11 +LH:11 +end_of_record +SF:lib\features\users_placeholder\infrastructure\facades\interface.dart +DA:7,2 +LF:1 +LH:1 +end_of_record +SF:lib\features\users_placeholder\core\dependency_injection.dart +DA:16,3 +DA:17,2 +DA:18,1 +DA:24,3 +DA:25,1 +DA:26,1 +DA:27,1 +DA:28,1 +DA:35,3 +DA:36,1 +DA:37,2 +DA:39,1 +DA:40,1 +DA:41,2 +DA:42,1 +DA:45,1 +DA:46,2 +DA:47,1 +DA:54,3 +DA:55,1 +DA:56,2 +DA:57,1 +DA:63,3 +DA:64,1 +DA:65,2 +DA:66,1 +LF:26 +LH:26 +end_of_record +SF:lib\features\users_placeholder\infrastructure\data_sources\users_rds\gql_implementation.dart +DA:6,3 +DA:21,2 +DA:28,1 +DA:32,3 +DA:33,2 +DA:36,3 +DA:40,3 +DA:42,1 +DA:43,1 +DA:44,1 +DA:45,2 +DA:47,2 +DA:50,1 +DA:60,1 +LF:14 +LH:14 +end_of_record +SF:lib\features\users_placeholder\infrastructure\data_sources\users_rds\rest_implementation.dart +DA:9,2 +DA:16,1 +DA:23,3 +DA:26,1 +DA:27,1 +DA:28,1 +DA:29,3 +DA:38,1 +DA:41,1 +DA:42,2 +DA:46,1 +LF:11 +LH:11 +end_of_record +SF:lib\features\users_placeholder\infrastructure\data_sources\users_rds\interface.dart +DA:8,3 +LF:1 +LH:1 +end_of_record +SF:lib\features\users_placeholder\infrastructure\facades\implementation.dart +DA:11,2 +DA:18,1 +DA:22,3 +DA:23,1 +DA:24,1 +DA:25,1 +DA:26,1 +DA:31,1 +DA:32,2 +DA:35,2 +LF:10 +LH:10 +end_of_record +SF:lib\features\users_placeholder\infrastructure\converters\user.dart +DA:5,2 +DA:6,1 +DA:7,1 +DA:8,1 +LF:4 +LH:4 +end_of_record +SF:lib\features\users_placeholder\infrastructure\dto\user.dart +DA:14,2 +DA:15,2 +LF:2 +LH:2 +end_of_record diff --git a/packages/coverde_cli/test/src/commands/filter/fixtures/expected.unquoted.filtered.lcov.info b/packages/coverde_cli/test/src/commands/filter/fixtures/expected.unquoted.filtered.lcov.info new file mode 100644 index 0000000..6265a9e --- /dev/null +++ b/packages/coverde_cli/test/src/commands/filter/fixtures/expected.unquoted.filtered.lcov.info @@ -0,0 +1,451 @@ +SF:lib\core\dependency_injection.dart +DA:6,6 +DA:7,2 +DA:12,6 +DA:13,2 +DA:18,1 +DA:22,1 +DA:23,2 +DA:24,2 +LF:8 +LH:8 +end_of_record +SF:lib\core\flavors.dart +DA:1,17 +DA:20,1 +DA:21,1 +DA:22,1 +DA:26,1 +DA:31,3 +DA:33,3 +DA:35,3 +DA:37,3 +LF:9 +LH:9 +end_of_record +SF:lib\features\auth\application\authenticator_cubit\authenticator_cubit.dart +DA:18,2 +DA:21,2 +DA:29,1 +DA:30,1 +DA:32,3 +DA:34,1 +DA:42,1 +DA:45,1 +DA:47,3 +DA:51,1 +DA:52,1 +DA:53,2 +DA:54,1 +DA:56,1 +DA:62,1 +DA:63,1 +DA:64,3 +DA:65,1 +LF:18 +LH:18 +end_of_record +SF:lib\features\auth\core\dependency_injection.dart +DA:12,3 +DA:13,1 +DA:14,2 +DA:15,1 +DA:19,3 +DA:20,1 +DA:23,3 +DA:24,1 +DA:25,2 +DA:26,1 +DA:32,6 +DA:33,1 +DA:34,2 +DA:35,1 +DA:41,3 +DA:42,1 +DA:43,2 +DA:44,1 +DA:50,3 +DA:51,1 +DA:52,2 +DA:53,2 +DA:54,1 +DA:61,3 +DA:62,1 +DA:63,2 +DA:64,1 +LF:27 +LH:27 +end_of_record +SF:lib\features\auth\infrastructure\external\dio_interceptors.dart +DA:5,2 +DA:14,1 +DA:18,5 +DA:19,3 +DA:20,1 +DA:23,2 +DA:24,1 +DA:25,1 +DA:31,1 +LF:9 +LH:9 +end_of_record +SF:lib\features\stared_repos\application\starred_repos_cubit\cubit.dart +DA:23,2 +DA:28,2 +DA:48,4 +DA:52,3 +DA:55,1 +DA:56,2 +DA:58,1 +DA:59,1 +DA:60,2 +DA:65,3 +DA:66,2 +DA:69,2 +DA:70,3 +DA:72,2 +DA:73,4 +DA:74,3 +DA:76,1 +DA:77,1 +DA:78,1 +DA:80,1 +DA:81,1 +DA:82,1 +DA:89,1 +DA:90,1 +DA:91,1 +DA:92,1 +DA:98,2 +LF:27 +LH:27 +end_of_record +SF:lib\features\stared_repos\domain\repo.dart +DA:27,3 +DA:29,10 +LF:2 +LH:2 +end_of_record +SF:lib\features\stared_repos\core\dependency_injection.dart +DA:20,3 +DA:21,2 +DA:26,3 +DA:27,1 +DA:28,2 +DA:29,1 +DA:35,3 +DA:36,1 +DA:37,2 +DA:38,1 +DA:44,3 +DA:45,1 +DA:46,2 +DA:47,2 +DA:48,1 +DA:49,3 +DA:56,3 +DA:57,1 +DA:58,2 +DA:59,1 +DA:65,3 +DA:66,1 +DA:67,2 +DA:68,1 +DA:74,3 +DA:75,1 +DA:76,2 +DA:77,2 +DA:78,1 +DA:85,3 +DA:86,1 +DA:87,2 +DA:88,1 +DA:94,1 +DA:95,2 +DA:96,2 +DA:97,2 +DA:98,3 +DA:99,3 +LF:39 +LH:39 +end_of_record +SF:lib\features\stared_repos\infrastructure\data_sources\etags_lds\interface.dart +DA:2,2 +LF:1 +LH:1 +end_of_record +SF:lib\features\stared_repos\infrastructure\data_sources\stared_repos_rds\interface.dart +DA:31,9 +LF:1 +LH:1 +end_of_record +SF:lib\features\stared_repos\infrastructure\data_sources\starred_repos_lds\interface.dart +DA:5,2 +LF:1 +LH:1 +end_of_record +SF:lib\features\stared_repos\infrastructure\external\etags_dio_interceptor.dart +DA:6,2 +DA:15,1 +DA:19,5 +DA:20,2 +DA:21,1 +DA:22,3 +DA:26,2 +DA:27,1 +DA:34,1 +DA:38,1 +DA:42,3 +DA:44,3 +DA:45,1 +DA:46,3 +DA:52,1 +LF:15 +LH:15 +end_of_record +SF:lib\features\stared_repos\infrastructure\data_sources\etags_lds\sembast_implementation.dart +DA:7,2 +DA:10,2 +DA:21,1 +DA:25,5 +DA:28,1 +DA:32,4 +LF:6 +LH:6 +end_of_record +SF:lib\features\stared_repos\infrastructure\data_sources\stared_repos_rds\rest_implementation.dart +DA:23,2 +DA:44,1 +DA:50,3 +DA:52,1 +DA:56,1 +DA:57,1 +DA:60,3 +DA:66,1 +DA:67,1 +DA:68,1 +DA:69,3 +DA:73,1 +DA:74,3 +DA:83,1 +DA:86,1 +DA:87,2 +DA:91,1 +DA:93,1 +DA:94,1 +DA:101,1 +DA:102,2 +DA:106,2 +DA:110,1 +DA:111,2 +DA:112,1 +DA:115,1 +DA:117,1 +DA:119,3 +DA:122,1 +DA:123,2 +DA:127,1 +LF:31 +LH:31 +end_of_record +SF:lib\features\stared_repos\infrastructure\data_sources\starred_repos_lds\sembast_implementation.dart +DA:10,2 +DA:13,2 +DA:24,1 +DA:28,4 +DA:29,1 +DA:30,1 +DA:31,2 +DA:37,1 +DA:40,5 +DA:42,1 +DA:44,2 +LF:11 +LH:11 +end_of_record +SF:lib\features\stared_repos\infrastructure\facades\starred_repos_repo\implementation.dart +DA:16,2 +DA:28,1 +DA:34,3 +DA:37,1 +DA:38,3 +DA:41,1 +DA:42,2 +DA:44,1 +DA:46,1 +DA:48,1 +DA:49,2 +DA:53,2 +DA:59,3 +DA:60,1 +DA:61,1 +DA:62,2 +LF:16 +LH:16 +end_of_record +SF:lib\features\stared_repos\infrastructure\converters\page.dart +DA:6,2 +DA:7,2 +DA:8,2 +DA:9,2 +DA:10,2 +DA:11,4 +DA:13,2 +DA:20,1 +DA:23,1 +DA:24,1 +DA:25,3 +DA:28,1 +DA:32,1 +DA:33,1 +DA:34,1 +DA:35,1 +DA:36,1 +DA:37,1 +LF:18 +LH:18 +end_of_record +SF:lib\features\stared_repos\infrastructure\converters\repo.dart +DA:6,4 +DA:7,4 +DA:8,2 +DA:9,2 +DA:10,2 +LF:5 +LH:5 +end_of_record +SF:lib\features\stared_repos\infrastructure\dtos\github_repo.dart +DA:35,2 +DA:36,2 +LF:2 +LH:2 +end_of_record +SF:lib\features\stared_repos\infrastructure\converters\user.dart +DA:5,6 +DA:6,3 +DA:7,3 +LF:3 +LH:3 +end_of_record +SF:lib\features\stared_repos\infrastructure\dtos\user.dart +DA:25,2 +DA:26,2 +LF:2 +LH:2 +end_of_record +SF:lib\features\users_placeholder\application\users_cubit\cubit.dart +DA:13,2 +DA:16,2 +DA:22,1 +DA:23,1 +DA:25,3 +DA:27,1 +DA:28,1 +DA:29,2 +DA:30,1 +DA:34,2 +DA:35,1 +LF:11 +LH:11 +end_of_record +SF:lib\features\users_placeholder\infrastructure\facades\interface.dart +DA:7,2 +LF:1 +LH:1 +end_of_record +SF:lib\features\users_placeholder\core\dependency_injection.dart +DA:16,3 +DA:17,2 +DA:18,1 +DA:24,3 +DA:25,1 +DA:26,1 +DA:27,1 +DA:28,1 +DA:35,3 +DA:36,1 +DA:37,2 +DA:39,1 +DA:40,1 +DA:41,2 +DA:42,1 +DA:45,1 +DA:46,2 +DA:47,1 +DA:54,3 +DA:55,1 +DA:56,2 +DA:57,1 +DA:63,3 +DA:64,1 +DA:65,2 +DA:66,1 +LF:26 +LH:26 +end_of_record +SF:lib\features\users_placeholder\infrastructure\data_sources\users_rds\gql_implementation.dart +DA:6,3 +DA:21,2 +DA:28,1 +DA:32,3 +DA:33,2 +DA:36,3 +DA:40,3 +DA:42,1 +DA:43,1 +DA:44,1 +DA:45,2 +DA:47,2 +DA:50,1 +DA:60,1 +LF:14 +LH:14 +end_of_record +SF:lib\features\users_placeholder\infrastructure\data_sources\users_rds\rest_implementation.dart +DA:9,2 +DA:16,1 +DA:23,3 +DA:26,1 +DA:27,1 +DA:28,1 +DA:29,3 +DA:38,1 +DA:41,1 +DA:42,2 +DA:46,1 +LF:11 +LH:11 +end_of_record +SF:lib\features\users_placeholder\infrastructure\data_sources\users_rds\interface.dart +DA:8,3 +LF:1 +LH:1 +end_of_record +SF:lib\features\users_placeholder\infrastructure\facades\implementation.dart +DA:11,2 +DA:18,1 +DA:22,3 +DA:23,1 +DA:24,1 +DA:25,1 +DA:26,1 +DA:31,1 +DA:32,2 +DA:35,2 +LF:10 +LH:10 +end_of_record +SF:lib\features\users_placeholder\infrastructure\converters\user.dart +DA:5,2 +DA:6,1 +DA:7,1 +DA:8,1 +LF:4 +LH:4 +end_of_record +SF:lib\features\users_placeholder\infrastructure\dto\user.dart +DA:14,2 +DA:15,2 +LF:2 +LH:2 +end_of_record