aboutsummaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-05-31 13:07:40 -0500
committerCraig Jennings <c@cjennings.net>2026-05-31 13:07:40 -0500
commit47ca509e69b6a1472a735a4b9521a952e7434491 (patch)
tree9101eb376d233c455f653ad857474b3a0dae767f /Makefile
parentaf478a42b18c4d5e0712c4cb43036126d36c56b5 (diff)
downloadrulesets-47ca509e69b6a1472a735a4b9521a952e7434491.tar.gz
rulesets-47ca509e69b6a1472a735a4b9521a952e7434491.zip
feat(go): add coverage-summary as a Go bundle coverage slice
Third language in the coverage-summary fan-out, after Elisp and Python. Same kernel: count every source file on disk that's absent from the coverage profile as 0% and weight the project number by file, so an untested file stays visible instead of being averaged away. The script at languages/go/claude/scripts/coverage-summary.go parses a cover.out profile, maps each import-path-qualified entry back to an on-disk relative path using the module path from go.mod, and reports a file-weighted number plus the missing files. It's standard library only, so it runs anywhere via go run, and it doesn't reimplement the per-function table that go tool cover -func already prints. I proved it against a real go test -coverprofile run, not just a synthetic fixture, since the Go toolchain is installed here. Two findings to flag. Modern go test ./... already lists every module package in the profile at 0% even when untested, so for in-module code the missing-file list is usually empty. The detection earns its keep on build-tagged files and dirs outside ./.... And this is a coverage-only slice of a Go bundle that doesn't otherwise exist yet: there's no go.md rule file, so sync-language-bundle.sh can't fingerprint it (detection keys on a bundle's own .claude/rules). The script installs via make install-lang LANG=go but won't be sync-maintained until the Go bundle gets real rules and a CLAUDE.md. Building that out is the natural companion task. Tests are black-box: a Go test in its own throwaway module runs the script via go run against temp fixtures and checks output, so the shipped script dir stays test-free. They cover missing-file detection, all-tracked, _test.go exclusion, and the missing-report error. make test gained a go test discovery path for languages/*/tests, guarded so environments without Go skip it cleanly.
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile9
1 files changed, 9 insertions, 0 deletions
diff --git a/Makefile b/Makefile
index f9426f4..b8f34cb 100644
--- a/Makefile
+++ b/Makefile
@@ -468,6 +468,15 @@ test: ## Run all test suites (pytest + ERT + bats)
echo "pytest: $$d"; \
( cd "$$d" && python3 -m pytest -q ); \
done
+ @if command -v go >/dev/null 2>&1; then \
+ set -e; for d in languages/*/tests; do \
+ ls "$$d"/*_test.go >/dev/null 2>&1 || continue; \
+ echo "go test: $$d"; \
+ ( cd "$$d" && go test ./... ); \
+ done; \
+ else \
+ echo "go test: skipped (go not installed)"; \
+ fi
@set -e; for f in .ai/scripts/tests/test-*.el; do \
[ -e "$$f" ] || continue; \
echo "ert: $$(basename "$$f")"; \