Adhoc File Gen



hof gen joins CUE with Go’s text/template system and diff3. This section focuses on the adhoc, one-liners you can write to generate any file from any data.


Learn about writing templates, with extra functions and helpers

Template writing docs


Check the tests for complete examples

https://github.com/hofstadter-io/hof/tree/_dev/test/render


Want to use and compose code gen modules and dependencies?

Create and use generator modules.

hof gen app.cue -G frontend -G backend -G migrations

See the first-example to learn how.


Command Help


$ hof help gen

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'

  # 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'

  # 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

# 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]

Aliases:
  gen, G

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
      --init string           <name> to bootstrap a new genarator module
  -l, --list                  list available generators
      --no-format             disable formatting during code gen (adhoc 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:
  -p, --package string   the Cue package context to use during execution
  -q, --quiet            turn off output and assume defaults at prompts
  -v, --verbosity int    set the verbosity of output

2022 Hofstadter, Inc