Skip to content

Commit 527df36

Browse files
committed
Preserve deprecated docs links in prepare-release.
1 parent 5cf7d3e commit 527df36

2 files changed

Lines changed: 38 additions & 9 deletions

File tree

.codex/skills/prepare-release/SKILL.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ In sandboxed Codex environments, `cargo +nightly -Zscript` may need approval bec
3030
4. If `cargo +nightly -Zscript` is unavailable, make the same edits manually.
3131
- Set `parse-display/Cargo.toml` package `version` to `<version>`.
3232
- Update `Cargo.lock`'s `parse-display` package version to `<version>`.
33-
- Search docs and Rust doc comments for the previous parse-display version and update only parse-display version references, such as:
33+
- Search docs and Rust doc comments for the previous parse-display version and update only active parse-display version references, such as dependency snippets and current-version docs links.
34+
- Do not update docs.rs links for deprecated features. Deprecated feature documentation must keep linking to the older version where that deprecated feature is still documented.
3435

3536
```powershell
3637
rg -n '<old-version>|parse-display = "' README.md parse-display parse-display-with

.codex/skills/prepare-release/scripts/prepare_release.rs

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -276,19 +276,47 @@ fn update_docs(
276276
) -> Result<(), String> {
277277
for path in doc_files(root)? {
278278
let text = read(&path)?;
279-
let mut new_text = text.replace(
280-
&format!("parse-display = \"{old_version}\""),
281-
&format!("parse-display = \"{version}\""),
282-
);
283-
new_text = new_text.replace(
284-
&format!("docs.rs/parse-display/{old_version}/"),
285-
&format!("docs.rs/parse-display/{version}/"),
286-
);
279+
let new_text = update_doc_text(&text, old_version, version);
287280
write_if_changed(&path, new_text, dry_run, changed)?;
288281
}
289282
Ok(())
290283
}
291284

285+
fn update_doc_text(text: &str, old_version: &str, version: &str) -> String {
286+
let dependency_before = format!("parse-display = \"{old_version}\"");
287+
let dependency_after = format!("parse-display = \"{version}\"");
288+
let docs_before = format!("docs.rs/parse-display/{old_version}/");
289+
let docs_after = format!("docs.rs/parse-display/{version}/");
290+
let mut in_deprecated_section = false;
291+
292+
let lines = text
293+
.lines()
294+
.map(|line| {
295+
let doc_line = markdown_text(line);
296+
if doc_line.starts_with("## ") {
297+
in_deprecated_section =
298+
doc_line.contains("Deprecated") || doc_line.contains("非推奨");
299+
}
300+
301+
let mut line = line.replace(&dependency_before, &dependency_after);
302+
if !in_deprecated_section {
303+
line = line.replace(&docs_before, &docs_after);
304+
}
305+
line
306+
})
307+
.collect::<Vec<_>>();
308+
309+
finish(lines)
310+
}
311+
312+
fn markdown_text(line: &str) -> &str {
313+
line.trim_start()
314+
.strip_prefix("///")
315+
.or_else(|| line.trim_start().strip_prefix("//!"))
316+
.unwrap_or(line)
317+
.trim_start()
318+
}
319+
292320
fn doc_files(root: &Path) -> Result<Vec<PathBuf>, String> {
293321
let mut files = Vec::new();
294322
collect_doc_files(root, root, &mut files)?;

0 commit comments

Comments
 (0)