From b91b8715423acab2e0fbe0bd52b56181351d9277 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 7 Aug 2026 10:06:29 +0000 Subject: [PATCH 1/3] build(deps): Bump com.ncorti.ktfmt.gradle from 0.26.0 to 0.27.0 Bumps com.ncorti.ktfmt.gradle from 0.26.0 to 0.27.0. --- updated-dependencies: - dependency-name: com.ncorti.ktfmt.gradle dependency-version: 0.27.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4ec642a..4ccc3ba 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,7 +3,7 @@ kotlin = "2.4.10" # maven-plugin がコンパイル時に参照する Maven API の版(kotlin-maven-plugin 自身が依存する版に揃える) maven = "3.9.12" autoservice = "0.1.5" -ktfmt = "0.26.0" +ktfmt = "0.27.0" mavenPublish = "0.37.0" pluginPublish = "2.1.1" dokka = "2.2.0" From 7d161c5c25f76530e55039e323bf679de46a1a8d Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sat, 8 Aug 2026 10:54:41 +0900 Subject: [PATCH 2/3] =?UTF-8?q?build:=20=E3=83=AB=E3=83=BC=E3=83=88?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E3=81=AE=20ktfmtFormat=20=E3=81=A7=E4=BD=9C?= =?UTF-8?q?=E6=A5=AD=E3=83=84=E3=83=AA=E3=83=BC=E5=85=A8=E4=BD=93=E3=82=92?= =?UTF-8?q?=E6=95=B4=E5=BD=A2=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ktfmt はプロジェクト毎にタスクを登録するため、ルートを指定した :ktfmtFormat / :ktfmtCheck の対象はルート直下の *.kts に限られ、独立したビルドである integration-test はどちらの経路にも入らなかった。 ルートのタスクを集約点として各サブプロジェクトへ束ね、さらに ktfmtFormat からは ラッパー経由の別プロセスとして integration-test の ktfmtFormat を起動する。 仕上げの整形はリポジトリルートでの 1 コマンドで完結する。 Co-Authored-By: Claude Opus 5 --- CLAUDE.md | 4 ++-- build.gradle.kts | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index c114446..84c2bb5 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -39,7 +39,7 @@ - 何度もフェッチやチェックが走らないよう、必要に応じて取得関数や値オブジェクトを導入する必要がある - 値を比較するテストは、なるべく`data class`同士を1回の`assertEquals`で比較すること(個別プロパティ同士で比較しない) - 仕上げとして必ず`ktfmt`によるフォーマッティングを実行すること - - 変更したビルド側で`./gradlew ktfmtFormat`を実行する。`integration-test`は独立したビルドなので、そちらを変更した場合は`integration-test`ディレクトリでも実行する + - リポジトリルートで`./gradlew ktfmtFormat`を実行する。独立したビルドである`integration-test`もこれ1つで対象になる - フォーマット結果を含めて動作確認・コミットまで行う(未整形のまま完了報告しない) - - `ktfmtCheck`は`check`に紐付いているため、未整形のコードは`build`で失敗する + - `ktfmtCheck`は各ビルドの`check`に紐付いているため、未整形のコードはそのビルドの`build`で失敗する - `gradle-integration`のTestKitフィクスチャ(`src/test/resources/fixtures`)は診断の行番号を検証する入力であり、整形対象外とする diff --git a/build.gradle.kts b/build.gradle.kts index 7363f02..901b92b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -130,6 +130,41 @@ allprojects { ktfmt { kotlinLangStyle() } } +// ktfmt はプロジェクト毎にタスクを登録するため、ルートのタスク(:ktfmtFormat / :ktfmtCheck)が +// 対象とするのはルート直下の *.kts のみで、サブプロジェクトも独立したビルドである integration-test も +// 入らない。作業ツリー全体をルート指定の 1 コマンドで扱えるよう、両者をルートのタスクへ束ねる。 +// integration-test は別ビルドのためタスク依存では辿れず、GradleBuild で入れ子のビルドとして起動する +// ktfmt はプロジェクト毎にタスクを登録するため、ルートを指定した :ktfmtFormat / :ktfmtCheck が +// 対象とするのはルート直下の *.kts に限られる。ルートのタスクを集約点として各サブプロジェクトへ束ね、 +// ルート指定でルートビルド全体が対象になるようにする +listOf("ktfmtFormat", "ktfmtCheck").forEach { taskName -> + tasks.named(taskName) { dependsOn(subprojects.map { "${it.path}:$taskName" }) } +} + +// integration-test は独立したビルドであり、上の集約でも allprojects でも辿れない。仕上げの整形を +// ルート指定の 1 コマンドで完結させるため、ktfmtFormat からラッパー経由の別プロセスとして起動する +// (入れ子のビルドを組む GradleBuild は、integration-test が親ビルドを includeBuild しているため +// 「Cannot include build」となり使えない)。ラッパーと -p の組み合わせは CI が integration-test を +// driving する形と同じで、Gradle 本体の版もルートのラッパーへ揃う。 +// 検証側(ktfmtCheck)を束ねないのは、それが check 経由でルートの build へ載り、ルートビルドの +// 検証が integration-test 側の構成・依存解決の失敗に巻き込まれるため。未整形の検出はビルド毎の +// check が担い、CI もビルド毎にジョブを分けている +val ktfmtFormatIntegrationTest = + tasks.register("ktfmtFormatIntegrationTest") { + val wrapper = + providers.systemProperty("os.name").map { + if (it.startsWith("Windows")) "gradlew.bat" else "gradlew" + } + commandLine( + layout.projectDirectory.file(wrapper.get()).asFile.absolutePath, + "-p", + "integration-test", + "ktfmtFormat", + ) + } + +tasks.named("ktfmtFormat") { dependsOn(ktfmtFormatIntegrationTest) } + // API ドキュメント(GitHub Pages 掲載用)の集約。対象は利用者がコードから触る公開 API を持つ 2 モジュールで、 // compiler-plugin(内部実装)と maven-plugin(利用面は POM の設定であり Kotlin API ではない)は含めない。 // 集約出力は build/dokka/html From e77dfa4f0846a1d9e9f62e0b30c8cb0bf065af22 Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sat, 8 Aug 2026 10:20:34 +0900 Subject: [PATCH 3/3] =?UTF-8?q?style:=20ktfmt=200.27.0=20=E3=81=AE?= =?UTF-8?q?=E3=83=95=E3=82=A9=E3=83=BC=E3=83=9E=E3=83=83=E3=83=88=E7=B5=90?= =?UTF-8?q?=E6=9E=9C=E3=81=B8=E8=BF=BD=E9=9A=8F=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5 --- .../compiler/fir/EnumizeOwnerGeneratorPatch.kt | 15 +++++++-------- .../compiler/EnumizeLabelCaseTest.kt | 3 ++- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/compiler-plugin/src/main/kotlin/io/github/projectmapk/sealedClassEnumizer/compiler/fir/EnumizeOwnerGeneratorPatch.kt b/compiler-plugin/src/main/kotlin/io/github/projectmapk/sealedClassEnumizer/compiler/fir/EnumizeOwnerGeneratorPatch.kt index f21a850..26856ba 100644 --- a/compiler-plugin/src/main/kotlin/io/github/projectmapk/sealedClassEnumizer/compiler/fir/EnumizeOwnerGeneratorPatch.kt +++ b/compiler-plugin/src/main/kotlin/io/github/projectmapk/sealedClassEnumizer/compiler/fir/EnumizeOwnerGeneratorPatch.kt @@ -11,15 +11,14 @@ import org.jetbrains.kotlin.fir.extensions.FirDeclarationGenerationExtension // この属性を自前で刻印するしかない。internal API へのリフレクションは、Kotlin のマイナーバージョン毎に // アーティファクトを分割する方針(docs/概要.md §7)の下でバージョンに固定される。 internal object EnumizeOwnerGeneratorPatch { - private val setter: Method? = - runCatching { - Class.forName("org.jetbrains.kotlin.fir.FirGeneratedDeclarationsUtilsKt") - .methods - .firstOrNull { method -> - method.name.startsWith("setOwnerGenerator") && method.parameterCount == 2 - } + private val setter: Method? = runCatching { + Class.forName("org.jetbrains.kotlin.fir.FirGeneratedDeclarationsUtilsKt") + .methods + .firstOrNull { method -> + method.name.startsWith("setOwnerGenerator") && method.parameterCount == 2 } - .getOrNull() + } + .getOrNull() fun stamp(declaration: FirClassLikeDeclaration, extension: FirDeclarationGenerationExtension) { setter?.invoke(null, declaration, extension) diff --git a/compiler-plugin/src/test/kotlin/io/github/projectmapk/sealedClassEnumizer/compiler/EnumizeLabelCaseTest.kt b/compiler-plugin/src/test/kotlin/io/github/projectmapk/sealedClassEnumizer/compiler/EnumizeLabelCaseTest.kt index 4c12149..30fd409 100644 --- a/compiler-plugin/src/test/kotlin/io/github/projectmapk/sealedClassEnumizer/compiler/EnumizeLabelCaseTest.kt +++ b/compiler-plugin/src/test/kotlin/io/github/projectmapk/sealedClassEnumizer/compiler/EnumizeLabelCaseTest.kt @@ -31,7 +31,8 @@ class EnumizeLabelCaseTest { // 具体ケースの集合と並びは一致していなければならない assertEquals( RuntimeLabelCase.entries.map { it.name }, - listOf(RuntimeLabelCase.PROJECT_DEFAULT.name) + EnumizeLabelCase.entries.map { it.name }, + listOf(RuntimeLabelCase.PROJECT_DEFAULT.name) + + EnumizeLabelCase.entries.map { it.name }, ) }