aboutsummaryrefslogtreecommitdiff
path: root/languages/go/coverage-makefile.txt
diff options
context:
space:
mode:
Diffstat (limited to 'languages/go/coverage-makefile.txt')
-rw-r--r--languages/go/coverage-makefile.txt43
1 files changed, 43 insertions, 0 deletions
diff --git a/languages/go/coverage-makefile.txt b/languages/go/coverage-makefile.txt
new file mode 100644
index 0000000..7aba9e9
--- /dev/null
+++ b/languages/go/coverage-makefile.txt
@@ -0,0 +1,43 @@
+# Go coverage — Makefile fragment + setup recommendation
+#
+# This file is owned by the project, not the rulesets bundle. The bundle never
+# edits your Makefile. Copy the two targets below into your own Makefile (and
+# adjust the variables at the top), then delete this file or keep it as a note.
+#
+# What you get:
+# make coverage runs the suite with a coverage profile and prints
+# `go tool cover -func`'s own per-function table
+# make coverage-summary prints a file-weighted project number and every
+# source file on disk absent from the profile, at 0%.
+#
+# Why the summary matters: it weights by file and counts a file absent from the
+# profile as 0%, so an untested file stays visible instead of being averaged
+# away. Note that modern `go test ./...` already lists every module package in
+# the profile (at 0% when untested), so for in-module code the missing-file list
+# is usually empty; it earns its keep on files outside the test compilation
+# (build-tagged files, a dir not covered by ./...). The summary does not
+# reimplement the per-function table — `go tool cover -func` already prints it.
+#
+# ---------------------------------------------------------------------------
+# Prerequisite: none beyond the Go toolchain. `go test -coverprofile` and
+# `go tool cover` ship with Go; the summary script is pure standard library.
+# ---------------------------------------------------------------------------
+
+# Variables — adjust to your layout.
+GO ?= go
+SOURCE_DIR ?= .
+COVERAGE_FILE ?= cover.out
+# The summary script ships with the bundle under .claude/scripts/ (gitignored).
+COVERAGE_SUMMARY ?= .claude/scripts/coverage-summary.go
+
+coverage:
+ @$(GO) test ./... -coverprofile=$(COVERAGE_FILE)
+ @$(GO) tool cover -func=$(COVERAGE_FILE)
+ @$(MAKE) coverage-summary
+
+coverage-summary:
+ @if [ ! -f $(COVERAGE_FILE) ]; then \
+ echo "[!] No coverage file at $(COVERAGE_FILE). Run 'make coverage' first."; \
+ exit 1; \
+ fi
+ @$(GO) run $(COVERAGE_SUMMARY) $(COVERAGE_FILE) $(SOURCE_DIR) .