- Build:
./gradlew buildorjust build - Lint:
./gradlew detektorjust detekt - Format:
just format(runs pre-commit hooks) - Test (all):
./gradlew allTestsorjust test - Test (JVM):
./gradlew jvmTestorjust test-jvm - Test (single file):
./gradlew jvmTest --tests ClassName(e.g.,./gradlew jvmTest --tests EncoderDecoderTest) - Coverage:
./gradlew :koverHtmlReportorjust coverage - Docs:
./gradlew :dokkaGenerateHtmlorjust build-dokka
- Kotlin Multiplatform library for delimiter-separated values (CSV/TSV)
- Main module:
kotlin-dsv/- Core library with DSV parsing, writing, encoding/decoding - Subprojects:
benchmark/(performance benchmarks) - Uses kotlinx.serialization for type-safe serialization and kotlinx.io for streaming
- Package:
dev.sargunv.kotlindsv
- Indent: 2 spaces for Kotlin, 4 spaces for other files
- All public APIs must be documented (detekt enforces UndocumentedPublicClass/Function/Property)
- Use kotlinx.serialization annotations (e.g.,
@Serializable) - Error handling: throw
DsvParseExceptionfor parsing errors - Naming: use
DsvNamingStrategyfor column name transformations - Format code and dump ABI with pre-commit hooks before committing
Never make a commit unless explicitly asked to do so. Such permission only extends to that one commit, not to future commits in that session.
When making commits, always include a signoff in the commit message following this format:
🤖 Generated with [Agent Name](https://agent-url)
Co-Authored-By: Agent Name <example@agent-domain>
Examples:
- Claude:
🤖 Generated with [Claude Code](https://claude.com/claude-code)andCo-Authored-By: Claude <noreply@anthropic.com> - OpenCode:
🤖 Generated with [OpenCode](https://opencode.ai)andCo-Authored-By: OpenCode <noreply@opencode.ai> - Amp:
🤖 Generated with [Amp](https://ampcode.com)andCo-Authored-By: Amp <amp@ampcode.com>
Each coding agent should use their own Author and URL but maintain the same format.