uber-go / dig

A reflection based dependency injection toolkit for Go.
https://go.uber.org/dig
MIT License
3.78k stars 206 forks source link

Child scope of container is not visualized on dot graph #402

Open greeflas opened 5 months ago

greeflas commented 5 months ago

Describe the bug Child scope of container is not visualized on dot graph.

To Reproduce

  1. Create container: c := dig.New()
  2. Provide the container with constructor: c.Provide(NewFirstComponent)
  3. Create child scope: child := c.Scope("test_scope")
  4. Provide the child scope with constructor: child.Provide(NewSecondComponent)
  5. Visualize container: dig.Visualize(c, os.Stdout)

Expected behavior I expect to see child scope along with NewSecondComponent but I only see NewFirstComponent.

Additional context Dig version: v1.17.1 Go Playground: https://go.dev/play/p/lhYAIUlfsPr DOT:

digraph {
    rankdir=RL;
    graph [compound=true];

        subgraph cluster_0 {
            label = "main";
            constructor_0 [shape=plaintext label="NewFirstComponent"];

            "*main.FirstComponent" [label=<*main.FirstComponent>];

        }

}

Graph image: graphviz (1)

sywhang commented 5 months ago

This is a valid feature request. I believe the DOT representation wasn't rewritten when we rewrote Dig's internal graph representation when we worked on the Scope feature.

greeflas commented 5 months ago

@sywhang should we close this issue or you want to add here info about future improvement that was discussed in pull request?

sywhang commented 5 months ago

I'll leave this open for now since we need some more visual improvements. Thanks