codegen

package
v0.0.0-...-bbc9ce3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 6, 2021 License: BSD-2-Clause Imports: 5 Imported by: 0

README

Template Organization And Naming

To keep things kind of maintainable here's how templates are named and organized.

Template source files

All template files are named .tmpl.go so that they're recognized by editors and other tools as Go source files but can be differentiated from Go source files that implement their logic in Go rather than the template language.

Each .tmpl.go file should only contain a single string variable named similarly to the file. A file named foo_bar_baz.tmpl.go will contain a single variable:

const fooBarBaz = `
// actual template code here
`

The file should include a comment above the string describing the templates defined in the variable.

Template names

Templates are defined with {{- define "TemplateName" -}} ... {{- end -}} where the template name string with two or three parts separated by colons.

The first part of the template is always the type of data it operates on, the last part of the template is where it can be used and the middle is for disambiguation.

File templates

Each file generated by the bindings generator is rooted in a template file named file_something.tmpl.go containing a string variable named fileSomething with a template named File:Something. For example the header template is in the file file_header.tmpl.go and contains:

const fileHeaderTmpl = `
{{- define "File:Header" -}}
// The header file template
{{ -end }}

Fragment templates

We refer to templates that generate a part of a file as fragment templates. Fragment templates are in files named fragment_*.tmpl.go. Fragment templates are named by the type of object that they operate on. Each fragment template file contains only fragment templates that operate on a specific object type.

For example all templates that operate on struct objects are in fragment_struct.tmpl.go in a variable called fragmentStruct and their names all begin with Struct:.

Templates for some more complex types may be split across multiple files (and hence variables). They should be logically grouped and still must begin with the name of the type being operated on. For example fragment_protocol_client_impl.tmpl.go contains the templates for generating a protocol's ClientImpl. There are templates in this file named Protocol:ClientImpl:Header and Protocol:ClientImpl:Source

Fragment templates must include the name of the file they should be generated into as the last part of their name. So the template for generating struct information into a the header (called from the File:Header file template) is Struct:Header and the template for generating the source file (called from the File:Source file template) is Struct:Source.

Helper templates

Some templates generate code that belongs in multiple places. These are helper templates and instead of having the name of a file as their last part they end with :Helper, for example Method:ClientAllocationComment:Helper.

Integration and build

All template files are listed as sources for gopkg in //tools/fidl/fidlgen_llcpp/BUILD.gn. All template variables are listed alphabetically in the templates variable in the NewGenerator function in //tools/fidl/fidlgen_llcpp/codegen/codegen.go

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewGenerator

func NewGenerator(flags *cpp.CmdlineFlags) *cpp.Generator

Types

type Generator

type Generator struct {
	*cpp.Generator
}

type TypedArgument

type TypedArgument struct {
	ArgumentName  string
	ArgumentValue string
	ArgumentType  cpp.Type
	Pointer       bool
	Nullable      bool
	Access        bool
	MutableAccess bool
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL