X-Git-Url: https://git.giacomolli.uk/onechat/blobdiff_plain/08e0085ca971f59da8b3ecda532ffe6203b6c68c..790279faf0fda789d93a75f6f5996e65d5de4a18:/.agents/skills/go-code/SKILL.md?ds=inline diff --git a/.agents/skills/go-code/SKILL.md b/.agents/skills/go-code/SKILL.md index a9e705b..086360a 100644 --- a/.agents/skills/go-code/SKILL.md +++ b/.agents/skills/go-code/SKILL.md @@ -15,6 +15,15 @@ description: Go style rules. Use before you write or review Go code. methods in one file. Give a separate responsibility its own type. - When code in one file gets a user in another file for an unrelated purpose, move it to a file named for its function in the same change. +- Start each package-level name that belongs to one feature or + integration with the name of that feature. Start the names of its + files with the same name. Keep a name generic only when more than one + feature uses it. +- Write type names with a capital letter, so that a variable can have + the name of its type. Write all other package-level names in lower + case. +- Write all the letters of an initialism in one case. `revive` checks + common initialisms. - Put entry points first, then each struct's methods as a group, then standalone utility functions. Do not put a utility function between the methods of one type. @@ -39,9 +48,12 @@ description: Go style rules. Use before you write or review Go code. different variable only to keep or join errors. - Use `errors.Is` and `errors.As` to examine errors. Do not compare an error directly with a sentinel, because errors can be wrapped. + `errorlint` checks comparisons and type assertions on errors. - When a function has more than one error path, wrap each returned error with the context of its operation. A function with one error path can - return the error directly. + return the error directly. `wrapcheck` checks package and interface + calls, with the exceptions in `.golangci.yml`. Review local calls and + the number of error paths by hand. - When deferred cleanup can fail, use a named `err` result and join the cleanup error with `errors.Join`. @@ -60,7 +72,8 @@ description: Go style rules. Use before you write or review Go code. - Put an empty line between logical blocks, also after multiline declarations, assignments, literals, and calls. Keep an operation with its immediate error or result check. Keep a short declaration with its - immediate use. + immediate use. `wsl_v5` and `nlreturn` check part of this rule. Review + the remaining logical blocks and immediate-use groups by hand. - Use GNU-style command flags: two dashes for long flags, such as `--cwd`, and one dash only for one-letter flags, such as `-h`. - Prefer the Go standard library. Prefer Go over cgo. @@ -78,11 +91,15 @@ description: Go style rules. Use before you write or review Go code. - Add tests for meaningful behavior. Do not add tests that only repeat implementation details. -- Use `testify/require` for assertions. +- Use `testify/require` for assertions. `testifylint` checks the + assertion forms. - Name a table-driven case slice `testCases` and its range variable `tc`. A subtest name describes the behavior, not a generic outcome or input. - In a test file, put constants immediately after the imports, then the tests, then supporting types, methods, and helpers. +- Keep a helper that only one test file uses in that file. Put a helper + that more than one test file uses in a file without tests. Name that + file for what it holds, and end the name with `_helper_test.go`. - Supply valid required dependencies in tests. Do not make a dependency optional only to make a test simpler.