Build a CLI Tool
Build a command-line tool with argument parsing, file I/O, and error handling.
The Tool: Line Counter
wyn
var file = Args.get("file")
var verbose = Args.has("verbose")
if file == "" {
println("Usage: linecount --file <path> [--verbose]")
} else {
if !File.exists(file) {
Log.error("file not found: " + file)
} else {
var content = File.read(file)
var lines = content.lines()
var count = lines.len()
if verbose {
for i in 0..count {
println("${i}: ${lines[i]}")
}
}
println("${count} lines")
}
}Build and Run
sh
wyn build linecount.wyn -o linecount
./linecount --file main.wyn --verboseAdd More Features
Word count
wyn
var words = 0
for line in lines {
words = words + line.words().len()
}
println("${words} words")JSON output
wyn
if Args.has("json") {
println("{\"lines\": ${count}, \"words\": ${words}}")
}Multiple files
wyn
var files = Args.positional()
var total = 0
for f in files {
var content = File.read(f)
var n = content.lines().len()
println("${f}: ${n}")
total = total + n
}
println("total: ${total}")See Also
- Args — parse command-line arguments
- File I/O — read and write files
- Strings — string manipulation
- Cross-Compilation — build for Linux, Windows, macOS
- 425KB Hello World — why Wyn binaries are tiny