Теперь любой макрос может поместив в typeBuilder.UserData["GoToInfoMap"] хэш-таблицу типа Hashtable[Location, Location], обеспечить поддержку "навигации к определению" (Go To Defenition) для произвольного кода. Первый Location (ключ) — это локейшон области в которой должна срабатывать навигация. Второй локейшон — это локешон куда должен переместиться курсор при выборе пункта контекстного меню "Go To Defenition".
Это позволяет макросам задавать собственные правила навигации к определениям.
Я реализовал эту фичу для макроса PegGrammar. Теперь в нем можно выделить ссылку на правило, выбрать из контекстного меню пункт "Go To Defenition" и курсор переместится к соответствующему правилу.
Если пункт контекстного меню "Go To Defenition" выбрать на имени правила, курсор переместится к методу-обработчику.
Если пункт контекстного меню "Go To Defenition" выбрать на имени метода-обработчика, курсор переместится на определение соответствующего правила.
ЗЫ
Остается реализовать аналогичную поддержку для "Go To Reference". Так же, возможно, имеет смысл сделать поддержку пользовательского автодополнения при вводе и пользовательских хинтов. Тогда к хитрым ДСЛ-ям вроде грамматики в PegGrammar можно будет приделать практически полную поддержку интеллисенса. При этом не придется ничего хардкодить, так как поддержка будет универсальной.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.