Как я могу получить полный путь черты, связанной в плагине компилятора Rust? - PullRequest
0 голосов
/ 26 августа 2018

Я работаю над плагином Rust, который должен получить доступ к абсолютному пути границы черты.На практике это означает, что для следующего кода я хочу разрешить полный путь Debug как std::fmt::Debug.

use std::fmt::*;

#[foo]
trait Foo: Debug {}

Мой нынешний подход состоит в том, чтобы взять Annotatable that MultiItemDecoratorобеспечивает для меня и шаблон сопоставления его с Annotatable::Item, где я сопоставляю .node с ItemKind::Trait.Затем я сопоставляю .generic_bounds с коллекцией GenericBound::Trait, где я получаю .trait_ref.path.

Эта структура, однако, содержит только path(Debug), что для меня недостаточно информации.

1 Ответ

0 голосов
/ 27 августа 2018

Вы не можете.

Драйвер Rustc :

[…] основные этапы компилятора:

  1. Ввод анализа: начальный синтаксический анализ ящика
  2. Настройка и расширение: разрешение #[cfg] атрибутов, разрешение имен и расширение макросов
  3. Выполнение аналитических проходов: Выполнить разрешение черт , проверку типов, проверку области и другие разные анализы на ящике
  4. Перевести на LLVM: преобразовать в форму LLVM IR в памяти и превратить ее в исполняемые / объектные файлы

(выделение мое)

Макросы раскрываются до разрешения черты, поэтому во время запуска вашего плагина ничего не известно об этом Debug, кроме имениприведено в исходном коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...