找出大型生锈项目(伺服)中"使用"模块的代码

Nic*_*lay 2 rust servo

我正在尝试阅读伺服代码.作为一个例子,我在layout_task.rs中查看此代码:

use url::Url;
Run Code Online (Sandbox Code Playgroud)

..我想知道这是指哪个代码(答案是rust-url).

Nic*_*lay 6

根据Rust参考§6.1.2.2使用声明,

use物品中包含的路径相对于箱根 [...]

也可以使用self,并super在年初use项目分别指当前和直接父模块.

有关在use声明中访问声明的模块的所有规则都适用于模块声明和extern crate声明.

引用(§5Crates和源文件)没有明确说明"crate root"是什么,但它确实分享了:

包中包含嵌套模块范围的树.这个树的顶层是一个匿名的模块[...] Rust编译器总是用一个源文件作为输入调用,并且总是产生一个输出包.处理该源文件可能导致其他源文件作为模块加载.

因此,为了找到当前文件(layout_task.rs)所属的crate根,我们需要弄清楚rustc在构建crate时调用的源文件.使用Cargo,这在Cargo.toml中指定,默认为src/lib.rs:

[lib]
path = "src/lib.rs"
Run Code Online (Sandbox Code Playgroud)

在我的例子中,这里的Cargo.tomllib.rs有:

extern crate url;
pub mod layout_task;
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.要找出extern crate所指的内容,我们需要再次查看Cargo.toml:

[dependencies.url]
version = "0.2"
Run Code Online (Sandbox Code Playgroud)

货物的文档声称"从crates.io的依赖不会被分开的部分申报",但显然他们可以... ...所以我们看包起来的crates.io:https://crates.io/crates/url