我正在尝试创建一个语法扩展,但是我得到了E0432错误。我在错误索引中阅读了相关信息,但是不知道该怎么做!
我收到的错误信息是:
这是我的IDE发生的事情:
根据接收到的评论,我将扩展作为一个单独的箱子,新的应用程序结构如下截图所示。
“bin”的“Cargo.toml”文件如下:
"lib" 的 "Cargo.toml" 是:
我收到的错误信息是:
/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; }
根据接收到的评论,我将扩展作为一个单独的箱子,新的应用程序结构如下截图所示。
“bin”的“Cargo.toml”文件如下:
[package]
name = "hello_world"
version = "0.1.0"
authors = ["hasan"]
[dependencies]
extension = { path = "./extension" }
"lib" 的 "Cargo.toml" 是:
[package]
name = "extension"
version = "0.1.0"
authors = ["hasan"]
[dependencies]
[lib]
plugin = true
rustc 1.29.0-nightly (64f7de921 2018-07-12)
版本。 - undefinedlib
crate中,并在Cargo.toml
中设置plugin = true
... 也许你正在一个bin
crate中编写这段代码? - undefinedsrc
文件夹中,这两个文件分别是main.rs
和lib.rs
。 - undefinedbin
crate,另一个是lib
crate。你可以在bin
目录下创建lib
crate,并且在bin
crate 的Cargo.toml
文件中设置依赖的路径指向lib
crate。而lib
crate 的Cargo.toml
文件可以设置plugin = true
。 - undefined