История изменений
Исправление q0tw4, (текущая версия) :
Не понял коммента. У компилятора есть несколько стадий. На одной из них происходит резолвинг идентификаторов. Вот я и предлагаю всунуть узерский макро-плагин уже после этого этапа. Ну да, придется вводить апи, позволяющее узерскому макрогенератору резолвить идентификаторы через ядро компилятора, ну чтоб там всякие gen_fresh_iden(«Foo») генерили идентификаторы аля Foo$tratata ну и с текущими поключенными крейтами можно было общатся в духе crate(«log»).resolve(«LogLevel::Info»). Ну не знаю, может это уже слишком поздний этап компиляции и макросу придется генерить AST сильно не похожий на узерский раст. Тогда грусть беда, переписывать весь компилятор придется. Ну или самому парсить весь проект и свой резолвер катать, чтоб макрос мог спросить у либы какие идентификаторы свободны и что именно имел ввиду юзер говоря Result<()> в типе
Исходная версия q0tw4, :
Не понял коммента. У компилятора есть несколько стадий. На одной из них происходит резолвинг идентификаторов. Вот я и предлагаю всунуть узерский макро-плагин уже после этого этапа. Ну да, придется вводить апи, позволяющее узерскому макрогенератору резолвить идентификаторы через ядро компилятора, ну чтоб там всякие gen_fresh_iden(«Foo») генерили идентификаторы аля Foo$tratata ну и с текущими поключенными крейтами можно было общатся в духе crate(«log»).resolve(«LogLevel::Info»). Ну не знаю, может это уже слишком поздний этап компиляции и макросу придется генерить AST сильно не похожий на узерский раст. Тогда грусть беда, переписывать весь компилятор придется.