Giter Club home page Giter Club logo

Comments (4)

teepark avatar teepark commented on September 23, 2024 1

What do you mean by self-documenting? Sorry, I'm not familiar with spf13/cobra.

We do have the Usage/Usaget/Usagef family of functions for dumping out info about the supported environment variables. Does that qualify?

from envconfig.

owulveryck avatar owulveryck commented on September 23, 2024 1

For the record, here is an example (I use it on a personal project):

import (
	"bytes"
	"io"
	"text/tabwriter"

	"github.com/kelseyhightower/envconfig"
)

const (
	mdFormat = `| KEY	| TYPE	| DEFAULT	| REQUIRED	| DESCRIPTION	|
| 	| 	| 	| 	| 	|
{{range .}}| {{ usage_key . }}	| {{usage_type .}}	| {{usage_default .}}	| {{usage_required .}}	| {{usage_description .}}	|
{{end}}`
)

func Usage(prefix string, spec interface{}, output io.Writer) {
	var b bytes.Buffer
	tabs := tabwriter.NewWriter(&b, 1, 0, 4, ' ', 0)
	envconfig.Usagef(prefix, spec, tabs, mdFormat)
	tabs.Flush()
	// replace the second line's spaces by dash
	bytes := b.Bytes()
	lines := 0
	for i, b := range bytes {
		if b == '\n' {
			lines++
		}
		if lines == 1 && b == ' ' {
			bytes[i] = '-'
		}
	}
	io.Copy(output, &b)
}

from envconfig.

tillkuhn avatar tillkuhn commented on September 23, 2024 1

Thanks, @owulveryck, I needed the output in AsciiDoc format instead of markdown and your snippet was very useful, since I only had to adapt the mdFormat variable. If anybody else is interested, here's the corresponding template to render an AsciiDoc Table:

adocFormat := `
[%header,cols="1,1,1,1,2"]
|===
| KEY	| TYPE	| DEFAULT	| REQUIRED	| DESCRIPTION	
{{range .}}| {{ usage_key . }}	| {{usage_type .}}	| {{usage_default .}}	| {{usage_required .}}	| {{usage_description .}}	
{{end}}|===
`

from envconfig.

beeekind avatar beeekind commented on September 23, 2024

Usage was what I was looking for! My goal is to generate an output similar to the one shown here. I should be able to generate the markdown somewhere in my CI/CD pipeline with help from Usagef(), I should've checked the GoDoc first, thanks.

from envconfig.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.