chore: Add agentic coding tooling
This commit is contained in:
44
.crosslink/rules/kotlin.md
Normal file
44
.crosslink/rules/kotlin.md
Normal file
@@ -0,0 +1,44 @@
|
||||
### Kotlin Best Practices
|
||||
|
||||
#### Code Style
|
||||
- Follow Kotlin coding conventions
|
||||
- Use `val` over `var` when possible
|
||||
- Use data classes for simple data holders
|
||||
- Leverage null safety features
|
||||
|
||||
```kotlin
|
||||
// GOOD: Idiomatic Kotlin
|
||||
data class User(val id: String, val name: String)
|
||||
|
||||
class UserService(private val repository: UserRepository) {
|
||||
fun findUser(id: String): User? =
|
||||
repository.find(id)
|
||||
|
||||
fun getOrCreateUser(id: String, name: String): User =
|
||||
findUser(id) ?: repository.create(User(id, name))
|
||||
}
|
||||
```
|
||||
|
||||
#### Null Safety
|
||||
- Avoid `!!` (force non-null); use safe calls instead
|
||||
- Use `?.let {}` for conditional execution
|
||||
- Use Elvis operator `?:` for defaults
|
||||
|
||||
```kotlin
|
||||
// GOOD: Safe null handling
|
||||
val userName = user?.name ?: "Unknown"
|
||||
user?.let { saveToDatabase(it) }
|
||||
|
||||
// BAD: Force unwrapping
|
||||
val userName = user!!.name // Crash if null
|
||||
```
|
||||
|
||||
#### Coroutines
|
||||
- Use structured concurrency with `CoroutineScope`
|
||||
- Handle exceptions in coroutines properly
|
||||
- Use `withContext` for context switching
|
||||
|
||||
#### Security
|
||||
- Use parameterized queries
|
||||
- Validate input at boundaries
|
||||
- Use sealed classes for exhaustive error handling
|
||||
Reference in New Issue
Block a user