创建语法扩展时出现未解决的导入错误E0432

时间:2018-07-14 09:39:36

标签: rust

我正在尝试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

enter image description here

1 个答案:

答案 0 :(得分:1)

使用不稳定的功能时会发生这种情况:它们会改变! 您链接的博客文章现在已经很旧了(也许是2015年?)...许多事情仍然适用,但是事情正在四处移动。

您可以找到最新的official documentation here

快速浏览文档揭示了第一个问题是rustc::plugin已移至其自己的板条箱:rustc_plugin。我没有遵循所有文档,但可能还会遇到更多问题。