aboutsummaryrefslogtreecommitdiff
path: root/languages/go/coverage-makefile.txt
blob: 7aba9e92c2a6fb054f36a67c4642d5cc11137ae3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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) .