hof gen joins CUE with Go’s text/template system and diff3.
This section focuses on the ad-hoc, one-liners
you can write to generate any file from any data.
Learn about writing templates, with extra functions and helpers
hof unifies CUE with Go's text/template system and diff3
create on-liners to generate any file from any
build reusable and modular generators
edit and regenerate those files while keeping changes
# Render a template
hof gen input.cue -T template.txt
hof gen input.yaml schema.cue -T template.txt > output.txt
# Add partials to the template context
hof gen input.cue -T template.txt -P partial.txt
# The template flag as code gen mappings
hof gen input.cue -T ... -T ...
# Generate multiple templates at once
-T templateA.txt -T templateB.txt
# Select a sub-input value by CUEpath
-T templateA.txt:foo
-T templateB.txt:sub.val
# Choose a schema with @
-T templateA.txt:foo@Foo
-T templateB.txt:sub.val@schemas.val
# Writing to file with = (semicolon)
-T templateA.txt=a.txt
-T templateB.txt:sub.val@schema=b.txt
# Templated output path, braces need quotes
-T templateA.txt:='{{ .name | lower }}.txt'
# Data Files are created when no template
-T :sub.val='{{ .name | lower }}.json'
# Repeated templates are used when
# 1. the output has a '[]' prefix
# 2. the input is a list or array
# The template will be processed per entry
# This also requires using a templated outpath
-T template.txt:items='[]out/{{ .filepath }}.txt'
-T :items='[]out/{{ .filepath }}.yaml'
# Output everything to a directory (out name is the same)
-O out -T types.go -T handlers.go
# Watch files and directories, doing full or Xcue-less reloads
-W *.cue -X *.go -O out -T types.go -T handlers.go
# Turn any hof gen flags into a reusable generator module
hof gen [entrypoints] flags... --as-module [name]
hof gen [entrypoints] -G [name]
# Bootstrap a new generator module
hof gen init github.com/hofstadter-io/demos
# List availabel generators
hof gen list
# Learn about writing templates, with extra functions and helpers
https://docs.hofstadter.io/code-generation/template-writing/
# Check the tests for complete examples
https://github.com/hofstadter-io/hof/tree/_dev/test/render
# Compose code gen mappings into reusable modules with
hof gen app.cue -G frontend -G backend -G migrations -T ...
https://docs.hofstadter.io/first-example/
Usage:
hof gen [files...] [flags]
hof gen [command]
Aliases:
gen, G
Available Commands:
info print details for about generators
init initialize a new generator
list print available generators
Flags:
--as-module string <github.com/username/<name>> like value for the generator module made from the given flags
-D, --diff3 enable diff3 support for custom code
-G, --generator strings generator tags to run, default is all, or none if -T is used
-h, --help help for gen
--no-format disable formatting during code gen (ad-hoc only)
-O, --outdir string base directory to write all output u
-P, --partial strings file globs to partial templates to register with the templates
-s, --stats print generator statistics
-T, --template strings template mapping to render, see help for format
-w, --watch run in watch mode, regenerating when files change, implied by -W/X
-X, --watch-fast strings filepath globs to watch for changes and trigger fast regen
-W, --watch-globs strings filepath globs to watch for changes and trigger full regen
Global Flags:
--inject-env inject all ENV VARs as default tag vars
-p, --package string the Cue package context to use during execution
-q, --quiet turn off output and assume defaults at prompts
-t, --tags strings @tags() to be injected into CUE code
-v, --verbosity int set the verbosity of output
Use "hof gen [command] --help" for more information about a command.