Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
@file:Suppress("UnstableApiUsage")
import java.io.File
import org.gradle.api.file.RelativePath

plugins {
id("org.openrewrite.build.recipe-library") version "latest.release"
id("org.openrewrite.build.moderne-source-available-license") version "latest.release"
Expand All @@ -25,6 +28,7 @@ dependencies {
provided("org.openrewrite:rewrite-kotlin:${rewriteVersion}")
provided("org.openrewrite:rewrite-csharp:${rewriteVersion}")
provided("org.openrewrite:rewrite-python:${rewriteVersion}")
provided("org.openrewrite:rewrite-go:${rewriteVersion}")

annotationProcessor("org.openrewrite:rewrite-templating:${rewriteVersion}")
implementation("org.openrewrite:rewrite-templating:${rewriteVersion}")
Expand All @@ -47,8 +51,43 @@ dependencies {
testRuntimeOnly("com.google.code.findbugs:jsr305:latest.release")
}

val rewriteGoRpcClasspath = configurations.detachedConfiguration(
dependencies.create("org.openrewrite:rewrite-go:${rewriteVersion}")
)
val rewriteGoJar = rewriteGoRpcClasspath.elements.map { artifacts ->
artifacts.map { it.asFile }.single { it.name.startsWith("rewrite-go-") && it.extension == "jar" }
}
val rewriteGoSourceDir = layout.buildDirectory.dir("rewrite-go-src")
val rewriteGoRpcDir = layout.buildDirectory.dir("rewrite-go-rpc")
val rewriteGoRpcBinary = rewriteGoRpcDir.map { it.file("rewrite-go-rpc") }

val installRewriteGoRpc by tasks.registering(Exec::class) {
inputs.file(rewriteGoJar)
outputs.file(rewriteGoRpcBinary)

doFirst {
delete(rewriteGoSourceDir)
copy {
from(zipTree(rewriteGoJar.get())) {
include("META-INF/rewrite-go/src/**")
eachFile {
relativePath = RelativePath(true, *relativePath.segments.drop(3).toTypedArray())
}
includeEmptyDirs = false
}
into(rewriteGoSourceDir)
}
rewriteGoRpcDir.get().asFile.mkdirs()
}

workingDir(rewriteGoSourceDir)
commandLine("go", "build", "-o", rewriteGoRpcBinary.get().asFile.absolutePath, "./cmd/rpc")
}

tasks.withType<Test> {
jvmArgs("-Xmx1g", "-Xms512m")
dependsOn(installRewriteGoRpc)
environment("PATH", rewriteGoRpcDir.get().asFile.absolutePath + File.pathSeparator + System.getenv("PATH"))
}

tasks.withType<JavaCompile> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import org.openrewrite.test.RecipeSpec;
import org.openrewrite.test.RewriteTest;

import static org.openrewrite.golang.Assertions.go;
import static org.openrewrite.groovy.Assertions.groovy;
import static org.openrewrite.java.Assertions.java;
import static org.openrewrite.javascript.Assertions.typescript;
Expand Down Expand Up @@ -288,4 +289,35 @@ def test(a):
)
);
}

@Test
void collapseIdenticalBranchesGo() {
rewriteRun(
//language=go
go(
"""
package main

func applyPromotion(eligible bool) {
if eligible {
applyDiscount()
} else {
applyDiscount()
}
}

func applyDiscount() {}
""",
"""
package main

func applyPromotion(eligible bool) {
applyDiscount()
}

func applyDiscount() {}
"""
)
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import org.openrewrite.test.RecipeSpec;
import org.openrewrite.test.RewriteTest;

import static org.openrewrite.golang.Assertions.go;
import static org.openrewrite.groovy.Assertions.groovy;
import static org.openrewrite.java.Assertions.java;
import static org.openrewrite.javascript.Assertions.typescript;
Expand Down Expand Up @@ -340,4 +341,47 @@ def test(a, b):
)
);
}

@Test
void mergeNestedIfsGo() {
rewriteRun(
//language=go
go(
"""
package main

type User struct {
Active bool
EmailVerified bool
}

func welcome(user User) {
if user.Active {
if user.EmailVerified {
sendWelcome(user)
}
}
}

func sendWelcome(user User) {}
""",
"""
package main

type User struct {
Active bool
EmailVerified bool
}

func welcome(user User) {
if user.Active && user.EmailVerified {
sendWelcome(user)
}
}

func sendWelcome(user User) {}
"""
)
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import org.openrewrite.test.RecipeSpec;
import org.openrewrite.test.RewriteTest;

import static org.openrewrite.golang.Assertions.go;
import static org.openrewrite.groovy.Assertions.groovy;
import static org.openrewrite.java.Assertions.java;
import static org.openrewrite.javascript.Assertions.typescript;
Expand Down Expand Up @@ -321,4 +322,53 @@ def test(a, b):
)
);
}

