zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit a42c7129347e6e5668b1001ff6f2fc97a89b0510 (tree)
parent 1bbf731e7ef6ca738026ee82a8f50bf114efbf8c
Author: Andrew Kelley <andrew@ziglang.org>
Date:   Fri, 11 Dec 2020 18:20:57 -0700

std.fs.path.extension: different behavior for ending dot

extension("a.") now returns "." instead of "".

This matches both Python and Node.js standard library behavior as well
as my personal opinion on how this function should be defined.

Apologies for missing this in the code review.

Diffstat:
Mlib/std/fs/path.zig | 30+++++++++++++-----------------
1 file changed, 13 insertions(+), 17 deletions(-)

diff --git a/lib/std/fs/path.zig b/lib/std/fs/path.zig @@ -1197,7 +1197,7 @@ fn testRelativeWindows(from: []const u8, to: []const u8, expected_output: []cons /// - `"main.zig"` ⇒ `".zig"` /// - `"src/main.zig"` ⇒ `".zig"` /// - `".gitignore"` ⇒ `""` -/// - `"keep."` ⇒ `""` +/// - `"keep."` ⇒ `"."` /// - `"src.keep.me"` ⇒ `".me"` /// - `"/src/keep.me"` ⇒ `".me"` /// - `"/src/keep.me/"` ⇒ `".me"` @@ -1205,13 +1205,9 @@ fn testRelativeWindows(from: []const u8, to: []const u8, expected_output: []cons /// pointer address range of `path`, even if it is length zero. pub fn extension(path: []const u8) []const u8 { const filename = basename(path); - return if (std.mem.lastIndexOf(u8, filename, ".")) |index| - if (index == 0 or index == filename.len - 1) - path[path.len..] - else - filename[index..] - else - path[path.len..]; + const index = mem.lastIndexOf(u8, filename, ".") orelse return path[path.len..]; + if (index == 0) return path[path.len..]; + return filename[index..]; } fn testExtension(path: []const u8, expected: []const u8) void { @@ -1221,39 +1217,39 @@ fn testExtension(path: []const u8, expected: []const u8) void { test "extension" { testExtension("", ""); testExtension(".", ""); - testExtension("a.", ""); - testExtension("abc.", ""); + testExtension("a.", "."); + testExtension("abc.", "."); testExtension(".a", ""); testExtension(".file", ""); testExtension(".gitignore", ""); testExtension("file.ext", ".ext"); - testExtension("file.ext.", ""); + testExtension("file.ext.", "."); testExtension("very-long-file.bruh", ".bruh"); testExtension("a.b.c", ".c"); testExtension("a.b.c/", ".c"); testExtension("/", ""); testExtension("/.", ""); - testExtension("/a.", ""); - testExtension("/abc.", ""); + testExtension("/a.", "."); + testExtension("/abc.", "."); testExtension("/.a", ""); testExtension("/.file", ""); testExtension("/.gitignore", ""); testExtension("/file.ext", ".ext"); - testExtension("/file.ext.", ""); + testExtension("/file.ext.", "."); testExtension("/very-long-file.bruh", ".bruh"); testExtension("/a.b.c", ".c"); testExtension("/a.b.c/", ".c"); testExtension("/foo/bar/bam/", ""); testExtension("/foo/bar/bam/.", ""); - testExtension("/foo/bar/bam/a.", ""); - testExtension("/foo/bar/bam/abc.", ""); + testExtension("/foo/bar/bam/a.", "."); + testExtension("/foo/bar/bam/abc.", "."); testExtension("/foo/bar/bam/.a", ""); testExtension("/foo/bar/bam/.file", ""); testExtension("/foo/bar/bam/.gitignore", ""); testExtension("/foo/bar/bam/file.ext", ".ext"); - testExtension("/foo/bar/bam/file.ext.", ""); + testExtension("/foo/bar/bam/file.ext.", "."); testExtension("/foo/bar/bam/very-long-file.bruh", ".bruh"); testExtension("/foo/bar/bam/a.b.c", ".c"); testExtension("/foo/bar/bam/a.b.c/", ".c");