CONVENTIONS.md 3.0 KB

Coding Conventions for KMP/CMP Project

Kotlin/Gradle Rules

  • No hardcoded strings or values - use enum, object, or separate classes
  • Avoid unnecessary blank lines in code
  • For functions with multiple parameters, put each parameter on its own line
  • Use = for function body or property when possible (single expression)
  • Never use !! (non-null assertion) - use safe calls ?. or let {}
  • Prefer val over var
  • Use sealed classes/enums for state representation

Compose Multiplatform Rules

  • Keep composables small and focused
  • Use @Composable only on UI functions
  • Extract state to ViewModels or holders
  • Use remember and derivedStateOf appropriately
  • use .claude skills
  • allways use version catalog
  • to search for multiplatform libs use klibs.io and find the best match for all architectures, mainly android and linux
  • allways fix missing dependencies
  • do not create necessary files, for manuals create simple md file and manual, and never in another than english language
  • allways test project is buildable through Gradle with no questions, no lint questions
  • do not commit until project is error-safe and error-clear
  • allways check all imports are ok and lint does not fail

Project Structure

  • Shared code in :shared or :core module
  • Platform-specific implementations in android/, desktop/, ios/
  • Use expect/actual for platform APIs
  • never remove commented code
  • if changing code or function or method or member or const, comment old and make new
  • do not remove comments
  • do not remove old code, made new class, or new function, or new member, or new const instead
  • allways use compact and coherent project structure
  • allways check already implemented logic / functionality / features
  • if fix requested watch all 3 latest pushes to main repository, compare diffs and made best decision to merge logic / code

Code style

  • allways for every class one file, one class one file, no inheritance
  • allways for every enum file, one enum one file, no inheritance
  • allways for every object file, one object one file, no inheritance
  • allways for constants made one object file, one object one file, no inheritance
  • do not hardcode strings or constants
  • no magic fields or magic numbers
  • keep code clean
  • every function or method, or class, or enum or object has to be commented
  • all comments must be in english

Gradle KTS

  • Use libs.versions.toml for dependency versions
  • No hardcoded version numbers in build files
  • Organize dependencies by implementation/testImplementation/etc.

Lint errors

  • automatically correct all lint errors

Checks on every commit

  • project must be buildable / runnable and run action for IntelliJ IDEA must work, and deb must be releasable

Commits

  • allways use one commit for one fix / prompt
  • Use one line, no cowork details, no any details in commits, only one line with feature/fix without feature and or fix word, no ":"
  • do not commit message and details, no co-authored strings in repo
  • all commits must be in english