There was none: no .editorconfig, no static analysis, and CI ran only tests. Style was whatever the IDE happened to do, which is fine until two of them disagree. The split is LibreMail's, because it is the one that avoids arguments between tools: ktlint owns formatting, detekt owns static analysis with its formatting ruleset left off. Neither can contradict the other about the same line. Adapted rather than copied. LibreMail is Gradle 9.6 / JDK 21 with the configuration cache off; this is Gradle 9.5 / JDK 17 with it on, and Kotlin lives under src/main/java rather than src/main/kotlin -- so its plugin versions were evidence, not proof. Verified here before committing: both plugins resolve, ktlint reads src/main/java, and the run stores a configuration cache entry rather than tripping over it. detekt.yml carries only what applies. The Compose relaxations transfer intact -- a @Composable function is legitimately long, PascalCase, and full of dp literals no matter which app it is in. LibreMail's ForbiddenImport guard and its LargeClass exclusions do not: they name an AppLog facade and two test files that exist over there and nowhere here, and config that guards nothing is worse than no config, because the next reader has to work out that it is dead. detekt 2.0 is an alpha. That is not a preference: stable 1.23.x stops at Gradle 8.12 and this project is on 9.5, so there is no other line to be on. Coverage is reported, not gated. A floor needs a measured baseline, and the JVM test stack here is still junit-only -- a number picked before measuring would either fail on day one or mean nothing. Android lint gets warningsAsErrors because the other two tools fail on any finding, and a gate that stays green while its report fills up is not a gate. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
29 lines
709 B
Plaintext
29 lines
709 B
Plaintext
# Normalize line endings across platforms.
|
|
* text=auto eol=lf
|
|
|
|
# Windows scripts must keep CRLF.
|
|
*.bat text eol=crlf
|
|
|
|
# The Gradle wrapper shell script must keep LF (it runs under sh on Unix/macOS).
|
|
gradlew text eol=lf
|
|
|
|
# Treat these as binary.
|
|
*.jar binary
|
|
*.ttf binary
|
|
*.otf binary
|
|
*.png binary
|
|
*.jpg binary
|
|
*.jpeg binary
|
|
*.webp binary
|
|
*.apk binary
|
|
*.aab binary
|
|
*.keystore binary
|
|
*.jks binary
|
|
|
|
# The FFmpeg archive under bin/ and the native libraries inside it. Without these a
|
|
# normalizing checkout would rewrite bytes that happen to look like line endings and
|
|
# corrupt the archive -- which the "FFmpeg binary" CI job exists to catch, but which
|
|
# is far cheaper to prevent here.
|
|
*.aar binary
|
|
*.so binary
|