#cargo-subcommand #cargo #nono #subcommand #smart-contracts #no-std

no-std app cargo-davinono

检测你的crate及其依赖的(可能)no_std兼容性

3个版本

0.1.12 2023年10月9日
0.1.11 2023年10月9日
0.1.10 2023年10月6日

#151#subcommand

MIT/Apache

47KB
1K SLoC

cargo nono - 检测你的crate及其依赖的(可能)no_std兼容性

动机

从嵌入式编程,到Rust中的智能合约,再到通用的跨平台可移植crate,使用#![no_std]的crate越来越普遍。然而,目前要确定一个crate是否与no_std使用兼容,以及为什么(或不)兼容,是一个非常繁琐的过程,通常需要长时间的试错过程,并且需要深入挖掘所有依赖项的源代码。

cargo nono试图帮助你导航当前no_std使用的地雷区,以及最大的“禁忌”。

安装

从crates.io

cargo install cargo-davinono
# For warnings with more informative messages install like this
RUSTFLAGS="--cfg procmacro2_semver_exempt" cargo install cargo-davinono

演示

asciicast

使用方法

在您要检查的crate目录中运行

cargo nono check

cargo nono check子命令也理解--no-default-features--features <FEATURES>标志,有助于条件no_std设置。

功能

  • 尝试通过寻找 no_std 属性或常用的条件 #![no_std]#![cfg_attr(not(feature = "std"), no_std)]
  • 帮助确定哪些依赖和功能标志激活了 std 功能标志
  • 警告代码中使用 use std:: 语句

计划中的功能

  • 警告 [build-dependencies] 功能溢出:cargo#5730
  • 也警告 use std::,但上面的代码具有 #[cfg(feature = "std")] 或 #[cfg(not(feature = "std"))]

许可

在以下许可下使用

任选其一。

依赖

~4–12MB
~113K SLoC