44module Stack.Dot (dot
55 ,listDependencies
66 ,DotOpts (.. )
7+ ,ListDepsOpts (.. )
78 ,resolveDependencies
89 ,printGraph
910 ,pruneGraph
@@ -56,6 +57,13 @@ data DotOpts = DotOpts
5657 -- ^ Package names to prune from the graph
5758 }
5859
60+ data ListDepsOpts = ListDepsOpts
61+ { listDepsDotOpts :: DotOpts
62+ -- ^ The normal dot options.
63+ , listDepsSep :: Text
64+ -- ^ Separator between the package name and details.
65+ }
66+
5967-- | Visualize the project's dependencies as a graphviz graph
6068dot :: (HasEnvConfig env
6169 ,HasHttpManager env
@@ -70,13 +78,31 @@ dot :: (HasEnvConfig env
7078 => DotOpts
7179 -> m ()
7280dot dotOpts = do
73- localNames <- liftM Map. keysSet getLocalPackageViews
74- resultGraph <- createDependencyGraph dotOpts
75- let pkgsToPrune = if dotIncludeBase dotOpts
76- then dotPrune dotOpts
77- else Set. insert " base" (dotPrune dotOpts)
78- prunedGraph = pruneGraph localNames pkgsToPrune resultGraph
79- printGraph dotOpts localNames prunedGraph
81+ (localNames, prunedGraph) <- createPrunedDependencyGraph dotOpts
82+ printGraph dotOpts localNames prunedGraph
83+
84+ -- | Create the dependency graph and also prune it as specified in the dot
85+ -- options. Returns a set of local names and and a map from package names to
86+ -- dependencies.
87+ createPrunedDependencyGraph :: (HasEnvConfig env
88+ ,HasHttpManager env
89+ ,HasLogLevel env
90+ ,MonadLogger m
91+ ,MonadBaseUnlift IO m
92+ ,MonadIO m
93+ ,MonadMask m
94+ ,MonadReader env m )
95+ => DotOpts
96+ -> m (Set PackageName ,
97+ Map PackageName (Set PackageName , Maybe Version ))
98+ createPrunedDependencyGraph dotOpts = do
99+ localNames <- liftM Map. keysSet getLocalPackageViews
100+ resultGraph <- createDependencyGraph dotOpts
101+ let pkgsToPrune = if dotIncludeBase dotOpts
102+ then dotPrune dotOpts
103+ else Set. insert " base" (dotPrune dotOpts)
104+ prunedGraph = pruneGraph localNames pkgsToPrune resultGraph
105+ return (localNames, prunedGraph)
80106
81107-- | Create the dependency graph, the result is a map from a package
82108-- name to a tuple of dependencies and a version if available. This
@@ -121,15 +147,15 @@ listDependencies :: (HasEnvConfig env
121147 ,MonadIO m
122148 ,MonadReader env m
123149 )
124- => Text
150+ => ListDepsOpts
125151 -> m ()
126- listDependencies sep = do
127- let dotOpts = DotOpts True True Nothing Set. empty
128- resultGraph <- createDependencyGraph dotOpts
152+ listDependencies opts = do
153+ let dotOpts = listDepsDotOpts opts
154+ (_, resultGraph) <- createPrunedDependencyGraph dotOpts
129155 void (Map. traverseWithKey go (snd <$> resultGraph))
130156 where go name v = liftIO (Text. putStrLn $
131157 packageNameText name <>
132- sep <>
158+ (listDepsSep opts) <>
133159 maybe " <unknown>" (Text. pack . show ) v)
134160
135161-- | @pruneGraph dontPrune toPrune graph@ prunes all packages in
0 commit comments