UNPKG

autosnippet

Version:

Extract code patterns into a knowledge base for AI coding assistants

108 lines (107 loc) 3.86 kB
/** * Spring Enhancement Pack * 条件: { languages: ['java', 'kotlin'], frameworks: ['spring'] } */ import { EnhancementPack } from './EnhancementPack.js'; class SpringEnhancement extends EnhancementPack { get id() { return 'spring'; } get displayName() { return 'Spring Boot Enhancement'; } get conditions() { return { languages: ['java', 'kotlin'], frameworks: ['spring'] }; } getExtraDimensions() { return [ { id: 'spring-di-scan', label: 'Spring DI 分析', guide: 'DI 容器依赖注入拓扑分析、@Component/@Service/@Repository 分层、@Configuration + @Bean 工厂', tierHint: 2, knowledgeTypes: ['architecture', 'code-pattern'], skillWorthy: true, dualOutput: true, skillMeta: { name: 'project-spring-di', description: 'Spring dependency injection topology and bean configuration (auto-generated by enhancement)', }, }, { id: 'spring-api-scan', label: 'REST API 分析', guide: '@RestController + @RequestMapping endpoint 清单、请求/响应 DTO、异常处理策略', tierHint: 2, knowledgeTypes: ['architecture'], skillWorthy: true, dualOutput: true, skillMeta: { name: 'project-spring-api', description: 'Spring REST API endpoints, DTOs and error handling (auto-generated by enhancement)', }, }, ]; } getGuardRules() { return [ { ruleId: 'spring-field-injection', category: 'style', dimension: 'file', severity: 'warning', languages: ['java', 'kotlin'], pattern: /@Autowired\s+(?:private|protected)\s/, message: '建议使用构造函数注入替代字段注入(@Autowired on field)', }, ]; } detectPatterns(astSummary) { const patterns = []; for (const cls of astSummary.classes || []) { const annos = cls.annotations || []; if (annos.some((a) => /@RestController/.test(a))) { patterns.push({ type: 'spring-rest-controller', className: cls.name, line: cls.line, confidence: 0.95, }); } if (annos.some((a) => /@Service/.test(a))) { patterns.push({ type: 'spring-service', className: cls.name, line: cls.line, confidence: 0.95, }); } if (annos.some((a) => /@Repository/.test(a))) { patterns.push({ type: 'spring-repository', className: cls.name, line: cls.line, confidence: 0.95, }); } if (annos.some((a) => /@Entity/.test(a))) { patterns.push({ type: 'jpa-entity', className: cls.name, line: cls.line, confidence: 0.95, }); } if (annos.some((a) => /@Configuration/.test(a))) { patterns.push({ type: 'spring-configuration', className: cls.name, line: cls.line, confidence: 0.95, }); } } return patterns; } } export const pack = new SpringEnhancement();