{"record":{"id":"727fe76f6427d854","repo":"neoclide/coc.nvim","slug":"extension-id-not-registered","errorCode":null,"errorMessage":"Extension ${id} not registered!","messagePattern":"Extension (.+?) not registered!","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/extension/manager.ts","lineNumber":270,"sourceCode":"  public get loadedExtensions(): string[] {\n    return Array.from(this.extensions.keys())\n  }\n\n  public get all(): Extension<API>[] {\n    return Array.from(this.extensions.values()).map(o => o.extension)\n  }\n\n  /**\n   * Activate extension, throw error if disabled or doesn't exist.\n   * Returns true if extension successfully activated.\n   */\n  public async activate(id: string): Promise<boolean> {\n    return this.activateWithSet(id, new Set())\n  }\n\n  private async activateWithSet(id: string, activating: Set<string>): Promise<boolean> {\n    let item = this.extensions.get(id)\n    if (!item) throw new Error(`Extension ${id} not registered!`)\n    let { extension } = item\n    if (extension.isActive) return true\n    if (activating.has(id)) {\n      logger.warn(`Circular dependency detected: ${id}`)\n      return false\n    }\n    activating.add(id)\n    const { packageJSON } = extension\n    if (packageJSON.extensionDependencies?.length > 0) {\n      const deps = packageJSON.extensionDependencies\n      const results = await Promise.allSettled(deps.map(dep => this.activateWithSet(dep, activating)))\n      for (let i = 0; i < results.length; i++) {\n        const result = results[i]\n        if (result.status === 'rejected' || (result.status === 'fulfilled' && !result.value)) {\n          const dep = deps[i]\n          const reason = result.status === 'rejected' ? result.reason : undefined\n          if (reason !== undefined) {\n            logger.error(`Could not activate dependency ${dep} for ${id}.`, reason)","sourceCodeStart":252,"sourceCodeEnd":288,"githubUrl":"https://github.com/neoclide/coc.nvim/blob/50e974d9692461a69147d5cab146a8d3e439abe4/src/extension/manager.ts#L252-L288","documentation":"activate()/activateWithSet in src/extension/manager.ts throws when the requested extension id has no entry in the ExtensionManager registry. Activation can only proceed for extensions previously loaded/registered (internal, single-file, or loaded from a folder). A missing entry is treated as a hard programming/state error rather than a soft 'not active' result.","triggerScenarios":"Calling activate(id) (e.g. via workspace.activateExtension flow or an activation event) with an id that was never loaded, was unloaded/unregistered, or is misspelled; racing an unload that removed the map entry before activation.","commonSituations":"Typo in the extension id in activation events or coc-settings; extension disabled/removed but still referenced by a keybinding or language trigger; calling activate after unloadExtension; extension failed to load earlier so it was never registered.","solutions":["Verify the exact id: check the registered ids (e.g. via extension list / package.json `name`) and fix the caller's id string","Ensure the extension is loaded before activating: call loadExtension/loadExtensionFile for the folder or file first","Check whether the extension was disabled via coc.extensions configuration and re-enable it","If activating from an event handler, guard with a registry lookup (getExtension(id)) before calling activate"],"exampleFix":"// before\nawait extensionManager.activate('coc-tsservers') // typo\n// after\nif (extensionManager.getExtension('coc-tsserver')) {\n  await extensionManager.activate('coc-tsserver')\n}","handlingStrategy":"validation","validationCode":"if (!manager.getExtension(id)) {\n  logger.warn(`skip activate: ${id} not registered`)\n  return false\n}","typeGuard":null,"tryCatchPattern":"try {\n  await manager.activate(id)\n} catch (e) {\n  if (/not registered!?$/.test(e.message)) {\n    logger.warn(`extension ${id} unavailable:`, e.message)\n  } else throw e\n}","preventionTips":["Copy extension ids from the extension's package.json rather than typing them","Load extensions before referencing them in activation code","Re-check registration after unload/disable operations","Avoid stale references in autocmds/keybindings after removing extensions"],"tags":["extension-activation","registry","lifecycle"],"backgroundTag":"extension-not-registered","analyzedSha":"50e974d9692461a69147d5cab146a8d3e439abe4","analyzedAt":"2026-08-31T11:17:23.966Z","schemaVersion":2},"datasetVersion":"2026-09-01T08:17:40.651Z"}