fix(review): close all 2026-06-03 codebase-review findings (R1-R18)
Resolves the 18 findings from the parallel codebase review, tracked in development/vimwiki-gap.md. Correctness / perf: - Wiki.config -> Arc<WikiConfig> so cloning a Wiki is a refcount bump (R5) - WorkspaceIndex::remove is no longer O(n^2): a per-source contributions map limits the scan to buckets the source actually wrote into (R6) - render_color now expands color_tag_template (__STYLE__/__CONTENT__), consuming the previously-dead field; ColorNode documented as an extension point; 3 renderer tests added (R3/R4) - wiki_root_for returns empty/nil on no-match instead of falling back to the first wiki (R2); auto_header honours links_space_char (R7) Cleanup / dedup: - Remove dead #[allow(dead_code)] stubs + uncalled pub helpers, narrow imports (R10/R11) - Dedup span_of_inline x3 -> InlineNode::span() (R12) - diary_step single read lock; page_captions single pass (R13) - Lua auto_header loop -> wiki_list(); detect_current_symbol cleanup (R14/R18) Client / docs: - :VimwikiNormalizeLink Vim cmds -> <q-args> (R17); ftplugin header fix (R16); vars.vim multi-wiki limitation documented (R15) - Document 19 config options in README.md + doc/nuwiki.txt; fix list_margin/shiftwidth doc and stale comments (R1/R9) - R8 investigated, confirmed not a real bug (documented) Verified: Neovim harness 307, Vim harness 301/18/21, Rust suite 568, all 0 failed; clippy clean; fresh parallel-agent audit found no regressions. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -254,7 +254,8 @@ fn remove_checkbox_none_without_checkbox() {
|
||||
fn change_level_indents_single_item() {
|
||||
let src = "- one\n- two\n";
|
||||
let ast = parse(src);
|
||||
let edit = ops::change_level_edit(src, &ast, &uri(), 1, 1, false, true, false, &[]).expect("edit");
|
||||
let edit =
|
||||
ops::change_level_edit(src, &ast, &uri(), 1, 1, false, true, false, &[]).expect("edit");
|
||||
let edits = &edit.changes.unwrap()[&uri()];
|
||||
assert_eq!(edits.len(), 1);
|
||||
// delta=1 → +2 spaces
|
||||
@@ -286,7 +287,10 @@ fn cycle_bullets_rotates_glyph_on_indent() {
|
||||
.map(|e| e.new_text.clone())
|
||||
.collect();
|
||||
assert!(texts.contains(&" ".to_string()), "indent edit: {texts:?}");
|
||||
assert!(texts.contains(&"*".to_string()), "glyph rotated to *: {texts:?}");
|
||||
assert!(
|
||||
texts.contains(&"*".to_string()),
|
||||
"glyph rotated to *: {texts:?}"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -301,14 +305,18 @@ fn cycle_bullets_off_leaves_glyph() {
|
||||
.map(|e| e.new_text.clone())
|
||||
.collect();
|
||||
// Only the indent edit; no glyph rewrite.
|
||||
assert!(!texts.iter().any(|t| t == "*"), "no glyph change: {texts:?}");
|
||||
assert!(
|
||||
!texts.iter().any(|t| t == "*"),
|
||||
"no glyph change: {texts:?}"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn change_level_whole_subtree_walks_descendants() {
|
||||
let src = "- parent\n - child a\n - child b\n- sibling\n";
|
||||
let ast = parse(src);
|
||||
let edit = ops::change_level_edit(src, &ast, &uri(), 0, 1, true, true, false, &[]).expect("edit");
|
||||
let edit =
|
||||
ops::change_level_edit(src, &ast, &uri(), 0, 1, true, true, false, &[]).expect("edit");
|
||||
let edits = &edit.changes.unwrap()[&uri()];
|
||||
// Parent + 2 children get indented. Sibling stays.
|
||||
assert!(edits.len() >= 3, "got {} edits", edits.len());
|
||||
|
||||
@@ -287,7 +287,10 @@ fn render_page_html_ignore_newline_controls_soft_breaks() {
|
||||
)
|
||||
.unwrap();
|
||||
assert!(br.contains("alpha<br />beta"), "para <br>: {br}");
|
||||
assert!(br.contains("one<br />two") || br.contains("one<br /> two"), "list <br>: {br}");
|
||||
assert!(
|
||||
br.contains("one<br />two") || br.contains("one<br /> two"),
|
||||
"list <br>: {br}"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
@@ -328,7 +328,10 @@ fn generated_links_caption_emits_first_heading() {
|
||||
assert!(out.contains("- [[Notes]]"), "fallback: {out}");
|
||||
// Without the caption map, both are bare.
|
||||
let bare = ops::build_links_text(&pages, "Generated Links", 1, None, 0, None);
|
||||
assert!(bare.contains("- [[About]]") && !bare.contains("About Us"), "bare: {bare}");
|
||||
assert!(
|
||||
bare.contains("- [[About]]") && !bare.contains("About Us"),
|
||||
"bare: {bare}"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
Reference in New Issue
Block a user