Function extension [src]

Searches for a file extension separated by a . and returns the string after that .. Files that end or start with . and have no other . in their name are considered to have no extension, in which case this returns "". Examples: "main.zig" ⇒ ".zig" "src/main.zig" ⇒ ".zig" ".gitignore" ⇒ "" ".image.png" ⇒ ".png" "keep." ⇒ "." "src.keep.me" ⇒ ".me" "/src/keep.me" ⇒ ".me" "/src/keep.me/" ⇒ ".me" The returned slice is guaranteed to have its pointer within the start and end pointer address range of path, even if it is length zero.

Prototype

pub fn extension(path: []const u8) []const u8

Parameters

path: []const u8

Example

test extension { try testExtension("", ""); try testExtension(".", ""); try testExtension("a.", "."); try testExtension("abc.", "."); try testExtension(".a", ""); try testExtension(".file", ""); try testExtension(".gitignore", ""); try testExtension(".image.png", ".png"); try testExtension("file.ext", ".ext"); try testExtension("file.ext.", "."); try testExtension("very-long-file.bruh", ".bruh"); try testExtension("a.b.c", ".c"); try testExtension("a.b.c/", ".c"); try testExtension("/", ""); try testExtension("/.", ""); try testExtension("/a.", "."); try testExtension("/abc.", "."); try testExtension("/.a", ""); try testExtension("/.file", ""); try testExtension("/.gitignore", ""); try testExtension("/file.ext", ".ext"); try testExtension("/file.ext.", "."); try testExtension("/very-long-file.bruh", ".bruh"); try testExtension("/a.b.c", ".c"); try testExtension("/a.b.c/", ".c"); try testExtension("/foo/bar/bam/", ""); try testExtension("/foo/bar/bam/.", ""); try testExtension("/foo/bar/bam/a.", "."); try testExtension("/foo/bar/bam/abc.", "."); try testExtension("/foo/bar/bam/.a", ""); try testExtension("/foo/bar/bam/.file", ""); try testExtension("/foo/bar/bam/.gitignore", ""); try testExtension("/foo/bar/bam/file.ext", ".ext"); try testExtension("/foo/bar/bam/file.ext.", "."); try testExtension("/foo/bar/bam/very-long-file.bruh", ".bruh"); try testExtension("/foo/bar/bam/a.b.c", ".c"); try testExtension("/foo/bar/bam/a.b.c/", ".c"); }

Source

pub fn extension(path: []const u8) []const u8 { const filename = basename(path); const index = mem.lastIndexOfScalar(u8, filename, '.') orelse return path[path.len..]; if (index == 0) return path[path.len..]; return filename[index..]; }