tagproc

package
v0.0.0-...-d3fa72d Latest Latest
Warning

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

Go to latest
Published: Jul 27, 2018 License: MIT Imports: 5 Imported by: 2

Documentation

Overview

tagproc provides utilities to quickly process declarations in a Go codebase. The idea is as follows: Both struct and interface declarations may have embedded tag member that are processed and removed by the TagProcessor. As an example, consider

    type X struct {
	       tags.ImportantStruct
    }

The TagProcessor allows you to register handlers for the tags.ImportantStruct type that are called for all declarations that have an embedded (i.e. anonymous) member of this kind. A type may be used as a tag whenever it is defined in a package named tags.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type HandlerMap

type HandlerMap = map[string][]TagHandler

HandlerMap maps path types to lists of tag handlers.

type TagContext

type TagContext struct {
	File    *ast.File
	FileSet *token.FileSet
	// An import map that maps package scopes to the full package paths. This work under
	// the assumption that a path github.com/foo/bar actually points to a package called
	// bar.
	Imports map[string]string
}

TagContext contains all the data available to a tag processor.

type TagHandler

type TagHandler interface {
	// BeginFile is called whenever a new file is processed.
	BeginFile(context TagContext) error
	// HandleTag is called once for each struct with a tag in each file.
	// The object parameter then points to the definition of the struct in the source file,
	// the literalTag parameter contains the struct tag associated to the field in the struct.
	// It is the empty string if there is no tag attached to the struct field.
	HandleTag(context TagContext, object *ast.Object, literalTag string) error
	// FinishFile is called whenever the processing of a file finishes.
	FinishFile(context TagContext) error
	// Finalize is called when all files have been processed.
	Finalize() error
}

TagHandler is implemented by all types that want to handle tags embedded in structs. A TagHandler gets a chance to react to each file and to each tag embedded in that file.

type TagProcessor

type TagProcessor struct {
	HandlerMap HandlerMap
}

TagProcessor is the FileTransformation that handles all tags.

func New

func New() *TagProcessor

func (*TagProcessor) AddHandler

func (tp *TagProcessor) AddHandler(tag string, handler TagHandler)

AddHandler adds a new handler for the given tag. For example:

tp.AddHandler("github.com/foo/tags/bartag", handler)

registers a handler to be called for each tags.bartag typed tag in a struct.

func (*TagProcessor) Apply

func (tp *TagProcessor) Apply(fileContext gotransform.FileContext) error

Apply goes through the given file, looks for structs with tags, and calls all the respective tag processors on the structs.

func (*TagProcessor) Finalize

func (tp *TagProcessor) Finalize() error

Finalize finalizes all tag handlers.

func (*TagProcessor) Prepare

func (tp *TagProcessor) Prepare() error

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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