cat / 012
clone

a spreadsheet for the terminal: lotus 1-2-3 looks, google sheets keys and formulas, one go binary

Split the docs checks and the config overview under the complexity limit

Dami committed fba67d1
commit
fba67d140fb58e82e4f9f492e4d049b80955d81b
parent
082e5a38bff61e648d7d956fb5f3e97f9ac8d8c2
author
Dami <dami.etoile@gmail.com>
3 files changed, +69 -50
Minternal/config/docs.go46+++++++++++++++++-------------
Minternal/config/docs_test.go40+++++++++++++++-----------
Minternal/ui/docs_test.go33+++++++++++++--------
M internal/config/docs.go +26 -20
@@ -12,26 +12,7 @@ const DocsMarker = "<!-- Generated from internal/config/registry.go by `go test
1212 // Reference is the option reference in Markdown, one section per group.1313 func Reference() string {1414 var b strings.Builder15- b.WriteString("\n| Option | Default | Environment, flag |\n|---|---|---|\n")16- for _, g := range Groups {17- for _, o := range Options {18- if o.Group != g {19- continue20- }21- def := ""22- if o.Default != "" {23- def = "`" + o.Default + "`"24- }25- var via []string26- for _, e := range o.Env {27- via = append(via, "`"+e+"`")28- }29- if o.Flag != "" {30- via = append(via, "`"+o.Flag+"`")31- }32- fmt.Fprintf(&b, "| [`%s`](#%s) | %s | %s |\n", o.Name, o.Name, def, strings.Join(via, ", "))33- }34- }15+ overview(&b)3516 for _, g := range Groups {3617 fmt.Fprintf(&b, "\n### %s\n", g)3718 for _, o := range Options {
@@ -71,3 +52,28 @@ func (o *Option) typeDoc() string {
7152 }7253 return o.Kind.String()7354 }55+56+// overview is a table of every option, its default and where else it's57+// set, linking to its section.58+func overview(b *strings.Builder) {59+ b.WriteString("\n| Option | Default | Environment, flag |\n|---|---|---|\n")60+ for _, g := range Groups {61+ for _, o := range Options {62+ if o.Group != g {63+ continue64+ }65+ def := ""66+ if o.Default != "" {67+ def = "`" + o.Default + "`"68+ }69+ var via []string70+ for _, e := range o.Env {71+ via = append(via, "`"+e+"`")72+ }73+ if o.Flag != "" {74+ via = append(via, "`"+o.Flag+"`")75+ }76+ fmt.Fprintf(b, "| [`%s`](#%s) | %s | %s |\n", o.Name, o.Name, def, strings.Join(via, ", "))77+ }78+ }79+}
M internal/config/docs_test.go +23 -17
@@ -40,26 +40,32 @@ func TestDocsNameOptions(t *testing.T) {
4040 if err != nil {4141 t.Fatal(err)4242 }43- name := strings.TrimPrefix(p, "../../")44- check := func(key string) {45- if _, ok := Lookup(key); !ok && key != "key" {46- t.Errorf("%s names setting %q, which isn't an option", name, key)47- }48- }49- for _, m := range inlineSetting.FindAllStringSubmatch(string(data), -1) {50- check(m[1])43+ checkDocOptions(t, strings.TrimPrefix(p, "../../"), string(data), env)44+ }45+}46+47+// checkDocOptions reports settings and variables doc names that aren't48+// options.49+func checkDocOptions(t *testing.T, name, doc string, env []string) {50+ t.Helper()51+ check := func(key string) {52+ if _, ok := Lookup(key); !ok && key != "key" {53+ t.Errorf("%s names setting %q, which isn't an option", name, key)5154 }52- for _, block := range configBlocks(string(data)) {53- for _, l := range block {54- if m := fileSetting.FindStringSubmatch(strings.TrimSpace(l)); m != nil {55- check(m[1])56- }55+ }56+ for _, m := range inlineSetting.FindAllStringSubmatch(doc, -1) {57+ check(m[1])58+ }59+ for _, block := range configBlocks(doc) {60+ for _, l := range block {61+ if m := fileSetting.FindStringSubmatch(l); m != nil {62+ check(m[1])5763 }5864 }59- for _, v := range envVar.FindAllString(string(data), -1) {60- if !slices.Contains(env, v) && !slices.Contains(notOptions, v) {61- t.Errorf("%s names %s, which no option reads", name, v)62- }65+ }66+ for _, v := range envVar.FindAllString(doc, -1) {67+ if !slices.Contains(env, v) && !slices.Contains(notOptions, v) {68+ t.Errorf("%s names %s, which no option reads", name, v)6369 }6470 }6571 }
M internal/ui/docs_test.go +20 -13