#单文件 # #在线 #cargo #格式化 #提交 #oj

app cargo-oj

Cargo-OJ:将crate打包成单个文件,最小化和格式化

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日

#86Cargo 插件

Download history 257/week @ 2024-04-26 29/week @ 2024-05-03 245/week @ 2024-05-17 39/week @ 2024-05-24

每月422 次下载

MIT 许可证

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 ojsrc/bin/main.rs 将被创建。然后你可以

    • 在本地运行它,通过 cargo run --bin main --release,以及/或者
    • 使用 cargo-boj 或其他工具提交文件。

限制

  • 不支持使用第三方crate。
  • 不支持使用 #[path = "filepath"] 属性来指定模块文件路径。支持 modname.rsmodname/mod.rs 和内联模块。
  • 即使是在相对较小的模块结构中,删除所有不必要的 trait Traitimpl Trait for T 项目也需要几秒钟的时间。这是由于 rustc 的死代码警告限制和特质解析的复杂性。

安装

cargo install --path=.

用法

cargo oj

依赖

~3.5–10MB
~97K SLoC