vize_l0 0.431.0

L0 - the Davinci foundation level: ids, side tables, keys, dumps, diagnostics, passes and facts
Documentation
use super::ConfigDocument;
use crate::config::{LintRuleSeverity, VueVersion};

#[test]
fn document_projects_aliases_and_editor_flags_without_host_state() {
    let document: ConfigDocument = serde_json::from_slice(
        br#"{
            "check": { "globals": "ambient.d.ts", "servers": 2 },
            "fmt": { "singleQuote": true },
            "lsp": { "hover": false, "signatureHelp": false },
            "vue": { "version": "2.7" },
            "typeChecker": { "lspRequestTimeoutMs": 0 }
        }"#,
    )
    .unwrap();
    assert_eq!(document.lsp_request_timeout_ms(), 1);
    assert_eq!(
        document.language_server_unstable_flags().signature_help,
        Some(false)
    );
    let (config, features) = document.into_config_and_features();
    assert_eq!(
        config.type_checker.globals_file.as_deref(),
        Some("ambient.d.ts")
    );
    assert_eq!(config.type_checker.servers, Some(2));
    assert!(config.formatter.single_quote);
    assert_eq!(config.language_server.hover, Some(false));
    assert_eq!(features.vue_version, Some(VueVersion::V2_7));
    assert!(features.type_checker_legacy_vue2);
}

#[test]
fn document_retains_declaration_order_and_entry_base_paths() {
    let document: ConfigDocument = serde_json::from_str(
        r#"{
            "basePath": "日本語/🎨", "files": ["root.vue"],
            "ignores": ["root-ignore.vue"],
            "entries": [
                { "basePath": "first", "files": ["first.vue"],
                  "ignores": ["first-ignore.vue"],
                  "linter": { "rules": { "vue/no-v-html": "warn" } } },
                { "basePath": "second", "files": ["second.vue"],
                  "linter": { "rules": { "vue/no-v-html": "error" } } }
            ]
        }"#,
    )
    .unwrap();
    let ignores = document.entry_ignores();
    assert_eq!(ignores[0].base_path, None);
    assert_eq!(ignores[1].base_path.as_deref(), Some("first"));
    let plan = document.linter_plan();
    assert_eq!(plan.entries[0].base_path.as_deref(), Some("first"));
    assert_eq!(plan.entries[1].base_path.as_deref(), Some("second"));
    assert_eq!(
        plan.entries[0].rules["vue/no-v-html"],
        LintRuleSeverity::Warn
    );
    assert_eq!(
        plan.entries[1].rules["vue/no-v-html"],
        LintRuleSeverity::Error
    );
    let entries = document.into_entry_files();
    assert_eq!(entries[0].base_path.as_deref(), Some("日本語/🎨"));
    assert_eq!(entries[1].files[0], "first.vue");
    assert_eq!(entries[2].files[0], "second.vue");
}