7 个版本 (破坏性)
0.7.0 | 2024年5月22日 |
---|---|
0.6.0 | 2024年5月22日 |
0.5.0 | 2024年4月29日 |
0.4.0 | 2024年4月29日 |
0.1.0 | 2023年9月30日 |
#86 在 Cargo 插件 中
每月422 次下载
30KB
531 行
cargo-oj:在线评测系统的解决方案打包器
它做什么?
所有在线评测系统(OJs)都要求你编写和提交一个单独的文件。但将所有I/O和算法片段复制粘贴到主文件中不仅繁琐,而且违背了模块化代码的精神。
cargo-oj
允许你在库crate中的模块结构中保持你的代码组织,它会愉快地将你的 lib.rs
和其子项打包到 main.rs
中,同时移除所有不必要的冗余(即死代码)。
如何使用它?
-
创建一个库crate。
-
在
lib.rs
中编写你的解决方案,其中应包含一个pub fn main() {...}
. 可选地将#![allow(dead_code)] #![allow(unused_imports)]
放在
lib.rs
的顶部。这将消除IDE中关于未使用项(主要是数据结构和算法)的警告。cargo-oj
在测试死代码之前会删除这些声明。 -
将你的库作为
lib.rs
的子模块编写。 标记你将直接使用的所有项为pub(crate)
。 这允许你在同一crate中的不同模块中使用这些项(特别是lib.rs
),同时让rustc
在适当的时候发出未使用警告。 -
当你的解决方案完成时,在crate根目录中运行
cargo oj
。src/bin/main.rs
将被创建。然后你可以- 在本地运行它,通过
cargo run --bin main --release
,以及/或者 - 使用
cargo-boj
或其他工具提交文件。
- 在本地运行它,通过
限制
- 不支持使用第三方crate。
- 不支持使用
#[path = "filepath"]
属性来指定模块文件路径。支持modname.rs
、modname/mod.rs
和内联模块。 - 即使是在相对较小的模块结构中,删除所有不必要的
trait Trait
和impl Trait for T
项目也需要几秒钟的时间。这是由于rustc
的死代码警告限制和特质解析的复杂性。
安装
cargo install --path=.
用法
cargo oj
依赖
~3.5–10MB
~97K SLoC