6 个稳定版本
1.4.0 | 2020 年 12 月 2 日 |
---|---|
1.3.0 | 2020 年 11 月 25 日 |
1.1.0 | 2020 年 10 月 29 日 |
在 Cargo 插件 中排名第 394
每月下载 24 次
235KB
6.5K SLoC
Cargo intraconv
cargo-intraconv
是一个简单的辅助工具,它会在合适的场合将 Rust 项目的 Markdown 链接转换为 文档内链接。
文档内链接已在 Rust 1.48.0 中稳定,有关更多信息,请参阅宣布它的博客文章。
什么是文档内链接?
以前,要编写指向您自己的包(或其他包)其他元素的链接,只有以下方式,路径取决于当前文件和目标文件
/// [`make_ascii_uppercase`]: #method.make_ascii_uppercase
/// [`Path::ancestors`]: https://doc.rust-lang.net.cn/stable/std/path/struct.Path.html#method.ancestors
/// See [the `Rotation` type](../struct.Rotation.html)
现在,可以使用 Rust 路径来编写它们,取决于目标项的路径和作用域(这意味着位于预定义中的 String
这样的项只是 [String]
之遥)。这些链接对于最初编写它们的人以及随后的读者来说都更清晰。由于文件层次结构不影响它们,因此更容易进行推理。以下是对上述示例的文档内链接版本
/// [`make_ascii_uppercase`]: u8::make_ascii_uppercase()
/// [`Path::ancestors`]: std::path::Path::ancestors()
/// See [the `Rotation` type](super::Rotation)
当链接的两端相同,甚至可以更短
/// See [`Rotation`]
///
- /// [`Rotation`]: struct.Rotation.html
- /// See [`Rotation`](struct.Rotation.html)
+ /// See [`Rotation`]
为什么是这个包?
更改所有现有链接可能是繁琐的,也可以自动化。这个包旨在帮助您尽可能痛苦地更新文档以使用文档内链接。
用法
默认情况下,由该包产生的二进制文件不会修改给定的文件,只会显示会发生变化的内容
# Call `cargo-intraconv` for a whole crate or workspace. Crate names will be
# discovered from `Cargo.toml` files.
cargo intraconv
# Call `cargo-intraconv` for specific file. No automatic crate name discovery.
cargo intraconv path/to/std/file.rs
# Specifying the root crate.
cargo intraconv path/to/core/file.rs -c core
# Applying the changes.
cargo intraconv path/to/std/file.rs -a
# Disambiguate links by prefixing them with their rustdoc group ('type@', ...).
cargo intraconv path/to/my/file.rs -d
# Do not transform favored links to intra-doc links (see below for more).
cargo intravonc path/to/my/file.rs -f
# Do not display changes, only errors.
cargo intraconv path/to/my/file.rs -q
# Give a file containing links to ignore.
#
# Note: `intraconv.toml` is read by default when present.
cargo intraconv path/to/my/file.rs -i intraconv.toml
可以为文件或目录提供多个路径。在搜索精确路径时,cargo-intraconv
将使用与-c
一起提供的crate名称。对于目录,它将尝试在Cargo.toml
中查找crate名称,如果无法将名称转换为有效的Rust标识符,则回退到默认的-c
。
注意:
intraconv
将接受任何文件,而不仅仅是.rs
文件:例如,您可以在Rust文件中作为文档包含的Markdown文件上使用它。
首选链接
默认情况下,crate会将首选的http(s)://
链接转换为内部文档链接(如来自docs.rs
的链接)。要禁用此行为,请使用-
(--no-favored
)标志。
忽略链接
cargo-intraconv
并不完美,有时会错误地转换链接,例如在#31中提到的情况。要修复这个问题,您可以选择手动操作(如果您只运行一次),但如果您因为更改显著而多次运行它,这会很快变得重复且容易出错。对于一个旨在减少重复和容易出错的工作的工具,这真是一件令人遗憾的事情!
如果没有传递--ignore-file
(-
),默认情况下cargo-intraconv
将读取ìntraconv.toml
(尽管如果它缺失,它不会产生错误或警告,因为它是一个默认检查)。
要修复此问题,您可以编写一个包含要忽略的链接的TOML格式的文件
# Global ignores, applied everywhere.
[ignore]
# Will be deleted by the second instance of `"name"`.
"name" = [ "link 1" ] # Must be an array, a single value will not work,
# this allows for multiples values easily.
"name" = [ "link 2" ]
# Will only keep one instance of 'link 3'.
"other name" = [ "link 3", "link 3", "link 1" ]
# Will match exactly the lib.rs file in tracing-core.
# NOTE: this path must either be absolute OR relative to the EXACT directory
# from which `cargo-intraconv` is called.
#
# Paths must be unique whether canonicalized (for paths with more than one
# component) or not (paths with a single component, as `lib.rs` below).
["tracing-core/src/lib.rs"]
# Will match both 'downcast_ref' and '`downcast_ref`' links.
"downcast_ref" = [ "#method.downcast_ref" ] # Must be an array.
# Will match EVERY lib.rs file found.
["lib.rs"]
"downcast_ref" = [ "#method.downcast_ref" ]
在链接名称周围使用反引号(`
)是不受支持的:这将永远不会匹配任何链接
[ignore]
# NEVER matches.
"`downcast_ref`" = [ "#method.downcast_ref" ]
已知问题
内部文档链接和此crate都有几个已知问题,其中大部分应该在crate或Rust的未来的版本中得到解决。
有关内部文档链接的问题,您应该在rust-lang/rust查看问题。
关于此crate的问题,这里有一个
#method.method_name
链接有时会被转换为指向错误的项目。这是因为intraconv
使用正则表达式来查找链接及其相关类型,这不是完美的。
缺点
它不是一个官方的工具,它目前的工作方式是基于正则表达式的。这种方法意味着它很容易理解,但它有几个缺点。例如,cargo-intraconv
不了解use
,并且会欣然忽略它们,即使它们可以缩短或删除链接。
另请参阅
cargo-deadlinks
是另一个用于文档和链接的工具。它与cargo-intraconv
配合使用效果非常好!
贡献
任何形式的贡献都是受欢迎的!您可以打开问题或PR,我会尽力快速回答您!
许可
请参阅仓库根目录下的LICENSE
。
依赖项
~5–7MB
~128K SLoC