#import #stable #once #per #flags #improved #prefer-core

magic-import

请勿使用此功能

2 个版本

0.2.1 2022年5月21日
0.2.0 2022年5月21日

#27 in #改进


pass_by_catastrophe 中使用

BSD-2-Clause 协议

15KB
230

magic-import

auto-import 的改进版本

magic_import::magic!(); 宏会展开为使其余代码编译所需的任何 use 语句。它不足以在模糊的情况下确定正确的导入,但它有一些规则可以获得良好的导入,而 auto-import 只会导入第一个可用的选项。如果没有规则可以找出最佳导入,它将随机选择一个。

stable 特性标志将在稳定版上工作,但每个 crate 只能使用一次。这是 auto-import 的行为,但 magic-import 的默认设置是在每个 文件 中使用一次,并使用 proc_macro_span 不稳定功能。如果您想在每个 crate 中使用不止一次,同时还要支持稳定工具链,请考虑使用 nightly-crimes,这是一个非常酷的包,可能有助于您。

https://twitter.com/Terrain222/status/1528076303890624515

示例

// it even resolves macros and prelude items fine
#![no_implicit_prelude]

// magic_import does not try to resolve which crates to import
// these would normally be included by prelude
extern crate magic_import;
extern crate std;
// extern crate core; // for prefer_core

magic_import::magic!();

fn main() {
    let _ = BTreeMap::<File, PathBuf>::new();
    if let Ok(i) = i32::from_str("123") {
        print!("{i}");
    } else {
        unreachable!();
    }
    std::io::stdout().write_all(b"!\n").unwrap();
}
$ cargo run
   Compiling magic-import v0.2.0
   Injecting std::print
   Injecting std::fs::File
   Injecting std::collections::BTreeMap
   Injecting std::io::Write
   Injecting std::unreachable
   Injecting std::result::Result::Ok
   Injecting std::str::FromStr
   Injecting std::path::PathBuf
    Finished dev [unoptimized + debuginfo] target(s) in 0.73s
     Running `target\debug\examples\example.exe`
123!

您还可以指定 prefer_core 特性标志,以指示应使用 core:: 而不是 std::

$ cargo run
   Compiling magic-import v0.2.0
   Injecting std::collections::BTreeMap
   Injecting core::result::Result::Ok
   Injecting std::io::Write
   Injecting std::path::PathBuf
   Injecting std::fs::File
   Injecting std::str::FromStr
   Injecting std::print
   Injecting core::unreachable
    Finished dev [unoptimized + debuginfo] target(s) in 0.65s
     Running `target\debug\examples\example.exe`
123!

请注意,如果没有合适的 core:: 导入,它仍然可能从 std:: 中导入。

依赖项

~460KB