Documentation ¶
Overview ¶
go_generics reads a Go source file and writes a new version of that file with a few transformations applied to each. Namely:
Global types can be explicitly renamed with the -t option. For example, if -t=A=B is passed in, all references to A will be replaced with references to B; a function declaration like:
func f(arg *A)
would be renamed to:
fun f(arg *B)
Global type definitions and their method sets will be removed when they're being renamed with -t. For example, if -t=A=B is passed in, the following definition and methods that existed in the input file wouldn't exist at all in the output file:
type A struct{}
func (*A) f() {}
All global types, variables, constants and functions (not methods) are prefixed and suffixed based on the option -prefix and -suffix arguments. For example, if -suffix=A is passed in, the following globals:
func f() type t struct{}
would be renamed to:
func fA() type tA struct{}
Some special tags are also modified. For example:
"state:.(t)"
would become:
"state:.(tA)"
4. The package is renamed to the value via the -p argument. 5. Value of constants can be modified with -c argument.
Note that not just the top-level declarations are renamed, all references to them are also properly renamed as well, taking into account visibility rules and shadowing. For example, if -suffix=A is passed in, the following:
var b = 100
func f() { g(b) b := 0 g(b) }
Would be replaced with:
var bA = 100
func f() { g(bA) b := 0 g(b) }
Note that the second call to g() kept "b" as an argument because it refers to the local variable "b".
Unfortunately, go_generics does not handle anonymous fields with renamed types.
Directories ¶
Path | Synopsis |
---|---|
generics_tests
|
|
Package globals provides an AST visitor that calls the visit function for all global identifiers.
|
Package globals provides an AST visitor that calls the visit function for all global identifiers. |