Updates to path stripping behavior (#665)
diff --git a/lib/src/utils.dart b/lib/src/utils.dart
index cfcdd80..2a37c9d 100644
--- a/lib/src/utils.dart
+++ b/lib/src/utils.dart
@@ -1,18 +1,43 @@
import 'package:path/path.dart' as path;
-String stripFilePaths(String s) {
- return s.replaceAllMapped(RegExp(r'(?:package:?)?[a-z]*\/\S*'), (match) {
+/// Matches any path in the string and replaces the part of the path before the
+/// last separator with either dart:core, package:flutter, or removes it.
+///
+/// ## Examples:
+///
+/// "Unused import: '/path/foo.dart'" -> "Unused import: 'foo.dart'"
+///
+/// "Unused import: '/path/to/dart/lib/world.dart'" -> "Unused import:
+/// 'dart:core/world.dart'"
+///
+/// "Unused import: 'package:flutter/material.dart'" -> "Unused import:
+/// 'package:flutter/material.dart'"
+String stripFilePaths(String str) {
+ // Match any URI. Also match URIs that are prefixed with dart:core or
+ // package:*
+ final regex = RegExp(r'(?:dart:core?)?(?:package:?)?[a-z]*\/\S*');
+
+ return str.replaceAllMapped(regex, (match) {
final urlString = match.group(0);
final pathComponents = path.split(urlString);
- final isDartPath = pathComponents.contains('lib');
- final isFlutterPath = isDartPath && pathComponents.contains('flutter');
+ final isDartPath =
+ pathComponents.contains('lib') && pathComponents.contains('core');
+
+ // matches the 'flutter' package in the SDK
+ final isFlutterPath = pathComponents.contains('flutter');
+
final isPackagePath = urlString.contains('package:');
+ final isDartCorePath = urlString.contains('dart:core');
final basename = path.basename(urlString);
if (isFlutterPath) {
return path.join('package:flutter', basename);
}
+ if (isDartCorePath) {
+ return urlString;
+ }
+
if (isDartPath) {
return path.join('dart:core', basename);
}
diff --git a/test/utils_test.unit b/test/utils_test.unit
index 9c6ad3f..e1a9d3d 100644
--- a/test/utils_test.unit
+++ b/test/utils_test.unit
@@ -3,7 +3,7 @@
<<<
List is defined in main.dart
>>> Strips Dart SDK paths
-List is defined in /Users/ryjohn/.dvm/darts/2.10.5/lib/core/list.dart
+List is defined in /path/dart/dart/sdk/lib/core/list.dart
<<<
List is defined in dart:core/list.dart
>>> Strips SDK and temporary directory paths
@@ -14,6 +14,10 @@
Unused import: 'package:flutter/material.dart'.
<<<
Unused import: 'package:flutter/material.dart'.
+>>> Keeps dart:core paths intact
+dart:core/foo.dart
+<<<
+dart:core/foo.dart
>>> Strips Flutter SDK paths
The argument type 'StatelessWidget (where StatelessWidget is defined in /Users/username/path/to/dart-services/project_templates/flutter_project/main.dart)' can't be assigned to the parameter type 'StatelessWidget (where StatelessWidget is defined in /Users/username/path/to/dart-services/flutter-sdk/packages/flutter/lib/src/widgets/framework.dart)'.
<<<