7import qualified Data.Map as Map
8import qualified Data.Set as Set
10import qualified AST.Optimized as Opt
11import qualified AST.Module.Name as ModuleName
12import qualified Elm.Package as Pkg
13import qualified Elm.Name as N
20findDebugUses :: Pkg.Name -> Opt.Graph -> [N.Name]
21findDebugUses pkg (Opt.Graph _ graph _) =
22 Set.toList $ Map.foldrWithKey (addDebugUses pkg) Set.empty graph
25addDebugUses :: Pkg.Name -> Opt.Global -> Opt.Node -> Set.Set N.Name -> Set.Set N.Name
26addDebugUses here (Opt.Global (ModuleName.Canonical pkg home) _) node uses =
27 if pkg == here && nodeHasDebug node then
33nodeHasDebug :: Opt.Node -> Bool
36 Opt.Define expr _ -> hasDebug expr
37 Opt.DefineTailFunc _ expr _ -> hasDebug expr
38 Opt.Ctor _ _ _ -> False
42 Opt.Cycle defs _ -> any (hasDebug . snd) defs
43 Opt.Manager _ -> False
44 Opt.Kernel _ _ -> False
45 Opt.PortIncoming expr _ -> hasDebug expr
46 Opt.PortOutgoing expr _ -> hasDebug expr
49hasDebug :: Opt.Expr -> Bool
57 Opt.VarLocal _ -> False
58 Opt.VarGlobal _ -> False
59 Opt.VarEnum _ _ -> False
61 Opt.VarCycle _ _ -> False
62 Opt.VarDebug _ _ _ _ -> True
63 Opt.VarKernel _ _ -> False
64 Opt.List exprs -> any hasDebug exprs
65 Opt.Function _ expr -> hasDebug expr
66 Opt.Call e es -> hasDebug e || any hasDebug es
67 Opt.TailCall _ args -> any (hasDebug . snd) args
68 Opt.If conds finally -> any (\(c,e) -> hasDebug c || hasDebug e) conds || hasDebug finally
69 Opt.Let def body -> defHasDebug def || hasDebug body
70 Opt.Destruct _ expr -> hasDebug expr
71 Opt.Case _ _ d jumps -> deciderHasDebug d || any (hasDebug . snd) jumps
72 Opt.Accessor _ -> False
73 Opt.Access r _ -> hasDebug r
74 Opt.Update r fs -> hasDebug r || any hasDebug fs
75 Opt.Record fs -> any hasDebug fs
77 Opt.Tuple a b c -> hasDebug a || hasDebug b || maybe False hasDebug c
81defHasDebug :: Opt.Def -> Bool
84 Opt.Def _ expr -> hasDebug expr
85 Opt.TailDef _ _ expr -> hasDebug expr
88deciderHasDebug :: Opt.Decider Opt.Choice -> Bool
89deciderHasDebug decider =
91 Opt.Leaf (Opt.Inline expr) -> hasDebug expr
92 Opt.Leaf (Opt.Jump _) -> False
93 Opt.Chain _ success failure -> deciderHasDebug success || deciderHasDebug failure
94 Opt.FanOut _ tests fallback -> any (deciderHasDebug . snd) tests || deciderHasDebug fallback
98-- TODO: FIND GLOBALLY UNUSED DEFINITIONS?
99-- TODO: FIND PACKAGE USAGE STATS? (e.g. elm-lang/core = 142, author/project = 2, etc.)
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list