forked from GitHub/gf-core
dependency graph can be restricted to some modules; added help dg
This commit is contained in:
@@ -6,8 +6,11 @@ import GF.Grammar.Grammar
|
||||
import GF.Infra.Modules
|
||||
import GF.Infra.Ident
|
||||
|
||||
depGraph :: SourceGrammar -> String
|
||||
depGraph = prDepGraph . grammar2moddeps
|
||||
import Data.List (nub,isPrefixOf)
|
||||
|
||||
-- the list gives the only modules to show, e.g. to hide the library details
|
||||
depGraph :: Maybe [String] -> SourceGrammar -> String
|
||||
depGraph only = prDepGraph . grammar2moddeps only
|
||||
|
||||
prDepGraph :: [(Ident,ModDeps)] -> String
|
||||
prDepGraph deps = unlines $ [
|
||||
@@ -47,15 +50,25 @@ data ModDeps = ModDeps {
|
||||
|
||||
noModDeps = ModDeps MTAbstract [] [] [] [] [] [] []
|
||||
|
||||
grammar2moddeps :: SourceGrammar -> [(Ident,ModDeps)]
|
||||
grammar2moddeps gr = [(i,depMod m) | (i,m) <- modules gr] where
|
||||
depMod m = noModDeps{
|
||||
modtype = mtype m,
|
||||
ofs = case mtype m of
|
||||
MTConcrete i -> [i]
|
||||
MTInstance i -> [i]
|
||||
_ -> [],
|
||||
extendeds = map fst (extend m),
|
||||
openeds = map openedModule (opens m),
|
||||
extrads = mexdeps m
|
||||
}
|
||||
grammar2moddeps :: Maybe [String] -> SourceGrammar -> [(Ident,ModDeps)]
|
||||
grammar2moddeps monly gr = [(i,depMod i m) | (i,m) <- modules gr, yes i]
|
||||
where
|
||||
depMod i m =
|
||||
noModDeps{
|
||||
modtype = mtype m,
|
||||
ofs = case mtype m of
|
||||
MTConcrete i -> [i | yes i]
|
||||
MTInstance i -> [i | yes i]
|
||||
_ -> [],
|
||||
extendeds = nub $ filter yes $ map fst (extend m),
|
||||
openeds = nub $ filter yes $ map openedModule (opens m),
|
||||
extrads = nub $ filter yes $ mexdeps m
|
||||
}
|
||||
yes i = case monly of
|
||||
Just only -> match (showIdent i) only
|
||||
_ -> True
|
||||
match s os = any (\x -> doMatch x s) os
|
||||
doMatch x s = case last x of
|
||||
'*' -> isPrefixOf (init x) s
|
||||
_ -> x == s
|
||||
|
||||
|
||||
Reference in New Issue
Block a user