diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7fd7ed1..834ba53 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,7 +4,7 @@ dagp = "1.30.0" java = "11" junit5 = "5.7.2" kotlin = "1.9.24" -kotlinEditor = "0.4" +kotlinEditor = "0.5" mavenPublish = "0.28.0" moshi = "1.14.0" retrofit = "2.9.0" diff --git a/sort/src/main/kotlin/com/squareup/sort/DependencyComparator.kt b/sort/src/main/kotlin/com/squareup/sort/DependencyComparator.kt index 2d83748..7b6041d 100644 --- a/sort/src/main/kotlin/com/squareup/sort/DependencyComparator.kt +++ b/sort/src/main/kotlin/com/squareup/sort/DependencyComparator.kt @@ -28,12 +28,17 @@ internal class DependencyComparator : Comparator { right: DependencyDeclaration, ): Int { if (left.isProjectDependency() && right.isProjectDependency()) return compareDependencies( - left, - right + left, right ) if (left.isProjectDependency()) return -1 if (right.isProjectDependency()) return 1 + if (left.isGradleDistributionDependency() && right.isGradleDistributionDependency()) return compareDependencies( + left, right + ) + if (left.isGradleDistributionDependency()) return -1 + if (right.isGradleDistributionDependency()) return 1 + if (left.isFileDependency() && right.isFileDependency()) return compareDependencies(left, right) if (left.isFileDependency()) return -1 if (right.isFileDependency()) return -1 diff --git a/sort/src/main/kotlin/com/squareup/sort/DependencyDeclaration.kt b/sort/src/main/kotlin/com/squareup/sort/DependencyDeclaration.kt index 81011ae..785265b 100644 --- a/sort/src/main/kotlin/com/squareup/sort/DependencyDeclaration.kt +++ b/sort/src/main/kotlin/com/squareup/sort/DependencyDeclaration.kt @@ -8,7 +8,11 @@ internal interface DependencyDeclaration { fun isPlatformDeclaration(): Boolean fun isTestFixturesDeclaration(): Boolean + /** TODO(tsr): what about files and fileTree? */ fun isFileDependency(): Boolean + + fun isGradleDistributionDependency(): Boolean + fun isProjectDependency(): Boolean /** diff --git a/sort/src/main/kotlin/com/squareup/sort/groovy/GroovyDependencyDeclaration.kt b/sort/src/main/kotlin/com/squareup/sort/groovy/GroovyDependencyDeclaration.kt index 400bfbf..c865760 100644 --- a/sort/src/main/kotlin/com/squareup/sort/groovy/GroovyDependencyDeclaration.kt +++ b/sort/src/main/kotlin/com/squareup/sort/groovy/GroovyDependencyDeclaration.kt @@ -47,9 +47,13 @@ internal class GroovyDependencyDeclaration( override fun isPlatformDeclaration() = declarationKind == DeclarationKind.PLATFORM override fun isTestFixturesDeclaration() = declarationKind == DeclarationKind.TEST_FIXTURES - override fun isProjectDependency() = dependencyKind == DependencyKind.PROJECT override fun isFileDependency() = dependencyKind == DependencyKind.FILE + /** TODO(tsr): implement DependencyKind.GRADLE_DISTRIBUTION */ + override fun isGradleDistributionDependency(): Boolean = false + + override fun isProjectDependency() = dependencyKind == DependencyKind.PROJECT + override fun hasQuotes(): Boolean { val i = declaration.children.indexOf(dependency) return declaration.getChild(i - 1) is QuoteContext && declaration.getChild(i + 1) is QuoteContext diff --git a/sort/src/main/kotlin/com/squareup/sort/kotlin/KotlinDependencyDeclaration.kt b/sort/src/main/kotlin/com/squareup/sort/kotlin/KotlinDependencyDeclaration.kt index 946cb18..62dba3a 100644 --- a/sort/src/main/kotlin/com/squareup/sort/kotlin/KotlinDependencyDeclaration.kt +++ b/sort/src/main/kotlin/com/squareup/sort/kotlin/KotlinDependencyDeclaration.kt @@ -27,6 +27,10 @@ internal class KotlinDependencyDeclaration( return base.type == Type.FILE } + override fun isGradleDistributionDependency(): Boolean { + return base.type == Type.GRADLE_DISTRIBUTION + } + override fun isProjectDependency(): Boolean { return base.type == Type.PROJECT } diff --git a/sort/src/test/groovy/com/squareup/sort/KotlinSorterSpec.groovy b/sort/src/test/groovy/com/squareup/sort/KotlinSorterSpec.groovy index 099589f..1ef5323 100644 --- a/sort/src/test/groovy/com/squareup/sort/KotlinSorterSpec.groovy +++ b/sort/src/test/groovy/com/squareup/sort/KotlinSorterSpec.groovy @@ -115,6 +115,37 @@ class KotlinSorterSpec extends Specification { )).inOrder() } + def "can sort build script with gradleApi() dep"() { + given: + def buildScript = dir.resolve('build.gradle.kts') + Files.writeString(buildScript, + '''\ + dependencies { + implementation("heart:of-gold:1.0") + api(project(":marvin")) + + implementation("sad:robot:1.0") + api(gradleApi()) + implementation(testFixtures(libs.magic)) + implementation(platform(project(":platform"))) + }'''.stripIndent()) + def sorter = KotlinSorter.of(buildScript) + + expect: + assertThat(trimmedLinesOf(sorter.rewritten())).containsExactlyElementsIn(trimmedLinesOf( + '''\ + dependencies { + api(project(":marvin")) + api(gradleApi()) + + implementation(platform(project(":platform"))) + implementation(testFixtures(libs.magic)) + implementation("heart:of-gold:1.0") + implementation("sad:robot:1.0") + }'''.stripIndent() + )).inOrder() + } + def "can sort build script with four-space tabs"() { given: def buildScript = dir.resolve('build.gradle.kts')