summaryrefslogtreecommitdiff
path: root/cli/fs_util.rs
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2022-02-16 13:14:19 -0500
committerGitHub <noreply@github.com>2022-02-16 13:14:19 -0500
commitb98afb59ae43b4fcfc2bf06e82942005d7f68c7b (patch)
treeba56c8fc5b287f19892c1f584bd5c65992b766fb /cli/fs_util.rs
parent02c95d367e94f55f525646c2759558f52a493c69 (diff)
feat: deno vendor (#13670)
Diffstat (limited to 'cli/fs_util.rs')
-rw-r--r--cli/fs_util.rs68
1 files changed, 68 insertions, 0 deletions
diff --git a/cli/fs_util.rs b/cli/fs_util.rs
index fbdcdc81a..2f10a523f 100644
--- a/cli/fs_util.rs
+++ b/cli/fs_util.rs
@@ -362,6 +362,34 @@ pub fn path_has_trailing_slash(path: &Path) -> bool {
}
}
+/// Gets a path with the specified file stem suffix.
+///
+/// Ex. `file.ts` with suffix `_2` returns `file_2.ts`
+pub fn path_with_stem_suffix(path: &Path, suffix: &str) -> PathBuf {
+ if let Some(file_name) = path.file_name().map(|f| f.to_string_lossy()) {
+ if let Some(file_stem) = path.file_stem().map(|f| f.to_string_lossy()) {
+ if let Some(ext) = path.extension().map(|f| f.to_string_lossy()) {
+ return if file_stem.to_lowercase().ends_with(".d") {
+ path.with_file_name(format!(
+ "{}{}.{}.{}",
+ &file_stem[..file_stem.len() - ".d".len()],
+ suffix,
+ // maintain casing
+ &file_stem[file_stem.len() - "d".len()..],
+ ext
+ ))
+ } else {
+ path.with_file_name(format!("{}{}.{}", file_stem, suffix, ext))
+ };
+ }
+ }
+
+ path.with_file_name(format!("{}{}", file_name, suffix))
+ } else {
+ path.with_file_name(suffix)
+ }
+}
+
#[cfg(test)]
mod tests {
use super::*;
@@ -730,4 +758,44 @@ mod tests {
assert_eq!(result, expected);
}
}
+
+ #[test]
+ fn test_path_with_stem_suffix() {
+ assert_eq!(
+ path_with_stem_suffix(&PathBuf::from("/"), "_2"),
+ PathBuf::from("/_2")
+ );
+ assert_eq!(
+ path_with_stem_suffix(&PathBuf::from("/test"), "_2"),
+ PathBuf::from("/test_2")
+ );
+ assert_eq!(
+ path_with_stem_suffix(&PathBuf::from("/test.txt"), "_2"),
+ PathBuf::from("/test_2.txt")
+ );
+ assert_eq!(
+ path_with_stem_suffix(&PathBuf::from("/test/subdir"), "_2"),
+ PathBuf::from("/test/subdir_2")
+ );
+ assert_eq!(
+ path_with_stem_suffix(&PathBuf::from("/test/subdir.other.txt"), "_2"),
+ PathBuf::from("/test/subdir.other_2.txt")
+ );
+ assert_eq!(
+ path_with_stem_suffix(&PathBuf::from("/test.d.ts"), "_2"),
+ PathBuf::from("/test_2.d.ts")
+ );
+ assert_eq!(
+ path_with_stem_suffix(&PathBuf::from("/test.D.TS"), "_2"),
+ PathBuf::from("/test_2.D.TS")
+ );
+ assert_eq!(
+ path_with_stem_suffix(&PathBuf::from("/test.d.mts"), "_2"),
+ PathBuf::from("/test_2.d.mts")
+ );
+ assert_eq!(
+ path_with_stem_suffix(&PathBuf::from("/test.d.cts"), "_2"),
+ PathBuf::from("/test_2.d.cts")
+ );
+ }
}