如何使用 cargo crate 列出项目的源文件?
How to list a project's source files using the cargo crate?
我正在尝试使用 cargo crate 列出 Rust 项目的源文件。我不能简单地列出目录中存在的所有 .rs
文件,因为我想准确检索编译器在编译期间 看到 的文件,这可能不是全部.rs
个文件。
我正在对 3 个项目的 the Alacritty repository, which has a cargo workspace 进行实验。到目前为止,这是我的代码:
extern crate cargo;
use std::path::Path;
use cargo::core::Source;
fn main() {
let path = Path::new("/tmp/alacritty/Cargo.toml");
let config = cargo::util::config::Config::default().unwrap();
let ws = cargo::core::Workspace::new(&path, &config).unwrap();
for pkg in ws.members() {
println!("found package {}", pkg);
let config = ws.config();
let mut src = cargo::sources::PathSource::new(pkg.root(), pkg.package_id().source_id(), config);
src.update().unwrap();
let src_files = src.list_files(pkg).unwrap();
println!("found {} source files", src_files.len());
}
}
这是输出:
found package alacritty v0.5.0-dev (/tmp/alacritty/alacritty)
found 0 source files
found package alacritty_terminal v0.5.0-dev (/tmp/alacritty/alacritty_terminal)
found 0 source files
found package font v0.1.0 (/tmp/alacritty/font)
found 0 source files
已正确找到工作区的成员,但我未能检索到每个成员的源文件。我错过了什么?
在大海捞针中按顺序搜索针的每个元素。每次找到匹配元素时,只在大海捞针的剩余部分继续搜索。每次匹配一个元素时,您都可以通过大海捞针的新子切片来很好地表达这一点。
您的代码有效!
如果您 运行 'cargo vendor' 在 alacritty 树中,这应该可以解决您的问题。研究 'cargo vendor' command 另外,研究 cargo build 命令的 --offline 开关。我不需要使用这个,但它对阅读很有帮助。
基本上货源都是货源拉进来的
我不确定您的代码为何无法正常工作。我很难使用 /tmp 目录重新创建它。然后,我使用了一个普通目录并结合了对 'cargo vendor' 的调用,并且成功了。在下面剪切和粘贴我的代码之前,请务必将“/Users/[用户名]”更改为您自己的主目录路径。
这是我的程序:
cd ~
git clone https://github.com/jwilm/alacritty
cargo vendor
下一部分可能没有必要:
mkdir /Users/[username]/alacritty/.cargo
在 /Users/[用户名]/alacritty/ 创建一个文件。cargo/config
并插入以下内容:
[source.crates-io]
replace-with = "vendored-sources"
[source.vendored-sources]
directory = "vendor"
必要部分续:
修改路径语句以指向新创建的 alacritty 路径:
let path = Path::new("/Users/[username]/alacritty/Cargo.toml");
现在,运行 你的代码
cargo run
这是我的输出:
cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.27s
Running `target/debug/test3`
found package alacritty v0.5.0-dev (/Users/jmurray/alacritty/alacritty)
found 18 source files
found package alacritty_terminal v0.5.0-dev
(/Users/[username]/alacritty/alacritty_terminal)
found 172 source files
found package font v0.1.0 (/Users/jmurray/alacritty/font)
found 12 source files
我正在尝试使用 cargo crate 列出 Rust 项目的源文件。我不能简单地列出目录中存在的所有 .rs
文件,因为我想准确检索编译器在编译期间 看到 的文件,这可能不是全部.rs
个文件。
我正在对 3 个项目的 the Alacritty repository, which has a cargo workspace 进行实验。到目前为止,这是我的代码:
extern crate cargo;
use std::path::Path;
use cargo::core::Source;
fn main() {
let path = Path::new("/tmp/alacritty/Cargo.toml");
let config = cargo::util::config::Config::default().unwrap();
let ws = cargo::core::Workspace::new(&path, &config).unwrap();
for pkg in ws.members() {
println!("found package {}", pkg);
let config = ws.config();
let mut src = cargo::sources::PathSource::new(pkg.root(), pkg.package_id().source_id(), config);
src.update().unwrap();
let src_files = src.list_files(pkg).unwrap();
println!("found {} source files", src_files.len());
}
}
这是输出:
found package alacritty v0.5.0-dev (/tmp/alacritty/alacritty)
found 0 source files
found package alacritty_terminal v0.5.0-dev (/tmp/alacritty/alacritty_terminal)
found 0 source files
found package font v0.1.0 (/tmp/alacritty/font)
found 0 source files
已正确找到工作区的成员,但我未能检索到每个成员的源文件。我错过了什么?
在大海捞针中按顺序搜索针的每个元素。每次找到匹配元素时,只在大海捞针的剩余部分继续搜索。每次匹配一个元素时,您都可以通过大海捞针的新子切片来很好地表达这一点。
您的代码有效!
如果您 运行 'cargo vendor' 在 alacritty 树中,这应该可以解决您的问题。研究 'cargo vendor' command 另外,研究 cargo build 命令的 --offline 开关。我不需要使用这个,但它对阅读很有帮助。
基本上货源都是货源拉进来的
我不确定您的代码为何无法正常工作。我很难使用 /tmp 目录重新创建它。然后,我使用了一个普通目录并结合了对 'cargo vendor' 的调用,并且成功了。在下面剪切和粘贴我的代码之前,请务必将“/Users/[用户名]”更改为您自己的主目录路径。
这是我的程序:
cd ~
git clone https://github.com/jwilm/alacritty
cargo vendor
下一部分可能没有必要:
mkdir /Users/[username]/alacritty/.cargo
在 /Users/[用户名]/alacritty/ 创建一个文件。cargo/config 并插入以下内容:
[source.crates-io]
replace-with = "vendored-sources"
[source.vendored-sources]
directory = "vendor"
必要部分续:
修改路径语句以指向新创建的 alacritty 路径:
let path = Path::new("/Users/[username]/alacritty/Cargo.toml");
现在,运行 你的代码
cargo run
这是我的输出:
cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.27s
Running `target/debug/test3`
found package alacritty v0.5.0-dev (/Users/jmurray/alacritty/alacritty)
found 18 source files
found package alacritty_terminal v0.5.0-dev
(/Users/[username]/alacritty/alacritty_terminal)
found 172 source files
found package font v0.1.0 (/Users/jmurray/alacritty/font)
found 12 source files