有没有办法检查哪些变量(和代码行)对Javascript中的值有贡献?例如,如果我将检查此代码中的参数input
let x=5;
let y=x+3;
function a(input) {
// analyzing input in this scope/context,
// i would like to see that it is a combination of
// x from line 1 and a constant '3' from line 2.
inspectDataFlow(input);
}
a(y);
我想得到一个类似这样的数据结构输出:
input (line 8)
y (line 2)
x (line 1)
"3" (line 2)
目的和目标
我的目标是拥有一个工具,您可以在其中查看/更改Javascript变量的值,它会自动调整值来自的变量。
例如,您可以使用绘制形状的功能。当您在视觉上调整绘制的形状时,颜色,形状位置等的原始变量会相应更新。
有点像这样但是编辑任意代码,即使在用户修改了代码行之后:
http://yining1023.github.io/p5PlayGround/
我想到的另一个想法是想象一个变量是如何组成的:哪一行是它们的组合以及它们如何影响结果。
潜在方法
我正在考虑的一种方法是使用Esprima / Acorn为代码添加检测,然后在运行时调用。仪器将跟踪哪些变量已被调用哪些行(和范围)以及它们如何相互关联,有点像这样:
http://alltom.com/pages/instrumenting-javascript/
我想知道这是否有用,是否有可以用于此的框架?或者,如果必须从头开始做仪器?
相关主题
这可能与数据流分析或使用定义链有关,但我不确定,因为我对编译器知之甚少。
https://en.wikipedia.org/wiki/Use-define_chain
我的第一个想法是,这可以使用像Esprima / Acorn这样的静态分析来完成,但我不确定这是否是正确的方法,或者是否可以使用一些自定义Javascript解释器来完成。