I've got an idea myself, on doing something like this for the actual execution path - e.g. detecting what fields on of dict a function acts upon.
The immediate use is generation of minimal test data (the least data that runs each possible execution path), but I think in general it could be useful for debugging; consider knowing that, for example, the function "Int Foo(Dict bar)" will (conditionally) access only a certain key on bar, or will (necessarily) always require a certain key, such that this kind of information is available as a tooltip when you mouseover the parameter.
The immediate use is generation of minimal test data (the least data that runs each possible execution path), but I think in general it could be useful for debugging; consider knowing that, for example, the function "Int Foo(Dict bar)" will (conditionally) access only a certain key on bar, or will (necessarily) always require a certain key, such that this kind of information is available as a tooltip when you mouseover the parameter.