Commit Graph

8 Commits

Author SHA1 Message Date
Ross Light
235a7d8f80 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>
2018-11-13 13:15:58 -08:00
Ross Light
f8e446fa17 goose: use marker functions instead of comments
To avoid making this CL too large, I did not migrate the existing goose
comments through the repository.  This will be addressed in a subsequent
CL.

Reviewed-by: Tuo Shan <shantuo@google.com>
2018-11-12 14:09:56 -08:00
Ross Light
13698e656a goose: clean up comments into full sentences
Capitalize and end with period where missing.

Reviewed-by: Chris Lewis <cflewis@google.com>
2018-11-12 14:09:56 -08:00
Chris Lewis
5261a8a8bb Make golint happy.
This CL makes golint happy by adding comments and removing underscores.
Code cultivation!

Reviewed-by: Ross Light <light@google.com>
2018-11-12 14:09:56 -08:00
Ross Light
cb1853b1af goose: use readable variable names
Names are inferred from types most of the time, but have a fallback for
a non-named type. Names are now also disambiguated from symbols in the
same scope.

Reviewed-by: Tuo Shan <shantuo@google.com>
Reviewed-by: Herbie Ong <herbie@google.com>
2018-11-12 14:09:55 -08:00
Ross Light
b92ac73ae3 goose: read tests from testdata
Since tests are all written in terms of Go source, it makes tests easier
to write.  They still need to be arranged in a GOPATH for go build, but
tests that just call Generate can operate in-place because I've faked
the filesystem.

Reviewed-by: Tuo Shan <shantuo@google.com>
Reviewed-by: Herbie Ong <herbie@google.com>
2018-11-12 14:09:55 -08:00
Ross Light
34987b6bee goose: use function name as implicit provider set
Single-element provider sets are frequently useful enough to warrant
being a default.  Larger groupings within a package are less frequent.

Reviewed-by: Herbie Ong <herbie@google.com>
Reviewed-by: Tuo Shan <shantuo@google.com>
2018-11-12 14:09:55 -08:00
Ross Light
26c8618466 goose: dependency injection proof of concept
See documentation and demo for usage and known limitations.

Reviewed-by: Herbie Ong <herbie@google.com>
2018-11-12 14:09:55 -08:00