A CLI script that takes a position in a JS file inside an npm package, and outputs a directed graph of all of the functions that call the function at that position.
npm install provenanceA CLI script that takes a position in a JS file inside an npm package, and
outputs a directed graph of all of the functions that call the function at that
position.
!demo
My provenance setup requires:
* iojs v2.x
* graphviz (via homebrew)
I wrote this so I could mash and get a quick heads up display of
what calls the function I'm looking at. To that end, I wrote a script to store
stdin as a tempfile and use qlmanage to quickly display it:
``bashchmod +x
#!/bin/bashcall this file "ql" and
it`
tmpfile=$(mktemp -t ql)
mv "$tmpfile"{,.png}
tmpfile=${tmpfile}.png
cat > "$tmpfile"
qlmanage -p $tmpfile >& /dev/null
rm $tmpfile
With that file on $PATH as ql, I added the following info to my .vimrc:
`vim`
" ~/.vimrc
nmap
Provenance trys to note all calling paths into your current function.
* It attempts to note "inversion of control" (or ioc) calls, though it sometimesobj[something]()
misses.
* It will definitely miss call that is a result of a dynamic lookup: .package.json
* It needs a valid at the root of your project to build a list"main"`
of files to look at. If your file is not indirectly required by the
script of your package.json, it may not produce useful output.
* It will also note "defs" relations — as in, "this function is defined by
another function."
* It only notes any given function once at most — there may be many paths through
a function to your current function, but it will only appear once.
MIT