When making a project of significant size, a challenge that I sometimes encounter is remembering how all the functions that I've defined are related to one another. To address this, I've written the code below, which pulls from Names["Global`*"] the functions I've defined, and makes a Graph of them based on which functions call which other functions.
In the toy example below, the definition for exampleFunc1[x_] calls on exampleFunc2, exampleFunc3, and exampleFunc4. So the Graph contains directed edges going from exampleFunc1 to 2, 3, and 4.
In the graph, you can hover over each function name to see a tooltip of its definition.
The primary difficulty that I encountered with coding this is that parsing Names["Global`*"] seems to require some workarounds. That is because I'm identifying functions based on the occurrence of HoldPattern; but searching for HoldPattern produces nonstandard results. As a result, I convert the Names[] output to String and use StringReplace, which is not ideal. I would prefer to identify user-defined functions based on the structured Names[] output, but I couldn't figure out how to do so without HoldPattern causing problems. Any advice here would be appreciated.