feat(lsp): wire diary/auto_toc/links_space_char/list_margin; drop client-side keys
Consume several per-wiki config keys that the server deserialized but
ignored, and remove keys whose effect is purely client-side:
- diagnostics: re-publish open-doc diagnostics on
didChangeConfiguration so a link_severity change takes effect
immediately; fix the single-key unwrap in apply_change so a minimal
`{ diagnostic: {...} }` payload isn't mistaken for a namespace wrapper.
- auto_toc: rebuild an existing TOC section on save (new
ops::toc_rebuild_edit, no-op when the page has no TOC).
- diary index: honour diary_header, diary_sort and diary_caption_level
when rendering the diary index body.
- links_space_char: apply on rename so spaces in the link target and
the on-disk path become the configured glyph (default " " = verbatim).
- list_margin: thread the per-wiki value into render_page_html.
- remove nested_syntaxes, maxhi and diary_start_week_day from the server
config: nested-syntax and heading highlighting are client-side, and
the weekly diary is ISO-week based so a custom week start has no clean
server-side meaning.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -35,6 +35,9 @@ pub(crate) async fn compute_rename(
|
||||
) -> Option<WorkspaceEdit> {
|
||||
let wiki = backend.wiki_for_uri(&target_uri)?;
|
||||
let old_name = page_name_from_uri(&target_uri, Some(&wiki.config.root));
|
||||
// Spaces in the link *target* (and the file on disk) are replaced with
|
||||
// the wiki's `links_space_char`; descriptions keep their original text.
|
||||
let new_name = apply_links_space_char(&new_name, &wiki.config.links_space_char);
|
||||
let new_uri = build_new_uri(&wiki.config.root, &new_name, &wiki.config.file_extension)?;
|
||||
if new_uri == target_uri {
|
||||
return None;
|
||||
@@ -73,6 +76,16 @@ pub(crate) async fn compute_rename(
|
||||
}
|
||||
}
|
||||
|
||||
/// Replace spaces in a link path with the configured `links_space_char`.
|
||||
/// The default `" "` is an identity transform (spaces kept verbatim).
|
||||
pub fn apply_links_space_char(name: &str, space_char: &str) -> String {
|
||||
if space_char == " " {
|
||||
name.to_string()
|
||||
} else {
|
||||
name.replace(' ', space_char)
|
||||
}
|
||||
}
|
||||
|
||||
/// Build `<root>/<new_name>(<ext>)` as a `file://` URL.
|
||||
pub fn build_new_uri(root: &Path, new_name: &str, ext: &str) -> Option<Url> {
|
||||
let mut path = root.to_path_buf();
|
||||
|
||||
Reference in New Issue
Block a user