{"record":{"id":"71eb9ae9c382f5cf","repo":"microsoft/typescript-go","slug":"configure-request-failed-w","errorCode":null,"errorMessage":"configure request failed: %w","messagePattern":"configure request failed: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/lsp/server.go","lineNumber":437,"sourceCode":"\t}\n\tconfigs, err := sendClientRequest(ctx, s, lsproto.WorkspaceConfigurationInfo, &lsproto.ConfigurationParams{\n\t\tItems: []*lsproto.ConfigurationItem{\n\t\t\t{\n\t\t\t\tSection: new(\"js/ts\"),\n\t\t\t},\n\t\t\t{\n\t\t\t\tSection: new(\"typescript\"),\n\t\t\t},\n\t\t\t{\n\t\t\t\tSection: new(\"javascript\"),\n\t\t\t},\n\t\t\t{\n\t\t\t\tSection: new(\"editor\"),\n\t\t\t},\n\t\t},\n\t})\n\tif err != nil {\n\t\treturn lsutil.UserPreferences{}, fmt.Errorf(\"configure request failed: %w\", err)\n\t}\n\tconfigMap := map[string]any{}\n\tfor i, config := range configs {\n\t\tswitch i {\n\t\tcase 0:\n\t\t\tconfigMap[\"js/ts\"] = config\n\t\tcase 1:\n\t\t\tconfigMap[\"typescript\"] = config\n\t\tcase 2:\n\t\t\tconfigMap[\"javascript\"] = config\n\t\tcase 3:\n\t\t\tconfigMap[\"editor\"] = config\n\t\t}\n\t}\n\ts.logger.Logf(\n\t\t\"received options from workspace/configuration request:\\njs/ts: %+v\\n\\ntypescript: %+v\\n\\njavascript: %+v\\n\\neditor: %+v\\n\",\n\t\tconfigMap[\"js/ts\"],\n\t\tconfigMap[\"typescript\"],","sourceCodeStart":419,"sourceCodeEnd":455,"githubUrl":"https://github.com/microsoft/typescript-go/blob/1bcfa18d79a3be41772223d5c05dfe4480e614ff/internal/lsp/server.go#L419-L455","documentation":"RequestConfiguration (server.go:404-438): the client advertised workspace.configuration support, so the server sent a workspace/configuration request asking for the js/ts, typescript, javascript, and editor sections, and that request failed — the client returned a JSON-RPC error, the context was canceled, or the send/response failed (sendClientRequest surfaces 'request failed: <response error>'). The result is defaulted to empty UserPreferences and the error wraps the cause.","triggerScenarios":"Client rejects workspace/configuration (advertised but not implemented), returns an error for one of the sections, ctx canceled (e.g. during shutdown) while awaiting the response, or the connection dropped. Called during initialization/configuration exchange, so it surfaces from handleInitialized paths.","commonSituations":"Editors advertising workspace.configuration without implementing it; clients returning errors for unknown configuration sections; timeouts on slow clients during startup; test clients that don't handle configuration requests.","solutions":["Check the wrapped client error: 'method not found' means a capability/client mismatch — fix the client or stop advertising workspace.configuration in its capabilities.","If the failure is transient (timeout/cancellation during startup), retry RequestConfiguration once after initialization completes.","When capabilities don't include Workspace.Configuration, the server falls back to initializationOptions/defaults (server.go:406-419) — ensure clients that can't answer configuration requests don't claim the capability.","In tests, implement a workspace/configuration handler returning the four sections."],"exampleFix":"// before: client claims configuration support it lacks\ncaps.Workspace.Configuration = true\n// after: match reality\ncaps.Workspace.Configuration = handlesWorkspaceConfiguration","handlingStrategy":"retry","validationCode":"// server-embedding: only claim configuration support if you implement it\nfunc capsMatchImplementation(handlesConfig bool) *lsproto.ClientCapabilities {\n    caps := baseCapabilities()\n    caps.Workspace.Configuration = handlesConfig\n    return caps\n}\n\n// client-side handler for workspace/configuration must return exactly 4 items\nfunc onConfiguration(p *lsproto.ConfigurationParams) []any {\n    out := make([]any, len(p.Items))\n    for i := range p.Items {\n        out[i] = sectionConfig(p.Items[i].Section)\n    }\n    return out\n}","typeGuard":null,"tryCatchPattern":"prefs, err := client.RequestConfiguration(ctx)\nif err != nil {\n    if ctx.Err() != nil || shuttingDown() {\n        prefs = lsutil.NewDefaultUserPreferences() // startup race; use defaults\n    } else if strings.Contains(err.Error(), \"method not found\") {\n        prefs = lsutil.NewDefaultUserPreferences() // client capability mismatch\n        reportClientBug(err)\n    } else {\n        // transient: retry once\n        prefs, err = client.RequestConfiguration(ctx)\n        if err != nil {\n            prefs = lsutil.NewDefaultUserPreferences()\n        }\n    }\n}","preventionTips":["Never advertise workspace.configuration without implementing the handler.","Return one configuration value per requested item, in order.","When capabilities omit workspace.configuration the server falls back to initializationOptions — prefer that path for minimal clients.","Retry once for transient startup races, and fall back to defaults rather than failing initialization."],"tags":["lsp","configuration","capabilities","client-interop"],"backgroundTag":null,"analyzedSha":"1bcfa18d79a3be41772223d5c05dfe4480e614ff","analyzedAt":"2026-08-16T02:12:00.115Z","schemaVersion":2},"datasetVersion":"2026-08-16T03:17:38.424Z"}