请求:
我希望能够编写一个分析器,它可以为某个表达式提供代理值并触发对文档的重新解析。
动机:
我们的代码中充斥着 ABTest,它们可以处于已部署或活动状态,并带有控制组和变体组。通过数据库查找来确定测试的状态。对于与控制组一起部署的测试,以下形式的任何语句都将评估为 false:
if(ExperimentService.IsInVariant(ABTest.Test1))
{
}
我正在尝试提供工具,以便在开发时通过在这种情况下将其变灰来更轻松地处理它。事实上,这是相当有限且不健壮的,因为我基本上必须自己玩解析器。
如果实际代码是
if(!ExperimentService.IsInVariant(ABTest.Test1))
或者
if(ExperimentService.IsInVariant(ABTest.Test1) || true)
或者
var val = ..... && (ExperimentService.IsInVariant(ABTest.Test1);
if(val){
// val is always going to be false if we deployed control.
}
我可以看到提供的一种可能的方法是允许我们编写一次触发的分析器并在实际 IDE 解析发生之前重写树(或者,好吧,只是第二次解析它)。这些应该只触发一次,并允许我们用另一个替换某个表达式。这将允许我将所有这些实验调用交换为真假文字。
因此,这些部分可以受益于所有其他 IDE 功能,例如无法访问代码的代码灰色化,但也可以受益于更复杂的功能,例如永远不会有不同值的变量
显然这只是一个例子,我不确定它有多可行。任何关于适当功能或已经存在的东西的建议都非常受欢迎。