2 个版本
0.2.1 | 2022年5月21日 |
---|---|
0.2.0 | 2022年5月21日 |
#27 in #改进
在 pass_by_catastrophe 中使用
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