我正在尝试make a syntax extension,但出现错误E0432。我在the error index中读到了有关此内容的信息,但无法理解该怎么做!
我收到的错误文本是:
/Users/hasan/.cargo/bin/cargo run --color=always --package rust01 --bin rust01
Compiling rust01 v0.1.0 (file:///Users/hasan/PycharmProjects/rust01)
error[E0432]: unresolved import `rustc::plugin` --> src/lib.rs:6:12
| 6
| use rustc::plugin::Registry;
| ^^^^^^ Could not find `plugin` in `rustc`
error[E0432]: unresolved import
`syntax::ext::base::SyntaxExtension::Modifier` --> src/lib.rs:12:5
| 12
| use syntax::ext::base::SyntaxExtension::Modifier;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ no `Modifier` in `ext::base::SyntaxExtension`
error[E0432]: unresolved import `syntax::parse::token::intern` -->
src/lib.rs:13:5
| 13
| use syntax::parse::token::intern;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ no `intern` in `parse::token`
这是在我的IDE中发生的:
#![feature(plugin_registrar, rustc_private)]
extern crate syntax; extern crate rustc;
use rustc::plugin::Registry;
use syntax::ptr::P; use syntax::ast::{Item, MetaItem}; use syntax::ext::base::ExtCtxt; use syntax::codemap::Span; use syntax::ext::base::SyntaxExtension::Modifier; use syntax::parse::token::intern;
#[plugin_registrar] pub fn registrar(reg: &mut Registry) {
reg.register_syntax_extension(intern("extension"), Modifier(Box::new(expand))); }
fn expand(_: &mut ExtCtxt, _: Span, _: &MetaItem, item: P<Item>) -> P<Item> {
println!("Hello world!");
return item; }
根据收到的评论,我将扩展名放在单独的箱子中,新的应用程序结构在下面的屏幕截图中。
Cargo.toml
中的bin
是:
[package]
name = "hello_world"
version = "0.1.0"
authors = ["hasan"]
[dependencies]
extension = { path = "./extension" }
Cargo.toml
中的lib
是:
[package]
name = "extension"
version = "0.1.0"
authors = ["hasan"]
[dependencies]
[lib]
plugin = true
答案 0 :(得分:1)
使用不稳定的功能时会发生这种情况:它们会改变! 您链接的博客文章现在已经很旧了(也许是2015年?)...许多事情仍然适用,但是事情正在四处移动。
您可以找到最新的official documentation here。
快速浏览文档揭示了第一个问题是rustc::plugin
已移至其自己的板条箱:rustc_plugin
。我没有遵循所有文档,但可能还会遇到更多问题。