Commit Graph

27 Commits

Author SHA1 Message Date
shantuo
4243b011bd internal/wire: factor out common code in solve (#98)
- Fixed a bug when a interface is bind to a value wire would fail to record it is used.
- Also rename ProvidedType.ConcreteType to Type since it doesn't necessarily returns a concrete type.

Fixes #72
2018-12-14 12:56:01 -08:00
shantuo
ef9bb67152 Support variadic provider and injector functions (#91)
Fixes #61
2018-12-03 08:30:42 -08:00
Robert van Gent
925a11ad0d wire: add a test for using a function argument as a provider (google/go-cloud#724) 2018-11-28 11:02:13 -08:00
Robert van Gent
6ea381b3fe wire: give wire.Bind access to the arguments to the injector function (google/go-cloud#715) 2018-11-28 11:02:13 -08:00
Ross Light
30574010a0 Update import path and mirror project docs 2018-11-13 13:16:46 -08:00
Ross Light
282105c273 wire: use go/packages for analysis (google/go-cloud#623)
Unfortunately, this does come with a ~4x slowdown to Wire, as it is
now pulling source for all transitively depended packages, but not
trimming comments or function bodies. This is due to limitations with
the ParseFile callback in go/packages.

This comes with a single semantic change: when performing analysis, Wire
will now evaluate everything with the wireinject build tag. I updated
the build tags tests accordingly. Prior to this PR, only the packages
directly named by the package patterns would be evaluated with the
wireinject build tag. Dependencies would not have the wireinject build
tag applied. There isn't a way to selectively apply build tags in go/packages,
and there isn't a clear benefit to applying it selectively. Being consistent with
other Go tooling provides greater benefit.

I deleted the vendoring test, as non-top-level vendoring
becomes obsolete with modules.

go/packages now parses comments by default, so now the generated code
includes comments for non-injector declarations.

Fixes google/go-cloud#78
2018-11-13 13:16:46 -08:00
Ross Light
64470a2452 wire/internal/wire: use on-disk GOPATH in generate tests (google/go-cloud#616)
The primary motivation is to permit a move to using go/packages instead
of go/loader. go/packages runs exclusively by shelling out to the go
tool, which precludes use of the in-memory "magic" GOPATH being used
up to this point.

This has a secondary effect of removing a lot of code to support "magic"
GOPATH from the test infrastructure. This is on the whole good, but
necessitated a change in the error scrubbing: since the filenames are
no longer fixed, error scrubbing also must remove the leading
$GOPATH/src lines.

Another related change: since all callers of Generate needed to know the
package path in order to write out wire_gen.go (necessitating a
find-only import search) and Generate already has this information,
Generate now returns this information to the caller. This should further
reduce callers' coupling to Wire's load internals. It also eliminates
code duplication.

This should hopefully shake out any difference in path separators for
running on Windows, but I have not tested that yet.

Updates google/go-cloud#78
Updates google/go-cloud#323
2018-11-13 13:16:46 -08:00
Robert van Gent
a8825fef58 wire: add info from the dependency graph when a type is not provided 2018-11-13 13:16:46 -08:00
Robert van Gent
b1fd26c92a wire: improve error message for provider set conflicts (google/go-cloud#500) 2018-11-13 13:16:46 -08:00
Robert van Gent
be8ecba636 wire: fix error messages for Bind and InterfaceValue when the arg doesn't implement the interface (google/go-cloud#491)
Fixes google/go-cloud#490
2018-11-13 13:16:46 -08:00
Robert van Gent
ec7cb36215 wire: report an error if a func with wire.Build in it is an invalid injector (google/go-cloud#487) 2018-11-13 13:16:46 -08:00
Robert van Gent
e93f33129e wire: update Provider.Out to be a slice of provided types, and keep track of the provided concrete type in ProviderSet.providerMap (google/go-cloud#332)
Update Provider.Out to be a slice of provided types, and keep track
of the provided concrete type in ProviderSet.providerMap, to more
clearly model-named struct providers (which provide both the struct
type and a pointer to the struct type).

Fixes google/go-cloud#325.
2018-11-13 13:16:46 -08:00
Robert van Gent
cd32a686b1 wire: Add wire.InterfaceValue, required instead of wire.Value if the value is an interface value (google/go-cloud#322)
* Add wire.InterfaceValue, required instead of wire.Value if the value is an interface value.

* Update guestbook sample to use InterfaceValue where appropriate.

* Remove unnecessary ok := true

* Addressing comments from code review.
2018-11-13 13:16:46 -08:00
Ross Light
eedae3d8d0 all: change copyright notice to The Go Cloud Authors (google/go-cloud#306)
Added AUTHORS+CONTRIBUTORS files with the contributors already present
from the Git log.

Fixes google/go-cloud#225
2018-11-13 13:16:46 -08:00
Oleg Kovalov
0559d22dfe all: simplify and clarify some expressions (google/go-cloud#260) 2018-11-13 13:16:46 -08:00
Robert van Gent
3a3760180d wire: fill in ProviderSet.VarName when the set is a package variable (google/go-cloud#279)
Rename ProviderSet.Name to ProviderSet.VarName.

Fixes google/go-cloud#277
2018-11-13 13:16:46 -08:00
Robert van Gent
85deb53791 wire: Build now returns an error if it has any unused arguments (google/go-cloud#268)
Fixes google/go-cloud#164
2018-11-13 13:16:46 -08:00
Ross Light
5f0dd9ee8f wire: add check command (google/go-cloud#207)
In the internal package, this expands the wire.Load function to run
the same solver as wire.Generate would on any injector function. For
completeness, I also print the injector functions in the gowire show
command.

A subsequent PR will add this as a step to Go Cloud CI.

Updates google/go-cloud#30
2018-11-13 13:16:45 -08:00
Ross Light
765b0228ac wire: don't fail at first error (google/go-cloud#204)
This changes both Generate and Load to try to advance as far as possible
while collecting errors. A small helper type, errorCollector, is used to
make control flow easier to read.

Fixes google/go-cloud#5
2018-11-13 13:16:45 -08:00
Ross Light
a2540bae2a wire: update internal functions to return []error (google/go-cloud#197)
This represents no functional change, it purely changes the signature
used for functions that can possibly return multiple errors. A
follow-up commit will change the control flow to proceed in the face
of errors.
2018-11-13 13:16:45 -08:00
Ross Light
69b0cf53ad all: move back to github.com/google/go-cloud (google/go-cloud#162)
Reverts changes made in google/go-cloud#120 for google/go-cloud#117
2018-11-13 13:16:45 -08:00
Ross Light
f7658c8a13 wire: change call sites to allow multiple errors (google/go-cloud#118)
Updated the call sites to allow multiple errors to be returned from
the package. Load is now permitted to return partial success.

Updates google/go-cloud#5
2018-11-13 13:16:45 -08:00
Ross Light
45a535a0bd all: s/go-cloud/go-x-cloud/ (google/go-cloud#120)
Fixes google/go-cloud#117
2018-11-13 13:16:45 -08:00
Ross Light
366207371e wire: detect cycles incrementally (google/go-cloud#102)
Idea originally mentioned in google/go-cloud#29. This means that any provider set
loaded must not have cycles, which is stricter than before. The cycle
error message now gives full detail on what caused the cycle.
2018-11-13 13:16:45 -08:00
Ross Light
b12449f9e3 wire: build provider map incrementally (google/go-cloud#96)
One small breaking change: a provider set can no longer include an
interface binding to a concrete type that is not being provided
(directly or indirectly) by the provider set. I can't imagine a
reasonable use case for the previous behavior, so this likely will
catch more errors

In terms of operation, binding conflict error messages will now give
much more specific line numbers, since they will be reported closer to
where the problem occurred.

Now that provider sets gather this information, it can be exposed in
the package API. gowire now uses this information instead of
trying to build it itself.

Fixes google/go-cloud#29
2018-11-13 13:16:45 -08:00
Ross Light
b2d47f8fcc wire: allow non-panic version of injector (google/go-cloud#91)
Fixes google/go-cloud#7
2018-11-13 13:16:45 -08:00
Ross Light
6345348d86 wire: rename from Goose (google/go-cloud#59)
Rename Goose to wire, making it more obvious what the package does, and look more like the stdlib.

Fixes google/go-cloud#8
2018-11-13 13:16:45 -08:00