Fourth run got the whole native pipeline through — cargo-ndk built all four
ABIs and uniffi generated the Kotlin — and then failed on style.
Two genuine mistakes, fixed:
* BoardViewModel's constructor parameter needed its own line.
* PaddingValues was written fully-qualified inline, which ktlint read as a
method chain. Importing it is what the rule was actually asking for, and
what the line should have said anyway.
The other ten were the tools not knowing this codebase:
* @Composable functions are PascalCase by universal Compose convention.
Exempted in BOTH .editorconfig (ktlint) and config/detekt.yml — they have to
agree or one of them is always wrong.
* MagicNumber on `private val Brand = Color(0xFFF5C518)`. The rule asks for a
well-named constant; that line IS one. ignorePropertyDeclaration.
* TooGenericExceptionCaught in the ViewModel and Application. Deliberate and
already commented: a note that fails to save must become a visible error
banner rather than a crash, and the store failing to open must still let the
app start so it can explain itself. Scoped to those two paths, not disabled
globally — everywhere else the rule is right.
Verified locally this time, both linters clean, using the SAME pinned CLIs from
ci-android:36 that the lane runs. ktlint and detekt are a formatter and a static
analyzer — the same category as cargo fmt and clippy, which is the precedent
ci-requirements already sets. No build was run locally.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
16 lines
661 B
INI
16 lines
661 B
INI
root = true
|
|
|
|
[*.{kt,kts}]
|
|
# ktlint's standard function-naming rule doesn't know about Compose, where
|
|
# PascalCase @Composable functions are the universal convention — every
|
|
# mainstream Compose codebase would fail it. This is ktlint's own supported
|
|
# exemption, and it mirrors the equivalent detekt override in config/detekt.yml.
|
|
ktlint_function_naming_ignore_when_annotated_with = Composable
|
|
|
|
# 120 rather than ktlint's looser default: this is a phone UI with deeply nested
|
|
# Compose calls, and a hard-ish ceiling is what keeps the nesting from becoming
|
|
# unreadable rather than merely long.
|
|
max_line_length = 120
|
|
indent_size = 4
|
|
insert_final_newline = true
|