# https://taskfile.dev version: '3' vars: BINARY: statusline LDFLAGS: -s -w tasks: default: desc: Build the statusline binary cmds: - task: build build: desc: Build with stripped symbols cmds: - go build -ldflags="{{.LDFLAGS}}" -o bin/{{.BINARY}} . sources: - "*.go" - go.mod - go.sum generates: - "bin/{{.BINARY}}" build:debug: desc: Build with debug symbols cmds: - go build -o bin/{{.BINARY}} . run: desc: Run with test fixture deps: [build] cmds: - cat test/fixture.json | ./bin/{{.BINARY}} test: desc: Run Go unit tests cmds: - go test -v ./... test:cover: desc: Run tests with coverage cmds: - go test -cover ./... test:fixture: desc: Run with test fixture and show output deps: [build] cmds: - echo "=== Output ===" - cat test/fixture.json | ./bin/{{.BINARY}} - echo "" - echo "=== Timing (single run) ===" - time sh -c 'cat test/fixture.json | ./bin/{{.BINARY}} > /dev/null' bench: desc: Benchmark Go vs Shell (100 runs) deps: [build] cmds: - | echo "=== Pure Go (100 runs) ===" time for i in $(seq 1 100); do cat test/fixture.json | ./bin/{{.BINARY}} >/dev/null; done # echo "" # echo "=== Shell (100 runs) ===" # time for i in $(seq 1 100); do cat test/fixture.json | ./statusline.sh >/dev/null; done silent: false bench:go: desc: Benchmark Go only (100 runs) deps: [build] cmds: - | echo "=== Pure Go (100 runs) ===" time for i in $(seq 1 100); do cat test/fixture.json | ./bin/{{.BINARY}} >/dev/null; done tidy: desc: Run go mod tidy cmds: - go mod tidy lint: desc: Run golangci-lint cmds: - golangci-lint run lint:fix: desc: Run golangci-lint with auto-fix cmds: - golangci-lint run --fix modernize: desc: Apply gopls modernize fixes cmds: - go run golang.org/x/tools/gopls/internal/analysis/modernize/cmd/modernize@latest -fix ./... modernize:test: desc: Apply gopls modernize fixes including tests cmds: - go run golang.org/x/tools/gopls/internal/analysis/modernize/cmd/modernize@latest -fix -test ./... clean: desc: Remove built binary cmds: - rm -rf bin/ size: desc: Show binary size deps: [build] cmds: - ls -lh bin/{{.BINARY}} install: desc: Install to ~/.claude/ deps: [build] cmds: - mkdir -p ~/.claude - cp bin/{{.BINARY}} ~/.claude/{{.BINARY}} - echo "Installed to ~/.claude/{{.BINARY}}"