autosnippet
Version:
Extract code patterns into a knowledge base for AI coding assistants
95 lines (94 loc) • 3.56 kB
JavaScript
/**
* Android Enhancement Pack
* 条件: { languages: ['kotlin', 'java'], frameworks: ['android'] }
*/
import { EnhancementPack } from './EnhancementPack.js';
class AndroidEnhancement extends EnhancementPack {
get id() {
return 'android';
}
get displayName() {
return 'Android (Kotlin/Java) Enhancement';
}
get conditions() {
return { languages: ['kotlin', 'java'], frameworks: ['android'] };
}
getExtraDimensions() {
return [
{
id: 'android-lifecycle-scan',
label: 'Activity/Fragment 生命周期',
guide: 'Activity/Fragment 生命周期方法合规检查、ViewModel 使用、LiveData/StateFlow 状态管理',
tierHint: 2,
knowledgeTypes: ['architecture', 'best-practice'],
skillWorthy: true,
dualOutput: true,
skillMeta: {
name: 'project-android-lifecycle',
description: 'Android lifecycle compliance and ViewModel patterns (auto-generated by enhancement)',
},
},
{
id: 'android-compose-scan',
label: 'Jetpack Compose 分析',
guide: '@Composable 函数组织与状态管理、remember/rememberSaveable 使用、Side Effect API',
tierHint: 2,
knowledgeTypes: ['code-pattern'],
skillWorthy: true,
dualOutput: true,
skillMeta: {
name: 'project-android-compose',
description: 'Jetpack Compose patterns and state management (auto-generated by enhancement)',
},
},
];
}
detectPatterns(astSummary) {
const patterns = [];
for (const cls of astSummary.classes || []) {
// ViewModel
if (cls.superclass && /ViewModel$/.test(cls.superclass)) {
patterns.push({
type: 'android-viewmodel',
className: cls.name,
line: cls.line,
confidence: 0.9,
});
}
// Activity / Fragment
if (cls.superclass &&
/Activity$|AppCompatActivity$|ComponentActivity$/.test(cls.superclass)) {
patterns.push({
type: 'android-activity',
className: cls.name,
line: cls.line,
confidence: 0.9,
});
}
if (cls.superclass && /Fragment$/.test(cls.superclass)) {
patterns.push({
type: 'android-fragment',
className: cls.name,
line: cls.line,
confidence: 0.9,
});
}
// Hilt DI
const annos = cls.annotations || [];
if (annos.some((a) => /@HiltAndroidApp|@AndroidEntryPoint/.test(a))) {
patterns.push({ type: 'hilt-di', className: cls.name, line: cls.line, confidence: 0.95 });
}
// Composable (class-level)
if (annos.some((a) => /@Composable/.test(a))) {
patterns.push({
type: 'composable',
className: cls.name,
line: cls.line,
confidence: 0.95,
});
}
}
return patterns;
}
}
export const pack = new AndroidEnhancement();