add-ktnip-collector

star 247

Adds a new collector to the ktnip KSP processor. Use when implementing a new handler type (e.g. new annotation like @MyHandler), adding a collector for a new activity pattern, or extending the ktnip processor to collect additional annotated functions.

vendelieu By vendelieu schedule Updated 3/2/2026

name: add-ktnip-collector description: Adds a new collector to the ktnip KSP processor. Use when implementing a new handler type (e.g. new annotation like @MyHandler), adding a collector for a new activity pattern, or extending the ktnip processor to collect additional annotated functions.

Add Ktnip Collector

Workflow

1. Create Annotation (if new)

  • Define annotation in telegram-bot module (annotations package)
  • Ensure it can be discovered via findAnnotationRecursively (meta-annotations supported)

2. Add Annotation Parser (if new annotation)

  • In AnnotationParser.kt: add parseMyAnnotation(arguments) returning parsed data
  • Use parseValueList, parseScopes patterns from existing parsers

3. Create Collector Class

4. Collector Implementation

  • Discovery: resolver.getAnnotatedFnSymbols(ctx.pkg, MyAnnotation::class)
  • Parse: function.annotations.findAnnotationRecursively(MyAnnotation::class)?.arguments
  • Metadata: extractActivityMetadata(function) (from BaseCollector)
  • Generate: generateAndRegisterActivity(function, metadata, ctx, parameters, updateType)
  • Register: ctx.loadFun.addStatement("registerX(%S, %L.id)", id, activityId)

5. Register in ActivityProcessor

  • Add to collectors list in ActivityProcessor.kt processPackage:
    • Order matters: BotCtxCollector, CommandCollector, InputCollector, CommonCollector, UpdateHandlerCollector, UnprocessedHandlerCollector, WizardCollector

6. ResolverExtensions (if needed)

  • getAnnotatedFnSymbols(pkg, MyAnnotation::class) works for any annotation (generic)
  • Custom discovery logic only if collecting non-function symbols

7. Add KSP Tests

  • Add test data in ktnip/src/jvmTest/resources/test-data/ (or extend DefaultHandlers.kt, WizardHandlers.kt, etc.)
  • Add runTest("test-data/YourFile.kt") in ProcessorTest.kt
  • Use /* G-EXPECT ... */ block for golden output checks (see add-ktnip-ksp-tests skill)

Reference

Install via CLI
npx skills add https://github.com/vendelieu/telegram-bot --skill add-ktnip-collector
Repository Details
star Stars 247
call_split Forks 17
navigation Branch main
article Path SKILL.md
More from Creator