UNPKG

autosnippet

Version:

Extract code patterns into a knowledge base for AI coding assistants

110 lines (109 loc) 5.05 kB
/** * LanguageProfiles — 全景分析多语言统一注册中心 * * 设计原则: * 1. **语言族 (LanguageFamily)** 是核心抽象 — 同族语言共享 import 语法、框架类体系、生态库 * 2. **单一数据源** — 新增语言只需添加一条 FamilyProfile,所有消费者自动生效 * 3. **与 LanguageService 互补** — LanguageService 管理基础映射 (ext→lang), * LanguageProfiles 管理分析知识 (import 解析、角色推断、技术栈分类) * 4. **按关注点暴露 API** — 消费者调用自己需要的访问器,无需了解内部数据结构 * * 消费者: * - CouplingAnalyzer → importPatterns, sourceExts * - RoleRefiner → familyOf, superclassRoles, protocolRoles, importRolePatterns * - TechStackProfiler → knownLibraries, keywordCategories * - ModuleDiscoverer → skipDirs, artifactSuffixes, vendorDirs, sourceExts * * @module LanguageProfiles */ /** 模块在软件架构中扮演的角色 */ export type ModuleRole = 'core' | 'service' | 'ui' | 'networking' | 'storage' | 'test' | 'app' | 'routing' | 'utility' | 'model' | 'auth' | 'config' | 'feature'; export type LanguageFamily = 'apple' | 'jvm' | 'dart' | 'python' | 'web' | 'go' | 'rust' | 'dotnet'; /** import 语句解析模式 — 用于依赖边提取 */ export interface ImportPattern { /** 匹配 import 语句的正则 (对 trimmed 行执行) */ regex: RegExp; /** 从匹配结果提取模块名候选列表 */ extract: (m: RegExpExecArray) => string[]; } /** import 关键词 → 角色推断模式 */ export interface RolePattern { regex: RegExp; role: ModuleRole; } export declare class LanguageProfiles { /** 将规范化语言 ID 映射到语言族 */ static familyOf(langId: string): LanguageFamily | undefined; /** 返回所有已注册的语言族 ID */ static allFamilies(): LanguageFamily[]; /** 根据主语言解析项目涉及的语言族 */ static resolveFamilies(primaryLang: string | null): LanguageFamily[]; /** * 获取所有 import 解析模式 (合并全部语言族 + C/C++) * * CouplingAnalyzer 对每行代码尝试所有模式, * 按「特异性递减」排列:最特殊的模式在前。 */ static get importPatterns(): readonly ImportPattern[]; /** * 源代码文件扩展名集合 — 委托 LanguageService * * 消除 CouplingAnalyzer / ModuleDiscoverer 自建 SOURCE_EXTS 的重复。 */ static get sourceExts(): ReadonlySet<string>; /** * 合并指定语言族的超类→角色映射 * @param families 项目检测到的语言族 */ static superclassRoles(families: LanguageFamily[]): Record<string, ModuleRole>; /** * 合并指定语言族的协议/接口→角色映射 * @param families 项目检测到的语言族 */ static protocolRoles(families: LanguageFamily[]): Record<string, ModuleRole>; /** * 合并指定语言族的 import→角色模式 + 通用模式 * @param families 项目检测到的语言族 */ static importRolePatterns(families: LanguageFamily[]): RolePattern[]; /** * 获取全量已知库→分类映射 (合并所有族 + 跨平台库) * * TechStackProfiler 不按族过滤 — 外部依赖可能跨生态 */ static get knownLibraries(): Readonly<Record<string, string>>; /** 关键词启发式分类 — KNOWN_LIBRARIES 未命中时的 fallback */ static get keywordCategories(): ReadonlyArray<[RegExp, string]>; /** * 应跳过的目录名集合 (合并 LanguageService.scanSkipDirs + 各族额外目录) */ static get skipDirs(): ReadonlySet<string>; /** 构建产物后缀 (合并全部族) */ static get artifactSuffixes(): readonly string[]; /** Vendor / 第三方目录名集合 (合并通用 + 各族) */ static get vendorDirs(): ReadonlySet<string>; /** * 三方库路径正则 — 匹配路径中的 vendor 目录名或已知库名 * * 组成: * 1. vendorDirs + 常见 skip 目录 (Pods, Carthage, DerivedData, …) * 2. knownLibraries 中所有库名 (首字母大写形式) * * 用于 Agent 工具层对搜索结果做三方库过滤。 */ static get thirdPartyPathRegex(): RegExp; /** * 多语言基类/根类型排除集 — 合并所有族的 superclassRoles + protocolRoles + 额外基础类型。 * * 用于 getHotNodes() 等入度统计,排除高入度但无信息量的语言根类型。 * 新增语言族时自动生效,无需手动维护排除列表。 */ static get baseClassExclusions(): ReadonlySet<string>; /** * 合法代码语言集合 — 合并 LanguageService.knownLangs + 常见别名。 * * QualityScorer 格式评分使用,判断 recipe 的 language 字段是否合法。 * 新增语言时只需在 LanguageService 添加,此处自动生效。 */ static get validCodeLanguages(): ReadonlySet<string>; }