code: func parseFields(lines []string) []Field {
  	var fields []Field
  
  	for len(lines) > 0 {
  		// Grab the name of the field from the first line.
  		name, firstLine, ok := parseFieldLine(lines[0])
  		if !ok {
  			break
  		}
  		lines = lines[1:]
  
  		// All other lines of the field description (if any) are intended.
  		var block []string
  		block, lines = readUntil(lines, func(_ *string, l string) bool {
  			return l != "" && !hasLeadingSpace(l)
  		})
  
  		// Combine the first line with the rest of the block.
  		all := trimEmptyLines(append([]string{firstLine}, deindent(block)...))
  
  		// Join lines by space. We assume argument descriptions do not use newlines
  		// in a syntax-significant way.
  		fields = append(fields, Field{
  			Name: name,
  			Desc: strings.Join(all, " "),
  		})
  	}
  
  	return fields
  }
docs: // parseFields parses a block of lines that define fields.
  //
  // It looks like this:
  //
  //    arg1: blah-blah,
  //       maybe more-blah-blah.
  //    arg2: shorter blah-blah.
  //
  //    arg3: