bollwerk/.github/kotlin-conventions.instructions.md

2.1 KiB
Raw Blame History

applyTo
**/*.kt

Kotlin Coding Conventions Krisenvorrat App

Diese Konventionen gelten für alle Kotlin-Dateien im Workspace.

Sprache & Plattform

  • Kotlin (aktuell), Zielplattform Android (aktuelles API-Level)
  • Jetpack Compose für UI
  • Gradle (Kotlin DSL) als Build-System

State Management

  • StateFlow / MutableStateFlow in ViewModels
  • collectAsStateWithLifecycle() in Composables
  • remember / rememberSaveable für UI-lokalen State

Navigation

  • Jetpack Navigation Compose
  • Type-safe Navigation mit @Serializable Routen

Concurrency

  • Kotlin Coroutines (suspend, Flow, StateFlow)
  • viewModelScope für ViewModel-gebundene Coroutines
  • withContext(Dispatchers.IO) für I/O-Operationen
  • Strukturierte Fehlerbehandlung mit try/catch um jeden suspend-Aufruf

Naming

  • Klassen/Interfaces: UpperCamelCase
  • Funktionen/Variablen: lowerCamelCase
  • Konstanten: UPPER_SNAKE_CASE
  • Composable-Funktionen: UpperCamelCase (wie Klassen)
  • Boolean-Eigenschaften: Präfix is, has, can, should

Zugriffsmodifikatoren

  • So restriktiv wie möglich: private > internal > public
  • Kein public ohne klaren Grund (Kotlin-Default ist public)

Verbotene Patterns

  • Keine Force-Casts (as) ohne vorherige Typprüfung as? bevorzugen
  • Keine println()-Statements stattdessen Timber oder Projekt-Logger verwenden
  • Keine ungenutzten Imports
  • Keine auskommentierten Code-Blöcke
  • Kein !! (not-null assertion) in Produktionscode

Testing

  • JUnit 5 für Unit Tests
  • Espresso / Compose Testing für UI Tests
  • Testmethoden: test_<Was>_<Vorbedingung>_<Ergebnis>()
  • Gliederung: // Given, // When, // Then
  • MockK für Mocking

Persistenz

  • Room (SQLite) für lokale Daten
  • kotlinx.serialization für JSON Import/Export
  • DataStore für Einstellungen/Konfigurationen
  • Keychain für Session-Tokens

Dokumentation

  • Alle öffentlichen/internen Typen und Methoden mit /// dokumentieren
  • Kommentare beschreiben „was" und „warum", nicht „wie"