Skip to content

jwilner/pullquote

Use this GitHub action with your project
Add this Action to an existing workflow or create a new one
View on Marketplace

Folders and files

NameName
Last commit message
Last commit date

Latest commit

8125ad4 · Dec 20, 2020

History

28 Commits
Dec 19, 2020
Dec 19, 2020
Oct 7, 2020
Dec 19, 2020
Oct 7, 2020
Oct 7, 2020
Oct 9, 2020
Aug 18, 2020
Oct 7, 2020
Dec 20, 2020
Dec 19, 2020
Dec 19, 2020
Aug 26, 2020
Aug 26, 2020
Oct 7, 2020
Sep 4, 2020
Oct 7, 2020
Dec 19, 2020
Oct 7, 2020

Repository files navigation

Tests Lint GoDoc

pullquote

A simple documentation tool that keeps quotes or snippets in your docs up-to-date. Intended to be wired into CI so you never have to update your snippets again.

Executable as either a binary or a GitHub Action.

Example

Given a piece of code to document like:

// fooBar does some stuff
func fooBar() {
	// OK COOL
}
  • Insert a pullquote comment in your doc (markdown ignores html-style comments):
hello
<!-- goquote .#fooBar -->
bye
  • Run pullquote on the doc
pullquote doc.md
  • pullquote adds in the snippet styled the way you expect.
hello
<!-- goquote .#fooBar -->
```go
// fooBar does some stuff
func fooBar() {
	// OK COOL
}
```
<!-- /goquote -->
bye

pullquote understands all go list style paths and can pull in source code from anywhere, including third-party projects.

It also does JSON!

hello
<!-- jsonquote foo.json#/foo/0/1/bar -->
```json
[
  {
    "beep": "boop",
    "boop": "beep"
  }
]
```
<!-- /jsonquote -->
bye

Usage

Command line

pullquote supports two flags:

  • -walk discovers all *.md files itself, rather than accepting over the CLI.
  • -check will error if any files are not up-to-date, leaving the filesystem unmodified.

Specific files can be passed to pullquote either as args or over stdin (convenient for e.g. piping from find).

GitHub Action

pullquote comes pre-packaged as a GitHub Action. In this mode, it uses -walk by default.

It can be paired with peter-evans/create-pull-request to create PRs whenever snippets have fallen out of date. See .github/workflows/pullquote.yaml for an example.

Options:

const (
	// keyNoReformat disables realigning go tabs for the snippet
	keyNoReformat = "noreformat"

	// keyGoPath sets the path to a go expression or statement to print; can also be specified via goquote tag
	keyGoPath = "gopath"
	// keyIncludeGroup includes the whole group declaration, not just the single named statement
	keyIncludeGroup = "includegroup"

	// keyJSONPath sets the path to a JSON object to print; can also be specified via jsonquote tag
	keyJSONPath = "jsonpath"

	// keySrc specifies the file from which to take a pullquote
	keySrc = "src"
	// keyStart specifies a pattern for the line on which a pullquote begins
	keyStart = "start"
	// keyEnd specifies a pattern for the line on which a pullquote ends
	keyEnd = "end"
	// keyEndCount specifies the number of times the `end` pattern should match before ending the quote; default 1
	keyEndCount = "endcount"

	// keyFmt specifies a format -- can be `none`, `blockquote`, or `codefence`; for goquote, defaults to codefence.
	keyFmt = "fmt"
	// keyLang specifies the language highlighting to be used with a codefence.
	keyLang = "lang"

	// fmtCodeFence specifies that the snippet should be rendered within a "codefence" -- i.e. ```
	fmtCodeFence = "codefence"
	// fmtCodeFence specifies that the snippet should be rendered as a blockquote
	fmtBlockQuote = "blockquote"
	// fmtNone can be used to explicitly unset default formats
	fmtNone = "none"
	// fmtExample indicates that the code should be rendered like a godoc example
	fmtExample = "example"
)
var (
	keysCommonOptional    = [...]string{keyFmt, keyLang}
	keysGoQuoteValid      = [...]string{keyGoPath, keyNoReformat, keyIncludeGroup}
	keysJSONQuoteValid    = [...]string{keyJSONPath, keyNoReformat}
	keysPullQuoteOptional = [...]string{keyEndCount}
	keysPullQuoteRequired = [...]string{keySrc, keyStart, keyEnd}
	validFmts             = map[string]bool{
		fmtBlockQuote: true,
		fmtCodeFence:  true,
		fmtExample:    true,
		fmtNone:       true,
	}
)

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages