goose: allow non-injector code to live along with injectors
Previously, goose would ignore declarations in the //+build gooseinject files that were not injectors. This meant that if you wanted to write application-specific providers, you would need to place them in a separate file, away from the goose injectors. This means that a typical application would have three handwritten files: one for the abstract business logic, one for the platform-specific providers, one for the platform-specific injector declarations. This change allows the two platform-specific files to be merged into one: the //+build gooseinject file. goose will now copy these declarations out to goose_gen.go. This requires a bit of hackery, since the generated file may have different identifiers for the imported packages, so goose will do some light AST rewriting to address these cases. (Historical note: this was the first change made externally, so also in here are the copyright headers and other housekeeping changes.) Reviewed-by: Tuo Shan <shantuo@google.com> Reviewed-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
@@ -72,7 +72,7 @@ package foobarbaz
|
||||
|
||||
import (
|
||||
// ...
|
||||
"codename/goose"
|
||||
"github.com/google/go-cloud/goose"
|
||||
)
|
||||
|
||||
// ...
|
||||
@@ -116,7 +116,7 @@ package main
|
||||
import (
|
||||
"context"
|
||||
|
||||
"codename/goose"
|
||||
"github.com/google/go-cloud/goose"
|
||||
"example.com/foobarbaz"
|
||||
)
|
||||
|
||||
@@ -130,6 +130,9 @@ providers) and can return errors. Arguments to `goose.Use` are the same as
|
||||
`goose.NewSet`: they form a provider set. This is the provider set that gets
|
||||
used during code generation for that injector.
|
||||
|
||||
Any non-injector declarations found in a file with injectors will be copied into
|
||||
the generated file.
|
||||
|
||||
You can generate the injector by invoking goose in the package directory:
|
||||
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user