Major clean up and improvements to vimwiki compatibility and documentation.
CI / cargo fmt --check (push) Successful in 33s
CI / cargo clippy (push) Successful in 23s
CI / cargo test (push) Successful in 33s
CI / editor keymaps (push) Successful in 1m25s

Reviewed-on: #1
This commit was merged in pull request #1.
This commit is contained in:
2026-05-30 18:35:40 +00:00
parent 95645a2b91
commit 8ab6015405
71 changed files with 2496 additions and 1914 deletions
+17 -19
View File
@@ -1,14 +1,13 @@
//! Server-side runtime config.
//!
//! Populated from `InitializeParams.initialization_options` at boot and
//! refreshed via `workspace/didChangeConfiguration` (P18). v1.0 single-wiki
//! shapes are accepted and desugared into the v1.1 `wikis = [...]` form so
//! existing setups keep working (P16).
//! refreshed via `workspace/didChangeConfiguration`. Legacy single-wiki
//! shapes are accepted and desugared into the `wikis = [...]` form so
//! existing setups keep working.
//!
//! Only the fields actually consumed in Phase 11 land here. Phases 1319
//! extend `WikiConfig` (diary path, html path, template options, …) and
//! the top-level `Config` (diagnostic severity, mappings opt-in, …) as
//! they need them.
//! `WikiConfig` (diary path, html path, template options, …) and the
//! top-level `Config` (diagnostic severity, mappings opt-in, …) carry the
//! fields actually consumed by the server.
use std::path::{Path, PathBuf};
@@ -39,9 +38,8 @@ pub struct WikiConfig {
/// The full path is `<root>/<diary_rel_path>/<diary_index>.wiki`.
pub diary_index: String,
/// `daily`/`weekly`/`monthly`/`yearly`. Picks the date format the
/// diary commands use. v1.1 ships `daily`; the others fall through
/// to vimwiki-style names but the commands are no-ops until
/// Cluster 4 lands.
/// diary commands use. `daily` is supported; the others fall through
/// to vimwiki-style names but the commands are no-ops for them.
pub diary_frequency: String,
/// First day of the week (`monday`..`sunday`). Used by weekly
/// diary entry naming.
@@ -74,7 +72,7 @@ pub struct WikiConfig {
pub nested_syntaxes: std::collections::HashMap<String, String>,
/// Rebuild the page's TOC on save when set.
pub auto_toc: bool,
/// Phase 17 HTML export options. See SPEC §12.8.
/// HTML export options.
pub html: HtmlConfig,
}
@@ -104,7 +102,7 @@ pub struct HtmlConfig {
/// to skip during `allToHtml*`.
pub exclude_files: Vec<String>,
/// `color_dic`: vimwiki colour-tag name → CSS value mapping used
/// by the HTML renderer (SPEC §12.11). Empty by default; the
/// by the HTML renderer. Empty by default; the
/// renderer falls back to `class="color-<name>"` when a name
/// isn't in the dict.
pub color_dic: std::collections::HashMap<String, String>,
@@ -130,7 +128,7 @@ impl Default for HtmlConfig {
impl HtmlConfig {
/// Synthesise default paths under `root` when the user hasn't
/// specified explicit ones. `html_path` defaults to `<root>/_html`
/// and `template_path` to `<root>/_templates` per SPEC §12.8.
/// and `template_path` to `<root>/_templates`.
pub fn from_root(root: &Path) -> Self {
Self {
html_path: root.join("_html"),
@@ -284,7 +282,7 @@ fn default_links_space_char() -> String {
" ".to_string()
}
/// Fill in the v1.1 per-wiki keys that none of the constructors care
/// Fill in the per-wiki keys that none of the constructors care
/// about. Centralising the defaults here keeps `empty()`, `from_root()`,
/// the legacy single-wiki path, and `From<RawWiki>` in sync.
fn wiki_defaults() -> WikiDefaults {
@@ -329,9 +327,9 @@ impl Config {
/// Build a `Config` from `InitializeParams`.
///
/// Priority for the wikis list:
/// 1. `initialization_options.wikis = [...]` (v1.1 shape)
/// 1. `initialization_options.wikis = [...]` (multi-wiki shape)
/// 2. `initialization_options.wiki_root + file_extension + syntax`
/// (v1.0 single-wiki shape, P16)
/// (legacy single-wiki shape)
/// 3. `workspace_folders[0]` if present
/// 4. deprecated `root_uri` if present
/// 5. empty list (server stays alive but won't index anything)
@@ -445,7 +443,7 @@ mod opt_bool_or_int {
#[serde(default, rename_all = "snake_case")]
struct InitOptions {
wikis: Option<Vec<RawWiki>>,
// v1.0 single-wiki compat fields
// legacy single-wiki compat fields
wiki_root: Option<String>,
file_extension: Option<String>,
syntax: Option<String>,
@@ -466,7 +464,7 @@ struct RawWiki {
diary_rel_path: Option<String>,
#[serde(default)]
diary_index: Option<String>,
// Phase 17 HTML keys — all optional, fall back to per-root defaults.
// HTML keys — all optional, fall back to per-root defaults.
#[serde(default)]
html_path: Option<String>,
#[serde(default)]
@@ -487,7 +485,7 @@ struct RawWiki {
exclude_files: Option<Vec<String>>,
#[serde(default)]
color_dic: Option<std::collections::HashMap<String, String>>,
// v1.1 per-wiki keys mirroring vimwiki globals. All optional so
// per-wiki keys mirroring vimwiki globals. All optional so
// existing single-wiki configs migrate without touching anything.
#[serde(default)]
index: Option<String>,