用途:PolySymbols 构建在平台 Symbol API 之上,用于在多种语言和框架之间共享符号定义,并统一提供代码洞察功能,如补全、引用解析、文档、导航、重命名、查找用法和语义高亮。它曾名为 Web Symbols,目前仍标记为实验性;核心模块位于 community/platform/polySymbols/,包含 src、backend、src-web。
主要能力:围绕 PolySymbol、PolySymbolScope、PolySymbolQueryExecutor 等构建查询模型。扩展点包括 PolySymbolQueryScopeContributor(注册作用域,通常是首要实现类)、PsiPolySymbolReferenceProvider、PolySymbolDeclarationProvider、PolySymbolsCompletionProviderBase 等。查找用法、文档和重命名在引用能解析为 PolySymbol 后可自动工作。可选组件有 PolySymbolQueryConfigurator、结果自定义器、Web Types 静态定义、PolySymbolFramework 与 PolyContextProvider,以及用于 microsyntax 的 pattern DSL。
使用方式:新增集成时,先通过 polySymbols.enableInLanguage 让语言参与,再实现作用域贡献者注册 PolySymbolScopes;按宿主 PsiElement 类型实现引用提供者,或直接实现 PsiElement.getOwnReferences(),二者不要重复注册;符号与真实 PsiElement 一对一映射时,实现 PolySymbolDeclaredInPsi 与声明提供者;补全注册普通 completion.contributor 并继承 PolySymbolsCompletionProviderBase。使用方不得将 PolySymbol 强制转换为具体实现类,判断种类应读取 kind 属性,其他数据通过 PolySymbolProperty<T> 与 symbol[TheProperty] 读取,并建议用扩展封装。
适用场景:需要跨语言或框架共享符号与代码洞察能力时使用,例如 HTML/JS/TS/CSS、Vue、Angular、GDScript 等集成。
限制:框架为实验性;补充性质而非自动成为权威来源,现有集成大多保留旧 PSI 路径并行运行,可能出现重叠或重复结果,需要显式控制。除用户明确一次性授权外,不得修改 community/platform/polySymbols(含 src、backend、src-web)下的平台源码;遇到平台缺口应报告,而不是打补丁。具体定价、平台支持范围及完整使用步骤:暂未提供。