3

我想使用一个使用属性的自定义派生宏。对于 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::*;

如何避免全局导入?Pest_derive crate 的代码非常简单,我不知道有什么必要的东西*导入不是derive_parseror 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"]
   |   ^^^^^^^
4

1 回答 1

4

这是导入派生的错误语法。您导入派生的名称,而不是基础函数。在这种情况下,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 及更高版本允许您像这样导入宏。

于 2018-10-29T15:22:39.443 回答