github.com/phsym/gomarkdoc@v0.5.4/README.md (about) 1 <!-- Code generated by gomarkdoc. DO NOT EDIT --> 2 3 [![Go Report Card](https://goreportcard.com/badge/github.com/phsym/gomarkdoc)](https://goreportcard.com/report/github.com/phsym/gomarkdoc) 4 [![GitHub Actions](https://github.com/phsym/gomarkdoc/workflows/Test/badge.svg)](https://github.com/phsym/gomarkdoc/actions?query=workflow%3ATest+branch%3Amaster) 5 [![Go Reference](https://pkg.go.dev/badge/github.com/phsym/gomarkdoc.svg)](https://pkg.go.dev/github.com/phsym/gomarkdoc) 6 [![codecov](https://codecov.io/gh/princjef/gomarkdoc/branch/master/graph/badge.svg?token=171XNH5XLT)](https://codecov.io/gh/princjef/gomarkdoc) 7 8 # gomarkdoc 9 10 > This is a temporary fork of https://github.com/princjef/gomarkdoc with module renamed, waiting for PR https://github.com/princjef/gomarkdoc/pull/82 to be reviewed and merged 11 12 ```go 13 import "github.com/phsym/gomarkdoc" 14 ``` 15 16 Package gomarkdoc formats documentation for one or more packages as markdown for usage outside of the main https://pkg.go.dev site. It supports custom templates for tweaking representation of documentation at fine\-grained levels, exporting both exported and unexported symbols, and custom formatters for different backends. 17 18 ### Command Line Usage 19 20 If you want to use this package as a command\-line tool, you can install the command by running the following on go 1.16\+: 21 22 ``` 23 go install github.com/phsym/gomarkdoc/cmd/gomarkdoc@latest 24 ``` 25 26 For older versions of go, you can install using the following method instead: 27 28 ``` 29 GO111MODULE=on go get -u github.com/phsym/gomarkdoc/cmd/gomarkdoc 30 ``` 31 32 The command line tool supports configuration for all of the features of the importable package: 33 34 ``` 35 $ gomarkdoc --help 36 generate markdown documentation for golang code 37 38 Usage: 39 gomarkdoc [flags] [package ...] 40 41 Flags: 42 -c, --check Check the output to see if it matches the generated documentation. --output must be specified to use this. 43 --config string File from which to load configuration (default: .gomarkdoc.yml) 44 -e, --embed Embed documentation into existing markdown files if available, otherwise append to file. 45 --footer string Additional content to inject at the end of each output file. 46 --footer-file string File containing additional content to inject at the end of each output file. 47 -f, --format string Format to use for writing output data. Valid options: github (default), azure-devops, plain (default "github") 48 --header string Additional content to inject at the beginning of each output file. 49 --header-file string File containing additional content to inject at the beginning of each output file. 50 -h, --help help for gomarkdoc 51 -u, --include-unexported Output documentation for unexported symbols, methods and fields in addition to exported ones. 52 -o, --output string File or pattern specifying where to write documentation output. Defaults to printing to stdout. 53 --repository.default-branch string Manual override for the git repository URL used in place of automatic detection. 54 --repository.path string Manual override for the path from the root of the git repository used in place of automatic detection. 55 --repository.url string Manual override for the git repository URL used in place of automatic detection. 56 --tags strings Set of build tags to apply when choosing which files to include for documentation generation. 57 -t, --template stringToString Custom template string to use for the provided template name instead of the default template. (default []) 58 --template-file stringToString Custom template file to use for the provided template name instead of the default template. (default []) 59 -v, --verbose count Log additional output from the execution of the command. Can be chained for additional verbosity. 60 --version Print the version. 61 ``` 62 63 The gomarkdoc command processes each of the provided packages, generating documentation for the package in markdown format and writing it to console. For example, if you have a package in your current directory and want to send it to a documentation markdown file, you might do something like this: 64 65 ``` 66 gomarkdoc --output doc.md . 67 ``` 68 69 ### Package Specifiers 70 71 The gomarkdoc tool supports generating documentation for both local packages and remote ones. To specify a local package, start the name of the package with a period \(.\) or specify an absolute path on the filesystem. All other package signifiers are assumed to be remote packages. You may specify both local and remote packages in the same command invocation as separate arguments. 72 73 ### Output Redirection 74 75 By default, the documentation generated by the gomarkdoc command is sent to standard output, where it can be redirected to a file. This can be useful if you want to perform additional modifications to the documentation or send it somewhere other than a file. However, keep in mind that there are some inconsistencies in how various shells/platforms handle redirected command output \(for example, Powershell encodes in UTF\-16, not UTF\-8\). As a result, the \-\-output option described below is recommended for most use cases. 76 77 ``` 78 gomarkdoc . > doc.md 79 ``` 80 81 If you want to redirect output for each processed package to a file, you can provide the \-\-output/\-o option, which accepts a template specifying how to generate the path of the output file. A common usage of this option is when generating README documentation for a package with subpackages \(which are supported via the ... signifier as in other parts of the golang toolchain\). In addition, this option provides consistent behavior across platforms and shells: 82 83 ``` 84 gomarkdoc --output '{{.Dir}}/README.md' ./... 85 ``` 86 87 You can see all of the data available to the output template in the PackageSpec struct in the github.com/phsym/gomarkdoc/cmd/gomarkdoc package. 88 89 ### Template Overrides 90 91 The documentation information that is output is formatted using a series of text templates for the various components of the overall documentation which get generated. Higher level templates contain lower level templates, but any template may be replaced with an override template using the \-\-template/\-t option. The full list of templates that may be overridden are: 92 93 ``` 94 - file: generates documentation for a file containing one or more 95 packages, depending on how the tool is configured. This is the 96 root template for documentation generation. 97 98 - package: generates documentation for an entire package. 99 100 - type: generates documentation for a single type declaration, as well 101 as any related functions/methods. 102 103 - func: generates documentation for a single function or method. It may 104 be referenced from within a type, or directly in the package, 105 depending on nesting. 106 107 - value: generates documentation for a single variable or constant 108 declaration block within a package. 109 110 - index: generates an index of symbols within a package, similar to what 111 is seen for godoc.org. The index links to types, funcs, 112 variables, and constants generated by other templates, so it may 113 need to be overridden as well if any of those templates are 114 changed in a material way. 115 116 - example: generates documentation for a single example for a package or 117 one of its symbols. The example is generated alongside whichever 118 symbol it represents, based on the standard naming conventions 119 outlined in https://blog.golang.org/examples#TOC_4. 120 121 - doc: generates the freeform documentation block for any of the above 122 structures that can contain a documentation section. 123 124 - import: generates the import code used to pull in a package. 125 ``` 126 127 Overriding with the \-t option uses a key\-vaule pair mapping a template name to the file containing the contents of the override template to use. Specified template files must exist: 128 129 ``` 130 gomarkdoc -t package=custom-package.gotxt -t doc=custom-doc.gotxt . 131 ``` 132 133 ### Additional Options 134 135 As with the godoc tool itself, only exported symbols will be shown in documentation. This can be expanded to include all symbols in a package by adding the \-\-include\-unexported/\-u flag. 136 137 ``` 138 gomarkdoc -u -o README.md . 139 ``` 140 141 If you want to blend the documentation generated by gomarkdoc with your own hand\-written markdown, you can use the \-\-embed/\-e flag to change the gomarkdoc tool into an append/embed mode. When documentation is generated, gomarkdoc looks for a file in the location where the documentation is to be written and embeds the documentation if present. Otherwise, the documentation is appended to the end of the file. 142 143 ``` 144 gomarkdoc -o README.md -e . 145 ``` 146 147 When running with embed mode enabled, gomarkdoc will look for either this single comment: 148 149 ``` 150 <!-- gomarkdoc:embed --> 151 ``` 152 153 Or the following pair of comments \(in which case all content in between is replaced\): 154 155 ``` 156 <!-- gomarkdoc:embed:start --> 157 158 This content is replaced with the embedded documentation 159 160 <!-- gomarkdoc:embed:end --> 161 ``` 162 163 If you would like to include files that are part of a build tag, you can specify build tags with the \-\-tags flag. Tags are also supported through GOFLAGS, though command line and configuration file definitions override tags specified through GOFLAGS. 164 165 ``` 166 gomarkdoc --tags sometag . 167 ``` 168 169 You can also run gomarkdoc in a verification mode with the \-\-check/\-c flag. This is particularly useful for continuous integration when you want to make sure that a commit correctly updated the generated documentation. This flag is only supported when the \-\-output/\-o flag is specified, as the file provided there is what the tool is checking: 170 171 ``` 172 gomarkdoc -o README.md -c . 173 ``` 174 175 If you're experiencing difficulty with gomarkdoc or just want to get more information about how it's executing underneath, you can add \-v to show more logs. This can be chained a second time to show even more verbose logs: 176 177 ``` 178 gomarkdoc -vv -o README.md . 179 ``` 180 181 Some features of gomarkdoc rely on being able to detect information from the git repository containing the project. Since individual local git repositories may be configured differently from person to person, you may want to manually specify the information for the repository to remove any inconsistencies. This can be achieved with the \-\-repository.url, \-\-repository.default\-branch and \-\-repository.path options. For example, this repository would be configured with: 182 183 ``` 184 gomarkdoc --repository.url "https://github.com/phsym/gomarkdoc" --repository.default-branch master --repository.path / -o README.md . 185 ``` 186 187 ### Configuring via File 188 189 If you want to reuse configuration options across multiple invocations, you can specify a file in the folder where you invoke gomarkdoc containing configuration information that you would otherwise provide on the command line. This file may be a JSON, TOML, YAML, HCL, env, or Java properties file, but the name is expected to start with .gomarkdoc \(e.g. .gomarkdoc.yml\). 190 191 All configuration options are available with the camel\-cased form of their long name \(e.g. \-\-include\-unexported becomes includeUnexported\). Template overrides are specified as a map, rather than a set of key\-value pairs separated by =. Options provided on the command line override those provided in the configuration file if an option is present in both. 192 193 ### Programmatic Usage 194 195 While most users will find the command line utility sufficient for their needs, this package may also be used programmatically by installing it directly, rather than its command subpackage. The programmatic usage provides more flexibility when selecting what packages to work with and what components to generate documentation for. 196 197 A common usage will look something like this: 198 199 ``` 200 package main 201 202 import ( 203 "go/build" 204 "fmt" 205 "os" 206 207 "github.com/phsym/gomarkdoc" 208 "github.com/phsym/gomarkdoc/lang" 209 "github.com/phsym/gomarkdoc/logger" 210 ) 211 212 func main() { 213 // Create a renderer to output data 214 out, err := gomarkdoc.NewRenderer() 215 if err != nil { 216 // handle error 217 } 218 219 wd, err := os.Getwd() 220 if err != nil { 221 // handle error 222 } 223 224 buildPkg, err := build.ImportDir(wd, build.ImportComment) 225 if err != nil { 226 // handle error 227 } 228 229 // Create a documentation package from the build representation of our 230 // package. 231 log := logger.New(logger.DebugLevel) 232 pkg, err := lang.NewPackageFromBuild(log, buildPkg) 233 if err != nil { 234 // handle error 235 } 236 237 // Write the documentation out to console. 238 fmt.Println(out.Package(pkg)) 239 } 240 ``` 241 242 ### Examples 243 244 This project uses itself to generate the README files in github.com/phsym/gomarkdoc and its subdirectories. To see the commands that are run to generate documentation for this repository, take a look at the Doc\(\) and DocVerify\(\) functions in magefile.go and the .gomarkdoc.yml file in the root of this repository. To run these commands in your own project, simply replace \`go run ./cmd/gomarkdoc\` with \`gomarkdoc\`. 245 246 Know of another project that is using gomarkdoc? Open an issue with a description of the project and link to the repository and it might be featured here\! 247 248 ## Index 249 250 - [type Renderer](<#type-renderer>) 251 - [func NewRenderer(opts ...RendererOption) (*Renderer, error)](<#func-newrenderer>) 252 - [func (out *Renderer) Example(ex *lang.Example) (string, error)](<#func-renderer-example>) 253 - [func (out *Renderer) File(file *lang.File) (string, error)](<#func-renderer-file>) 254 - [func (out *Renderer) Func(fn *lang.Func) (string, error)](<#func-renderer-func>) 255 - [func (out *Renderer) Package(pkg *lang.Package) (string, error)](<#func-renderer-package>) 256 - [func (out *Renderer) Type(typ *lang.Type) (string, error)](<#func-renderer-type>) 257 - [type RendererOption](<#type-rendereroption>) 258 - [func WithFormat(format format.Format) RendererOption](<#func-withformat>) 259 - [func WithTemplateOverride(name, tmpl string) RendererOption](<#func-withtemplateoverride>) 260 261 262 ## type [Renderer](<https://github.com/phsym/gomarkdoc/blob/master/renderer.go#L15-L19>) 263 264 Renderer provides capabilities for rendering various types of documentation with the configured format and templates. 265 266 ```go 267 type Renderer struct { 268 // contains filtered or unexported fields 269 } 270 ``` 271 272 ### func [NewRenderer](<https://github.com/phsym/gomarkdoc/blob/master/renderer.go#L30>) 273 274 ```go 275 func NewRenderer(opts ...RendererOption) (*Renderer, error) 276 ``` 277 278 NewRenderer initializes a Renderer configured using the provided options. If nothing special is provided, the created renderer will use the default set of templates and the GitHubFlavoredMarkdown. 279 280 ### func \(\*Renderer\) [Example](<https://github.com/phsym/gomarkdoc/blob/master/renderer.go#L140>) 281 282 ```go 283 func (out *Renderer) Example(ex *lang.Example) (string, error) 284 ``` 285 286 Example renders an example's documentation to a string. You can change the rendering of the example by overriding the "example" template or one of the templates it references. 287 288 ### func \(\*Renderer\) [File](<https://github.com/phsym/gomarkdoc/blob/master/renderer.go#L112>) 289 290 ```go 291 func (out *Renderer) File(file *lang.File) (string, error) 292 ``` 293 294 File renders a file containing one or more packages to document to a string. You can change the rendering of the file by overriding the "file" template or one of the templates it references. 295 296 ### func \(\*Renderer\) [Func](<https://github.com/phsym/gomarkdoc/blob/master/renderer.go#L126>) 297 298 ```go 299 func (out *Renderer) Func(fn *lang.Func) (string, error) 300 ``` 301 302 Func renders a function's documentation to a string. You can change the rendering of the package by overriding the "func" template or one of the templates it references. 303 304 ### func \(\*Renderer\) [Package](<https://github.com/phsym/gomarkdoc/blob/master/renderer.go#L119>) 305 306 ```go 307 func (out *Renderer) Package(pkg *lang.Package) (string, error) 308 ``` 309 310 Package renders a package's documentation to a string. You can change the rendering of the package by overriding the "package" template or one of the templates it references. 311 312 ### func \(\*Renderer\) [Type](<https://github.com/phsym/gomarkdoc/blob/master/renderer.go#L133>) 313 314 ```go 315 func (out *Renderer) Type(typ *lang.Type) (string, error) 316 ``` 317 318 Type renders a type's documentation to a string. You can change the rendering of the type by overriding the "type" template or one of the templates it references. 319 320 ## type [RendererOption](<https://github.com/phsym/gomarkdoc/blob/master/renderer.go#L22>) 321 322 RendererOption configures the renderer's behavior. 323 324 ```go 325 type RendererOption func(renderer *Renderer) error 326 ``` 327 328 ### func [WithFormat](<https://github.com/phsym/gomarkdoc/blob/master/renderer.go#L102>) 329 330 ```go 331 func WithFormat(format format.Format) RendererOption 332 ``` 333 334 WithFormat changes the renderer to use the format provided instead of the default format. 335 336 ### func [WithTemplateOverride](<https://github.com/phsym/gomarkdoc/blob/master/renderer.go#L88>) 337 338 ```go 339 func WithTemplateOverride(name, tmpl string) RendererOption 340 ``` 341 342 WithTemplateOverride adds a template that overrides the template with the provided name using the value provided in the tmpl parameter. 343 344 345 346 Generated by [gomarkdoc](<https://github.com/phsym/gomarkdoc>)