Я нашел обходной путь. Вы можете запустить анализатор языка Rust и разобрать исходный код самостоятельно.
Сначала добавьте зависимость к Cargo.toml
.
[dependencies]
syntex_syntax = "0.59.1"
И добавить эти строки в src/main.rs
.
extern crate syntex_syntax;
use std::path::*;
use syntex_syntax::parse::*;
use syntex_syntax::codemap::*;
fn main() {
let f = file!(); // Get absolute path to this file.
let p = Path::new(f);
let m = FilePathMapping::empty();
let s = ParseSess::new(m);
let r = parse_crate_from_file(&p, &s);
println!("{:?}", r);
}
Теперь у вас есть проанализированный AST.
Обновление
После нескольких недель попыток я узнал, что расширение макроса выполняется на этапе синтаксического анализа. Поскольку он выполняется до этапа анализа типов, я не могу запрашивать полностью разрешенные пути для каждого типа, поэтому стабильная ссылка нескольких типов из нескольких модулей становится очень сложной или невозможной. Наконец, я отказался от макроэкономического подхода.