Запрос:
Я бы хотел написать анализатор, который может предоставить значение прокси для определенного выражения и вызвать повторный анализ документа.
Мотивация:
Наш код завален ABTests, который может быть либо в развернутом, либо в активном состоянии с группой управления и варианта. Определение состояния теста выполняется через поиск базы данных. Для тестов, которые развертываются с контрольной группой, любой оператор следующей формы будет оценивать значение 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, таких как кодирование кода для недостижимого кода, но также более сложные, такие как переменная, которая никогда не будет иметь другое значение
Очевидно, это просто пример, и я не уверен, насколько это возможно. Любые предложения относительно правильной функции или того, что уже существует, более чем приветствуются.