nvrim/diagnostics/
config.rs

1//! Nvim diagnostics configuration dictionary builder.
2//!
3//! Produces a Lua‑consumable `config` dict mirroring `vim.diagnostic.config({...})` with custom float
4//! window border, severity sorting, and sign text derived from [`DiagnosticSeverity`] variants.
5
6use nvim_oxi::Array;
7use nvim_oxi::Dictionary;
8use nvim_oxi::Object;
9use strum::IntoEnumIterator;
10use ytil_noxi::dict::DictionaryExt;
11
12use crate::diagnostics::DiagnosticSeverity;
13use crate::diagnostics::formatter;
14
15/// Nvim diagnostics configuration.
16pub fn get() -> Dictionary {
17    let texts_signs: Array = DiagnosticSeverity::iter().map(|s| Object::from(s.symbol())).collect();
18
19    dict! {
20        "severity_sort": true,
21        "signs": true,
22        "underline": true,
23        "update_in_insert": false,
24        "virtual_text": false,
25        "float": dict! {
26            "anchor_bias": "above",
27            "border": crate::style_opts::dict()
28                .get_dict(&["window"])
29                .unwrap_or_default()
30                .unwrap_or_default()
31                .get_t::<nvim_oxi::String>("border").unwrap_or_else(|_| "none".to_string()),
32            "focusable": true,
33            "format": fn_from!(formatter::format),
34            "header": "",
35            "prefix": "",
36            "source": false,
37            "suffix": "",
38        },
39        "signs": dict! {
40            "text": texts_signs
41        }
42    }
43}