Index: pkg/path/lib/path.dart |
diff --git a/pkg/path/lib/path.dart b/pkg/path/lib/path.dart |
index bb88953f36c0f2e13c25d46ade9ab8d6e3184835..4b87cde6309d6c7109162424b13da4b441ec8933 100644 |
--- a/pkg/path/lib/path.dart |
+++ b/pkg/path/lib/path.dart |
@@ -1043,7 +1043,8 @@ class _ParsedPath { |
/// path ends with a trailing separator. |
List<String> separators; |
- /// The file extension of the last part, or "" if it doesn't have one. |
+ /// The file extension of the last non-empty part, or "" if it doesn't have |
+ /// one. |
String get extension => _splitExtension()[1]; |
/// `true` if this is an absolute path. |
@@ -1059,12 +1060,7 @@ class _ParsedPath { |
return copy.parts.last; |
} |
- String get basenameWithoutExtension { |
- var copy = this.clone(); |
- copy.removeTrailingSeparators(); |
- if (copy.parts.isEmpty) return root == null ? '' : root; |
- return copy._splitExtension()[0]; |
- } |
+ String get basenameWithoutExtension => _splitExtension()[0]; |
bool get hasTrailingSeparator => |
!parts.isEmpty && (parts.last == '' || separators.last != ''); |
@@ -1137,13 +1133,15 @@ class _ParsedPath { |
return builder.toString(); |
} |
- /// Splits the last part of the path into a two-element list. The first is |
- /// the name of the file without any extension. The second is the extension |
- /// or "" if it has none. |
+ /// Splits the last non-empty part of the path into a `[basename, extension`] |
+ /// pair. |
+ /// |
+ /// Returns a two-element list. The first is the name of the file without any |
+ /// extension. The second is the extension or "" if it has none. |
List<String> _splitExtension() { |
- if (parts.isEmpty) return ['', '']; |
+ var file = parts.lastWhere((p) => p != '', orElse: () => null); |
- var file = parts.last; |
+ if (file == null) return ['', '']; |
if (file == '..') return ['..', '']; |
var lastDot = file.lastIndexOf('.'); |