缺失的宏片段指定符
概述
- The
missing_fragment_specifier
lint 现在是一个硬错误。
详情
The missing_fragment_specifier
lint 检测到 macro_rules!
宏定义中一个 未使用的 模式,该模式有一个元变量 (例如 $e
) 后面没有跟随片段指定符 (例如 :expr
) 的情况。这在 2024 Edition 中现在是一个硬错误。
macro_rules! foo { () => {}; ($name) => { }; // ERROR: missing fragment specifier } fn main() { foo!(); }
调用带有参数的宏,这些参数将匹配一个缺少指定符的规则 (例如,foo!($name)
) 在所有版本中都是一个硬错误。然而,仅仅定义一个带有缺失片段指定符的宏不是,尽管我们在 Rust 1.17 中添加了一个 lint。
我们希望在所有版本中都将其设为硬错误,但是现在会有太多的破坏性更改。因此,我们首先在 Rust 2024 中将其设为硬错误。1
1
该 lint 被标记为 “未来不兼容” 警告,以表明它可能在未来的版本中成为所有版本中的硬错误。请参阅 #40107 以获取更多信息。
迁移
要将您的代码迁移到 2024 Edition,请从宏中删除未使用的匹配器规则。missing_fragment_specifier
lint 在所有版本中默认开启,并且应该提醒您注意具有此问题的宏。
此更改没有自动迁移。我们预计这种风格的宏非常罕见。自 Rust 1.17 以来,该 lint 一直是未来不兼容的 lint,自 Rust 1.20 以来是默认拒绝的 lint,并且自 Rust 1.82 以来,它已经警告了关于使用此模式的依赖项。