Skip to content

Commit 84087dd

Browse files
committed
fix: provider discovery
1 parent d6b36b1 commit 84087dd

2 files changed

Lines changed: 19 additions & 15 deletions

File tree

internal/wire/parse.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -574,6 +574,11 @@ func (oc *objectCache) semanticProviderSet(obj *types.Var) (*ProviderSet, bool,
574574
if !ok {
575575
return nil, false, nil
576576
}
577+
for _, item := range setArt.Items {
578+
if item.Kind == "bind" {
579+
return nil, false, nil
580+
}
581+
}
577582
pset := &ProviderSet{
578583
Pos: obj.Pos(),
579584
PkgPath: obj.Pkg().Path(),
@@ -1856,5 +1861,11 @@ func bindShouldUsePointer(info *types.Info, call *ast.CallExpr) bool {
18561861
fun := call.Fun.(*ast.SelectorExpr) // wire.Bind
18571862
pkgName := fun.X.(*ast.Ident) // wire
18581863
wireName := info.ObjectOf(pkgName).(*types.PkgName) // wire package
1859-
return wireName.Imported().Scope().Lookup("bindToUsePointer") != nil
1864+
if imported := wireName.Imported(); imported != nil {
1865+
if isWireImport(imported.Path()) {
1866+
return true
1867+
}
1868+
return imported.Scope().Lookup("bindToUsePointer") != nil
1869+
}
1870+
return false
18601871
}

internal/wire/parse_coverage_test.go

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,7 @@ func TestObjectCacheSemanticProviderSetFallback(t *testing.T) {
367367
}
368368
}
369369

370-
func TestObjectCacheSemanticProviderSetFallbackTypeOnlyForms(t *testing.T) {
370+
func TestObjectCacheSemanticProviderSetSkipsBindArtifacts(t *testing.T) {
371371
t.Parallel()
372372

373373
fset := token.NewFileSet()
@@ -429,22 +429,15 @@ func TestObjectCacheSemanticProviderSetFallbackTypeOnlyForms(t *testing.T) {
429429
},
430430
hasher: typeutil.MakeHasher(),
431431
}
432-
item, errs := oc.get(setVar)
432+
pset, ok, errs := oc.semanticProviderSet(setVar)
433433
if len(errs) > 0 {
434-
t.Fatalf("oc.get(Set) errs = %v", errs)
435-
}
436-
pset, ok := item.(*ProviderSet)
437-
if !ok || pset == nil {
438-
t.Fatalf("oc.get(Set) type = %T, want *ProviderSet", item)
439-
}
440-
if len(pset.Bindings) != 1 {
441-
t.Fatalf("bindings len = %d, want 1", len(pset.Bindings))
434+
t.Fatalf("semanticProviderSet(Set) errs = %v", errs)
442435
}
443-
if len(pset.Providers) != 1 || !pset.Providers[0].IsStruct {
444-
t.Fatalf("providers = %+v, want one struct provider", pset.Providers)
436+
if ok {
437+
t.Fatalf("semanticProviderSet(Set) ok = true, want false")
445438
}
446-
if len(pset.Fields) != 1 || pset.Fields[0].Name != "Message" {
447-
t.Fatalf("fields = %+v, want Message field", pset.Fields)
439+
if pset != nil {
440+
t.Fatalf("semanticProviderSet(Set) = %#v, want nil", pset)
448441
}
449442
}
450443

0 commit comments

Comments
 (0)