@Test
void mergeIdenticalBranchesGo() {
rewriteRun(
//language=go
go(
"""
package main

type Order struct {
Expedited bool
GiftWrapped bool
}

func route(order Order) {
if order.Expedited {
queueFastLane(order)
} else if order.GiftWrapped {
queueFastLane(order)
} else {
queueStandard(order)
}
}

func queueFastLane(order Order) {}
func queueStandard(order Order) {}
""",
"""
package main

type Order struct {
Expedited bool
GiftWrapped bool
}

func route(order Order) {
if order.Expedited || order.GiftWrapped {
queueFastLane(order)
} else {
queueStandard(order)
}
}

func queueFastLane(order Order) {}
func queueStandard(order Order) {}
"""
)
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import org.openrewrite.test.RecipeSpec;
import org.openrewrite.test.RewriteTest;

import static org.openrewrite.golang.Assertions.go;
import static org.openrewrite.groovy.Assertions.groovy;
import static org.openrewrite.java.Assertions.java;
import static org.openrewrite.javascript.Assertions.typescript;
Expand Down Expand Up @@ -286,4 +287,35 @@ void removeDuplicateElseIfPython() {
)
);
}

@Test
void removeDuplicateElseIfGo() {
rewriteRun(
//language=go
go(
"""
package main

func deliveryStatus(paid bool, shipped bool) string {
if paid {
return "ready"
} else if paid {
return "duplicate"
}
return "waiting"
}
""",
"""
package main

func deliveryStatus(paid bool, shipped bool) string {
if paid {
return "ready"
}
return "waiting"
}
"""
)
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import org.openrewrite.test.RecipeSpec;
import org.openrewrite.test.RewriteTest;

import static org.openrewrite.golang.Assertions.go;
import static org.openrewrite.groovy.Assertions.groovy;
import static org.openrewrite.java.Assertions.java;
import static org.openrewrite.javascript.Assertions.typescript;
Expand Down Expand Up @@ -233,4 +234,40 @@ void removeSelfAssignmentPython() {
)
);
}

@Test
void removeSelfAssignmentGo() {
rewriteRun(
//language=go
go(
"""
package main

type Profile struct {
Name string
}

func normalize(profile *Profile) {
profile.Name = profile.Name
trimName(profile)
}

func trimName(profile *Profile) {}
""",
"""
package main

type Profile struct {
Name string
}

func normalize(profile *Profile) {
trimName(profile)
}

func trimName(profile *Profile) {}
"""
)
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import org.openrewrite.test.RecipeSpec;
import org.openrewrite.test.RewriteTest;

import static org.openrewrite.golang.Assertions.go;
import static org.openrewrite.groovy.Assertions.groovy;
import static org.openrewrite.java.Assertions.java;
import static org.openrewrite.javascript.Assertions.typescript;
Expand Down Expand Up @@ -279,4 +280,34 @@ def test():
)
);
}

@Test
void removeOverwrittenMapIndexGo() {
rewriteRun(
//language=go
go(
"""
package main

func recordStatus(counts map[string]int) {
counts["pending"] = 1
counts["pending"] = 2
publish(counts)
}

func publish(counts map[string]int) {}
""",
"""
package main

func recordStatus(counts map[string]int) {
counts["pending"] = 2
publish(counts)
}

func publish(counts map[string]int) {}
"""
)
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import org.openrewrite.test.RecipeSpec;
import org.openrewrite.test.RewriteTest;

import static org.openrewrite.golang.Assertions.go;
import static org.openrewrite.groovy.Assertions.groovy;
import static org.openrewrite.java.Assertions.java;
import static org.openrewrite.javascript.Assertions.typescript;
Expand Down Expand Up @@ -334,4 +335,27 @@ void simplifyLogicalAndPython() {
)
);
}

@Test
void simplifyLogicalAndGo() {
rewriteRun(
//language=go
go(
"""
package main

func shouldSend(enabled bool) bool {
return enabled && enabled
}
""",
"""
package main

func shouldSend(enabled bool) bool {
return enabled
}
"""
)
);
}
}
Loading