feat(lsp): add list.removeCheckbox and link.catUrl commands
removeCheckbox strips the `[ ]` marker (plus its trailing space) from the current item or every item in the list. catUrl returns the `file://` URL of the current page's HTML export, mirroring vimwiki's :VimwikiCatUrl. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -28,7 +28,11 @@ fn parse(src: &str) -> nuwiki_core::ast::DocumentNode {
|
||||
#[test]
|
||||
fn commands_list_advertises_link_helpers() {
|
||||
let names: Vec<&str> = nuwiki_lsp::commands::COMMANDS.to_vec();
|
||||
for name in ["nuwiki.link.pasteWikilink", "nuwiki.link.pasteUrl"] {
|
||||
for name in [
|
||||
"nuwiki.link.pasteWikilink",
|
||||
"nuwiki.link.pasteUrl",
|
||||
"nuwiki.link.catUrl",
|
||||
] {
|
||||
assert!(names.contains(&name), "missing: {name}");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -192,6 +192,41 @@ fn change_symbol_whole_list_rewrites_every_item() {
|
||||
assert!(texts.contains(&"3."));
|
||||
}
|
||||
|
||||
// ===== removeCheckbox =====
|
||||
|
||||
#[test]
|
||||
fn remove_checkbox_strips_single_item() {
|
||||
let src = "- [ ] task\n- [X] done\n";
|
||||
let ast = parse(src);
|
||||
let edit = ops::remove_checkbox_edit(src, &ast, &uri(), 0, false, true).expect("edit");
|
||||
let edits = &edit.changes.unwrap()[&uri()];
|
||||
assert_eq!(edits.len(), 1);
|
||||
assert_eq!(edits[0].new_text, "");
|
||||
// Removes `[ ] ` — columns 2..6 on the first line.
|
||||
assert_eq!(edits[0].range.start.line, 0);
|
||||
assert_eq!(edits[0].range.start.character, 2);
|
||||
assert_eq!(edits[0].range.end.character, 6);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn remove_checkbox_whole_list_strips_every_item() {
|
||||
let src = "- [ ] a\n- [X] b\n- [-] c\n";
|
||||
let ast = parse(src);
|
||||
let edit = ops::remove_checkbox_edit(src, &ast, &uri(), 0, true, true).expect("edit");
|
||||
let edits = &edit.changes.unwrap()[&uri()];
|
||||
assert_eq!(edits.len(), 3);
|
||||
for e in edits {
|
||||
assert_eq!(e.new_text, "");
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn remove_checkbox_none_without_checkbox() {
|
||||
let src = "- plain item\n";
|
||||
let ast = parse(src);
|
||||
assert!(ops::remove_checkbox_edit(src, &ast, &uri(), 0, false, true).is_none());
|
||||
}
|
||||
|
||||
// ===== changeLevel =====
|
||||
|
||||
#[test]
|
||||
@@ -231,6 +266,7 @@ fn commands_list_includes_cluster_a() {
|
||||
let names: Vec<&str> = nuwiki_lsp::commands::COMMANDS.to_vec();
|
||||
for name in [
|
||||
"nuwiki.list.removeDone",
|
||||
"nuwiki.list.removeCheckbox",
|
||||
"nuwiki.list.renumber",
|
||||
"nuwiki.list.changeSymbol",
|
||||
"nuwiki.list.changeLevel",
|
||||
|
||||
Reference in New Issue
Block a user