何のことか分からないまま遊んでいたら、ルール違反が検出されなくなった。
毎度のことながら、
気づいてからドキュメントに書いてあることが分かる。
👉 Code Smell Baseline | detekt
まあ、そんなに隅々まで読まないわな。
なので簡単にメモ。
🧑💻「baseline」とは
./gradlew detekt
で「code smell」が検出されたときに、それらを baseline に保存しておくと、次からそれらは検出されなくなる。
「検出のベースライン」ということなのだろう。
🧑💻 baseline ファイル
ファイル位置を指定しておくと分かりやすい。
// build.gradle.kts
detekt {
baseline = file("$rootDir/config/detekt/baseline.xml")
}
❯ ./gradlew tasks | grep detekt | grep -v EXPERIMENTAL
detekt
detektBaseline - Creates a detekt baseline on the given --baseline path.
detektGenerateConfig - Generate a detekt configuration file inside your project.
検出後、./gradlew detektBaseline
で指定した位置に書き出される。
❯ ./gradlew detekt
> Task :app:detekt FAILED
~(略)~ The function EditBar(target: TargetTodo, focusRequester: FocusRequester, onDone: KeyboardActionScope.() -> Unit, onClear: () -> Unit, onValueChange: (TextFieldValue) -> Unit, onAdd: () -> Unit, onUpdate: () -> Unit, onDelete: () -> Unit, modifier: Modifier) has too many parameters. The current threshold is set to 6. [LongParameterList]
~(略)~ The function TodoScreen is too long (99). The maximum length is 60. [LongMethod]
~(略)~ The function MainScreen is too long (63). The maximum length is 60. [LongMethod]
FAILURE: Build failed with an exception.
❯ ./gradlew detektBaseline
BUILD SUCCESSFUL in 510ms
❯ cat config/detekt/baseline.xml
<?xml version="1.0" ?>
<SmellBaseline>
<ManuallySuppressedIssues></ManuallySuppressedIssues>
<CurrentIssues>
<ID>LongMethod:MainScreen.kt$@Composable fun MainScreen( modifier: Modifier = Modifier )</ID>
<ID>LongMethod:TodoScreen.kt$@Composable fun TodoScreen( modifier: Modifier = Modifier, viewModel: TodoViewModel = hiltViewModel() )</ID>
<ID>LongParameterList:TodoScreen.kt$( target: TargetTodo, focusRequester: FocusRequester, onDone: KeyboardActionScope.() -> Unit, onClear: () -> Unit, onValueChange: (TextFieldValue) -> Unit, onAdd: () -> Unit, onUpdate: () -> Unit, onDelete: () -> Unit, modifier: Modifier = Modifier )</ID>
</CurrentIssues>
</SmellBaseline>
ここで検出しようとすると、何も検出されない。
❯ ./gradlew detekt
BUILD SUCCESSFUL in 582ms
削除すると検出されるようになる。
❯ rm config/detekt/baseline.xml
❯ ./gradlew detekt
> Task :app:detekt FAILED
~(略)~ The function EditBar(target: TargetTodo, focusRequester: FocusRequester, onDone: KeyboardActionScope.() -> Unit, onClear: () -> Unit, onValueChange: (TextFieldValue) -> Unit, onAdd: () -> Unit, onUpdate: () -> Unit, onDelete: () -> Unit, modifier: Modifier) has too many parameters. The current threshold is set to 6. [LongParameterList]
~(略)~ The function TodoScreen is too long (99). The maximum length is 60. [LongMethod]
~(略)~ The function MainScreen is too long (63). The maximum length is 60. [LongMethod]
FAILURE: Build failed with an exception.
🧑💻 まとめ
キャッシュが効いてるのかと思ってあれこれやっていたが、この「baseline」だった。
「最初からドキュメントを隅々まで読んでおけば良かった。」などは言わない。