{"record":{"id":"9d7b6d772cb84519","repo":"oraios/serena","slug":"ls-specific-settings-typescript-vts-initialization","errorCode":null,"errorMessage":"ls_specific_settings.typescript_vts.initialization_options must be a dict, got {type(opts).__name__}","messagePattern":"ls_specific_settings\\.typescript_vts\\.initialization_options must be a dict, got (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"src/solidlsp/language_servers/vts_language_server.py","lineNumber":137,"sourceCode":"\n        vts_executable_path = os.path.join(vts_ls_dir, \"node_modules\", \".bin\", \"vtsls\")\n\n        assert os.path.exists(vts_executable_path), \"vtsls executable not found. Please install @vtsls/language-server and try again.\"\n        return f\"{vts_executable_path} --stdio\"\n\n    @property\n    def _initialization_options(self) -> dict:\n        \"\"\"\n        Validated user-provided ``initializationOptions``.\n\n        :raises ValueError: if ``ls_specific_settings.typescript_vts.initialization_options``\n            is set to a value that is not a dict.\n        \"\"\"\n        opts = self._custom_settings.get(\"initialization_options\")\n        if opts is None:\n            return {}\n        if not isinstance(opts, dict):\n            raise ValueError(f\"ls_specific_settings.typescript_vts.initialization_options must be a dict, got {type(opts).__name__}\")\n        return opts\n\n    def _create_base_initialize_params(self) -> dict:\n        \"\"\"\n        Returns the initialize params for the VTS Language Server.\n\n        If ``initialization_options`` is set in ``ls_specific_settings[\"typescript_vts\"]``,\n        it is forwarded verbatim as LSP ``initializationOptions``.\n        \"\"\"\n        initialize_params: dict = {\n            \"locale\": \"en\",\n            \"initializationOptions\": {\n                \"preferences\": {\n                    \"disableAutomaticTypingAcquisition\": True,\n                },\n            },\n            \"capabilities\": {\n                \"textDocument\": {","sourceCodeStart":119,"sourceCodeEnd":155,"githubUrl":"https://github.com/oraios/serena/blob/7fcbca7e62555ec2287ddb2f083caee805848ea6/src/solidlsp/language_servers/vts_language_server.py#L119-L155","documentation":"Thrown as ValueError when user-supplied configuration ls_specific_settings.typescript_vts.initialization_options is not None but is also not a dict. The VTS language server can only merge dict-shaped initialization options into its initialize params.","triggerScenarios":"Passing config where initialization_options under typescript_vts is a string, list, number, or bool; _initialization_options reads self._custom_settings[\"initialization_options\"] and raises on the type mismatch.","commonSituations":"YAML/JSON config where options were written as a quoted string; hand-editing config and dropping the braces around a nested object; copying TOML/YAML settings with wrong indentation so the value becomes a scalar.","solutions":["Change initialization_options in ls_specific_settings.typescript_vts to a proper mapping/dict.","Unquote stringified JSON objects (e.g. \"{'preferStubs': true}\" → {'preferStubs': true}).","If no options are needed, remove the key entirely rather than setting it to a non-dict; None/absent returns {}.","Validate the config schema before constructing the language server."],"exampleFix":"// before\nsettings = {\"ls_specific_settings\": {\"typescript_vts\": {\"initialization_options\": \"preferStubs=true\"}}}\n// after\nsettings = {\"ls_specific_settings\": {\"typescript_vts\": {\"initialization_options\": {\"preferStubs\": True}}}}","handlingStrategy":"validation","validationCode":"opts = settings.get(\"ls_specific_settings\", {}).get(\"typescript_vts\", {}).get(\"initialization_options\")\nif opts is not None and not isinstance(opts, dict):\n    raise TypeError(\"typescript_vts.initialization_options must be a dict\")","typeGuard":"def is_init_options(value: object) -> bool:\n    return value is None or isinstance(value, dict)","tryCatchPattern":"try:\n    ls = SolidLSP(\"vts\", repo_path, settings)\nexcept ValueError as e:\n    if \"initialization_options must be a dict\" in str(e):\n        settings[\"ls_specific_settings\"][\"typescript_vts\"][\"initialization_options\"] = {}\n        ls = SolidLSP(\"vts\", repo_path, settings)\n    else:\n        raise","preventionTips":["Validate config against a schema (pydantic/jsonschema) at load time.","Beware YAML/TOML indentation making nested objects into strings.","Omit initialization_options entirely when not needed instead of passing a scalar.","Add a unit test that loads your production config through the server constructor."],"tags":["configuration","validation","typescript","type-mismatch"],"backgroundTag":"invalid-config-type","analyzedSha":"7fcbca7e62555ec2287ddb2f083caee805848ea6","analyzedAt":"2026-08-29T00:04:09.619Z","schemaVersion":2},"datasetVersion":"2026-08-29T02:17:18.158Z"}