SuperAPI AI 工具集

poly-context

通用与其它

查看项目

更新于 10-15 23:31

技能介绍

用途:PolyContext 回答“当前编码环境是什么”这一问题,是独立平台机制,不依赖 PolySymbols 或 Web 框架。最典型的消费者是 poly-symbols,用于判断某位置的活跃框架。

主要能力:对某一上下文种类(如 framework),同一位置最多一个名称生效或为 null。提供两个重载:PolyContext.get(kind, psiElement) 可检查 PSI 树,适合多数编码辅助逻辑;PolyContext.get(kind, virtualFile, project) 成本低、索引安全、无 PSI 访问,可用于语言替换阶段(PSI 尚未建立时决定用哪种语言解析)。

使用方式:实现 PolyContextProvider 的 isEnabled() 或 isForbidden() 并注册到 EP com.intellij.polySymbols.context,结果需缓存。也可用声明式上下文规则:在 Web Types JSON 的 contexts-config 下定义 kind/name 及 enable-when、disable-when(支持 file-extensions、file-name-patterns、ide-libraries、project-tool-executables、node-packages、ruby-gems 等,并有 proximity 评分)。无法用静态数据表达的规则可通过 PolySymbolQueryConfigurator.getContextRulesProviders 提供,规则输出必须稳定。用户可用 .ws-context JSON 文件强制覆盖上下文值。

适用场景:框架检测、语言替换、特性门控,以及 Ruby gem 等非 Web 示例。

限制:VirtualFile+Project 重载无 PSI 访问,解析后结果可能与 PSI 结果不同;provider 结果会被频繁调用,必须缓存;规则变化会触发项目重扫与缓存失效;.ws-context 的 GLOB 仅末段支持 *。官方文档仅 Poly Symbols Context 一页。