Почему импорт пользовательского производного Foo через `use some_crate :: diverve_foo` не работает? - PullRequest
0 голосов
/ 29 октября 2018

Я хочу использовать пользовательский макрос для извлечения, который использует атрибуты. Для 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 очень простой , я понятия не имею, какую необходимую вещь * импортирует, а не 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"]
   |   ^^^^^^^

1 Ответ

0 голосов
/ 29 октября 2018

Это неправильный синтаксис для импорта производного. Вы импортируете имя производного, а не основную функцию. В этом случае 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 и выше позволяет вам импортировать макросы вот так.

...