如何在不分叉 crate 的情况下将 #![feature(***)] 添加到另一个 crate 的属性?

How do I add #![feature(***)] to another crate's attributes without forking the crate?

每次我看到如下错误:

error: associated constants are experimental (see issue #29646)
...
= help: add #![feature(associated_consts)] to the crate attributes to enable
= note: this error originates in a macro outside of the current crate

我分叉了 crate 并将功能添加到 crate 属性中,然后替换了我的 Cargo.toml 中的依赖项:

[replace."bitflags:1.0.0"]
git = "https://github.com/boehm-s/bitflags"
rev = "bb2afce"

有没有办法在不分叉 crate 的情况下消除这些错误?

最近在 Rust 1.20 中稳定了相关常量;如果升级 Rust 编译器,此错误应该会消失,无需任何代码更改。

[replace] and [patch], there's also the option of using .cargo/config to override a dependency locally外不改Cargo.toml.

How do I add #![feature(***)] to another crate's attributes without forking the crate?

不会。你不能改变另一个板条箱而不...改变它。

您使用的是旧的夜间编译器; 更新它。如果您使用的是夜间编译器,则您有责任使其保持最新状态。如果您不知道为什么要使用夜间编译器,请切换到稳定的编译器。


只有在以下情况下才会出现这种情况:

  1. 您正在使用夜间编译器。如果不是,您将不会得到添加该属性的建议,这将是一个硬错误。
  2. 您使用的 crate 依赖于您的编译器版本中尚未稳定的功能,因此需要属性来启用它。
  3. 该功能已在较新版本的 Rust 中稳定下来,因此箱子本身不再需要具有该属性。

对于此示例,您可以阅读 the crates changelog:

1.0.0

  • [breaking change] Macro now generates associated constants (#24)

  • [breaking change] Minimum supported version is Rust 1.20, due to usage of associated constants