Skip to content

Build a CLI Tool

Build a command-line tool with argument parsing, file I/O, and error handling.

The Tool: Line Counter

wyn
file = Args.get("file")
verbose = Args.has("verbose")

if file == "" {
    print("Usage: linecount --file <path> [--verbose]")
} else {
    if not File.exists(file) {
        Log.error("file not found: " + file)
    } else {
        content = File.read(file)
        lines = content.lines()
        count = lines.len()

        if verbose {
            for i in 0..count {
                print("${i}: ${lines[i]}")
            }
        }

        print("${count} lines")
    }
}

Build and Run

sh
wyn build linecount.wyn -o linecount
./linecount --file main.wyn --verbose

Add More Features

Word count

wyn
var words = 0
for line in lines {
    words = words + line.words().len()
}
print("${words} words")

JSON output

wyn
if Args.has("json") {
    print("{\"lines\": ${count}, \"words\": ${words}}")
}

Multiple files

wyn
files = Args.positional()
total = 0
for f in files {
    content = File.read(f)
    n = content.lines().len()
    print("${f}: ${n}")
    total = total + n
}
print("total: ${total}")

See Also

MIT License - v1.21.0