为什么通过 use some_crate::derive_foo 导入自定义派生 Foo 不起作用?
Why does importing a custom derive Foo via `use some_crate::derive_foo` not work?
我想使用使用属性的自定义派生宏。对于 Rust 2015,我写道:
#[macro_use]
extern crate pest_derive;
#[derive(Parser)]
#[grammar = "grammar.pest"]
pub struct MyParser;
使用 edition = '2018'
,extern crate
已弃用,因此 macro_use
不可用。我以为我可以写 use pest_derive::{grammar,derive_parser};
,但我必须写 use pest_derive::*;
.
如何避免 glob 导入? pest_derive 箱子的代码是 very simple,我不知道 *
导入的东西不是 derive_parser
或 grammar
.
error[E0658]: The attribute `grammar` is currently unknown to the compiler and
may have meaning added to it in the future (see issue #29642)
--> src/parser/mod.rs:10:3
|
10 | #[grammar = "rst.pest"]
| ^^^^^^^
导入派生的语法不正确。您导入派生的名称,而不是底层函数。在这种情况下,use pest_derive::Parser
:
use pest_derive::Parser;
#[derive(Parser)]
#[grammar = "grammar.pest"]
pub struct MyParser;
或
#[derive(pest_derive::Parser)]
#[grammar = "grammar.pest"]
pub struct MyParser;
这个问题也不特定于 Rust 2018。 Rust 1.30 及更高版本允许您像这样导入宏。
我想使用使用属性的自定义派生宏。对于 Rust 2015,我写道:
#[macro_use]
extern crate pest_derive;
#[derive(Parser)]
#[grammar = "grammar.pest"]
pub struct MyParser;
使用 edition = '2018'
,extern crate
已弃用,因此 macro_use
不可用。我以为我可以写 use pest_derive::{grammar,derive_parser};
,但我必须写 use pest_derive::*;
.
如何避免 glob 导入? pest_derive 箱子的代码是 very simple,我不知道 *
导入的东西不是 derive_parser
或 grammar
.
error[E0658]: The attribute `grammar` is currently unknown to the compiler and
may have meaning added to it in the future (see issue #29642)
--> src/parser/mod.rs:10:3
|
10 | #[grammar = "rst.pest"]
| ^^^^^^^
导入派生的语法不正确。您导入派生的名称,而不是底层函数。在这种情况下,use pest_derive::Parser
:
use pest_derive::Parser;
#[derive(Parser)]
#[grammar = "grammar.pest"]
pub struct MyParser;
或
#[derive(pest_derive::Parser)]
#[grammar = "grammar.pest"]
pub struct MyParser;
这个问题也不特定于 Rust 2018。 Rust 1.30 及更高版本允许您像这样导入宏。