Format Go with gofmt, then golines -m 77 (closes #160)
check / check (push) Successful in 20s

REPO_POLICIES names gofmt then golines -m 77 as the Go formatter, says
what script/fmt, script/fmt-check and script/bootstrap do, and pins
golines v0.13.0 by commit hash. The Go style guide and both checklists
agree. lll stays at 88: golines leaves long strings and comments alone.

Model: opus-5-5
This commit is contained in:
sneak committed 2026-11-07 04:06:42 +00:00
1 parent 8c889fa622
commit 1d5923ac4f
5 files changed
+49 -14

No files matched your search

+5
View File
@@ -21,6 +21,11 @@ fmt-check, and commit.
# Completed Steps # Completed Steps
- 2026-11-07: Go code is now formatted with `gofmt` and then `golines -m 77`
(https://git.eeqj.de/sneak/prompts/issues/160). `prompts/REPO_POLICIES.md`
says how `script/fmt`, `script/fmt-check` and `script/bootstrap` do it and
pins `golines`. The Go style guide and both checklists say the same. `lll`
stays at 88, since `golines` leaves long strings and comments as they are.
- 2026-11-06: The pinning rule in `prompts/REPO_POLICIES.md` now opens with its - 2026-11-06: The pinning rule in `prompts/REPO_POLICIES.md` now opens with its
scope: what we download and install ourselves in scripts and Dockerfiles scope: what we download and install ourselves in scripts and Dockerfiles
(https://git.eeqj.de/sneak/prompts/issues/154). Distribution packages are (https://git.eeqj.de/sneak/prompts/issues/154). Distribution packages are
+8 -5
View File
@@ -1,13 +1,16 @@
--- ---
title: Code Styleguide — Go title: Code Styleguide — Go
last_modified: 2026-10-18 last_modified: 2026-11-07
--- ---
1. Try to hard wrap long lines at 77 characters or less. 1. Format Go code with `gofmt` and then `golines -m 77`, through `make fmt`.
Don't commit anything `make fmt` would change. The only exception is when
committing things that aren't yet syntactically valid, which should only
happen pre-v0.0.1 or on a non-`main` branch.
1. Don't commit anything that hasn't been `go fmt`'d. The only exception is 1. Hard wrap long lines at 77 characters or less. `golines` does this for code.
when committing things that aren't yet syntactically valid, which should Wrap comments and long string literals by hand, since `golines` leaves them
only happen pre-v0.0.1 or on a non-`main` branch. as they are.
1. Even if you are planning to deal with only positive integers, use 1. Even if you are planning to deal with only positive integers, use
`int`/`int64` types instead of `uint`/`uint64` types. This is for `int`/`int64` types instead of `uint`/`uint64` types. This is for
+8 -3
View File
@@ -1,6 +1,6 @@
--- ---
title: Existing Repo Checklist title: Existing Repo Checklist
last_modified: 2026-11-06 last_modified: 2026-11-07
--- ---
Use this checklist when beginning work in a repo that may not yet conform to our Use this checklist when beginning work in a repo that may not yet conform to our
@@ -259,8 +259,13 @@ with your task.
# Formatting # Formatting
- [ ] Platform-standard formatter is configured (`black`, `prettier`, `go fmt`) - [ ] Platform-standard formatter is configured (`black`, `prettier`, and for Go
- [ ] Default formatter config, only exception: four-space indents (except Go) `gofmt` then `golines -m 77`)
- [ ] Default formatter config, except four-space indents (not Go),
`proseWrap: always` for Markdown, and the Go 77-column limit
- [ ] Go: `script/bootstrap` installs `golines` with `go install` pinned to a
commit hash; `script/fmt-check` fails when `gofmt` or `golines -m 77`
would change a file
- [ ] All files pass `make fmt-check` - [ ] All files pass `make fmt-check`
# Git Hygiene # Git Hygiene
+5 -3
View File
@@ -1,6 +1,6 @@
--- ---
title: New Repo Checklist title: New Repo Checklist
last_modified: 2026-11-06 last_modified: 2026-11-07
--- ---
Use this checklist when creating a new repository from scratch. Follow the steps Use this checklist when creating a new repository from scratch. Follow the steps
@@ -233,9 +233,11 @@ are thin shims calling them. Model scripts:
which writes no image. No lint verdict may come from a host invocation of which writes no image. No lint verdict may come from a host invocation of
the linter. the linter.
- [ ] `script/fmt` / `make fmt` — formats code (writes; native, never in a - [ ] `script/fmt` / `make fmt` — formats code (writes; native, never in a
container) container). Go code gets `gofmt`, then `golines -m 77`.
- [ ] `script/fmt-check` / `make fmt-check` — checks formatting (read-only; - [ ] `script/fmt-check` / `make fmt-check` — checks formatting (read-only;
native) native). Fails when `gofmt` or `golines -m 77` would change a Go file.
- [ ] Go: `script/bootstrap` installs `golines` with `go install` pinned to a
commit hash
- [ ] `script/check` / `make check` — runs `test`, `lint`, `fmt-check`; must not - [ ] `script/check` / `make check` — runs `test`, `lint`, `fmt-check`; must not
modify files modify files
- [ ] `script/projectname` — outputs the project name (used by `script/docker` - [ ] `script/projectname` — outputs the project name (used by `script/docker`
+23 -3
View File
@@ -1,6 +1,6 @@
--- ---
title: Repository Policies title: Repository Policies
last_modified: 2026-11-06 last_modified: 2026-11-07
--- ---
This document covers repository structure, tooling, and workflow standards. Code This document covers repository structure, tooling, and workflow standards. Code
@@ -675,11 +675,31 @@ style conventions are in separate documents:
- Use platform-standard formatters: - Use platform-standard formatters:
- `black` for Python - `black` for Python
- `prettier` for JS/CSS/Markdown/HTML - `prettier` for JS/CSS/Markdown/HTML
- `go fmt` for Go - `gofmt`, then `golines -m 77`, for Go
Always use default configuration, with two exceptions: Always use default configuration, with three exceptions:
- four-space indents (except Go) - four-space indents (except Go)
- `proseWrap: always` for Markdown (hard-wrap at 80 columns) - `proseWrap: always` for Markdown (hard-wrap at 80 columns)
- a 77-column limit for Go, set by `golines -m 77`
`script/fmt` runs `gofmt` and then `golines -m 77` on Go code.
`script/fmt-check` fails when either of them would change a file. `golines`
comes from `github.com/segmentio/golines`. `script/bootstrap` installs it
with `go install`, pinned to a commit hash as below:
```sh
# golines v0.13.0, 2025-08-21
go install github.com/segmentio/golines@8f32f0f7e89c30f572c7f2cd3b2a48016b9d8bbf
```
`script/bootstrap` reads the installed version from the `mod` line of
`go version -m "$(command -v golines)"`, which reports `v0.13.0`. It does
not use `golines --version`, which prints `golines vdev` for a binary that
`go install` built.
`golines` cannot shorten every line: long string literals and comments stay
as they are. golangci-lint's `lll` limit therefore stays at 88 columns, so
it fails only lines far past the formatter's limit.
Documentation and writing repos (Markdown, HTML, CSS) should also have Documentation and writing repos (Markdown, HTML, CSS) should also have
`.prettierrc` and `.prettierignore`. `.prettierrc` and `.prettierignore`.