diff --git a/CHANGES.md b/CHANGES.md index cbe48b5235..a94d20dd09 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -11,8 +11,8 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( ## [Unreleased] ### Added -* Maven - Support for formatting shell scripts via [shfmt](https://github.com/mvdan/sh). ([#1998](https://github.com/diffplug/spotless/pull/1998)) -* Maven / Gradle - Support for formatting Java Docs for the Palantir formatter ([#2009](https://github.com/diffplug/spotless/pull/2009)) +* Support for `gofmt` ([#2001](https://github.com/diffplug/spotless/pull/2001)) +* Support for formatting Java Docs for the Palantir formatter ([#2009](https://github.com/diffplug/spotless/pull/2009)) ## [2.44.0] - 2024-01-15 ### Added diff --git a/README.md b/README.md index 495c826df6..3c5d13b179 100644 --- a/README.md +++ b/README.md @@ -78,6 +78,7 @@ lib('antlr4.Antlr4FormatterStep') +'{{yes}} | {{yes}} lib('biome.BiomeStep') +'{{yes}} | {{yes}} | {{no}} | {{no}} |', lib('cpp.ClangFormatStep') +'{{yes}} | {{no}} | {{no}} | {{no}} |', extra('cpp.EclipseFormatterStep') +'{{yes}} | {{yes}} | {{yes}} | {{no}} |', +lib('go.GofmtFormatStep') +'{{yes}} | {{no}} | {{no}} | {{no}} |', lib('gherkin.GherkinUtilsStep') +'{{yes}} | {{yes}} | {{no}} | {{no}} |', extra('groovy.GrEclipseFormatterStep') +'{{yes}} | {{yes}} | {{yes}} | {{no}} |', lib('java.GoogleJavaFormatStep') +'{{yes}} | {{yes}} | {{yes}} | {{no}} |', @@ -131,6 +132,7 @@ lib('yaml.JacksonYamlStep') +'{{yes}} | {{yes}} | [`biome.BiomeStep`](lib/src/main/java/com/diffplug/spotless/biome/BiomeStep.java) | :+1: | :+1: | :white_large_square: | :white_large_square: | | [`cpp.ClangFormatStep`](lib/src/main/java/com/diffplug/spotless/cpp/ClangFormatStep.java) | :+1: | :white_large_square: | :white_large_square: | :white_large_square: | | [`cpp.EclipseFormatterStep`](lib-extra/src/main/java/com/diffplug/spotless/extra/cpp/EclipseFormatterStep.java) | :+1: | :+1: | :+1: | :white_large_square: | +| [`go.GofmtFormatStep`](lib/src/main/java/com/diffplug/spotless/go/GofmtFormatStep.java) | :+1: | :white_large_square: | :white_large_square: | :white_large_square: | | [`gherkin.GherkinUtilsStep`](lib/src/main/java/com/diffplug/spotless/gherkin/GherkinUtilsStep.java) | :+1: | :+1: | :white_large_square: | :white_large_square: | | [`groovy.GrEclipseFormatterStep`](lib-extra/src/main/java/com/diffplug/spotless/extra/groovy/GrEclipseFormatterStep.java) | :+1: | :+1: | :+1: | :white_large_square: | | [`java.GoogleJavaFormatStep`](lib/src/main/java/com/diffplug/spotless/java/GoogleJavaFormatStep.java) | :+1: | :+1: | :+1: | :white_large_square: | diff --git a/gradle/special-tests.gradle b/gradle/special-tests.gradle index f45759294b..8d9004a709 100644 --- a/gradle/special-tests.gradle +++ b/gradle/special-tests.gradle @@ -5,6 +5,7 @@ def special = [ 'Black', 'Buf', 'Clang', + 'gofmt', 'Npm', 'Shfmt' ] diff --git a/lib/src/main/java/com/diffplug/spotless/go/GofmtFormatStep.java b/lib/src/main/java/com/diffplug/spotless/go/GofmtFormatStep.java new file mode 100644 index 0000000000..18e388cf5b --- /dev/null +++ b/lib/src/main/java/com/diffplug/spotless/go/GofmtFormatStep.java @@ -0,0 +1,111 @@ +/* + * Copyright 2024 DiffPlug + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.diffplug.spotless.go; + +import java.io.File; +import java.io.IOException; +import java.io.Serializable; +import java.nio.charset.StandardCharsets; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +import javax.annotation.Nullable; + +import com.diffplug.spotless.ForeignExe; +import com.diffplug.spotless.FormatterFunc; +import com.diffplug.spotless.FormatterStep; +import com.diffplug.spotless.ProcessRunner; + +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; + +/** + * Note: gofmt doesn't have a version flag, because it's part of standard Go distribution. + * So `go` executable can be used to determine base path and version, and path to gofmt can be built from it. + */ +public class GofmtFormatStep { + public static String name() { + return "gofmt"; + } + + public static String defaultVersion() { + return "go1.20.0"; + } + + private final String version; + private final @Nullable String pathToExe; + + private GofmtFormatStep(String version, String pathToExe) { + this.version = version; + this.pathToExe = pathToExe; + } + + public static GofmtFormatStep withVersion(String version) { + return new GofmtFormatStep(version, null); + } + + public GofmtFormatStep withGoExecutable(String pathToExe) { + return new GofmtFormatStep(version, pathToExe); + } + + public FormatterStep create() { + return FormatterStep.createLazy(name(), this::createState, GofmtFormatStep.State::toFunc); + } + + private State createState() throws IOException, InterruptedException { + String howToInstall = "gofmt is a part of standard go distribution. If spotless can't discover it automatically, " + + "you can point Spotless to the go binary with {@code pathToExe('/path/to/go')}"; + final ForeignExe exe = ForeignExe.nameAndVersion("go", version) + .pathToExe(pathToExe) + .versionFlag("version") + .fixCantFind(howToInstall) + .fixWrongVersion( + "You can tell Spotless to use the version you already have with {@code gofmt('{versionFound}')}" + + "or you can install the currently specified Go version, {version}.\n" + howToInstall); + return new State(this, exe); + } + + @SuppressFBWarnings("SE_TRANSIENT_FIELD_NOT_RESTORED") + static class State implements Serializable { + private static final long serialVersionUID = -1825662355363926318L; + // used for up-to-date checks and caching + final String version; + final transient ForeignExe exe; + + public State(GofmtFormatStep step, ForeignExe goExecutable) { + this.version = step.version; + this.exe = Objects.requireNonNull(goExecutable); + } + + String format(ProcessRunner runner, String input, File file) throws IOException, InterruptedException { + final List processArgs = new ArrayList<>(); + String pathToGoBinary = exe.confirmVersionAndGetAbsolutePath(); + Path goBasePath = Path.of(pathToGoBinary).getParent(); + if (goBasePath == null) { + throw new IllegalStateException("Unable to resolve base path of Go installation directory"); + } + String pathToGoFmt = goBasePath.resolve("gofmt").toString(); + processArgs.add(pathToGoFmt); + return runner.exec(input.getBytes(StandardCharsets.UTF_8), processArgs).assertExitZero(StandardCharsets.UTF_8); + } + + FormatterFunc.Closeable toFunc() { + ProcessRunner runner = new ProcessRunner(); + return FormatterFunc.Closeable.of(runner, this::format); + } + } +} diff --git a/plugin-gradle/CHANGES.md b/plugin-gradle/CHANGES.md index 132ad16ebc..ac5be538c7 100644 --- a/plugin-gradle/CHANGES.md +++ b/plugin-gradle/CHANGES.md @@ -3,6 +3,7 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format (starting after version `3.27.0`). ## [Unreleased] +* Support for `gofmt` ([#2001](https://github.com/diffplug/spotless/pull/2001)) ### Added * Maven / Gradle - Support for formatting Java Docs for the Palantir formatter ([#2009](https://github.com/diffplug/spotless/pull/2009)) diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GoExtension.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GoExtension.java new file mode 100644 index 0000000000..145e90c19a --- /dev/null +++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GoExtension.java @@ -0,0 +1,57 @@ +/* + * Copyright 2024 DiffPlug + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.diffplug.gradle.spotless; + +import javax.inject.Inject; + +import com.diffplug.spotless.FormatterStep; +import com.diffplug.spotless.go.GofmtFormatStep; + +public class GoExtension extends FormatExtension { + public static final String NAME = "go"; + + @Inject + public GoExtension(SpotlessExtension spotless) { + super(spotless); + } + + public GofmtConfig gofmt() { + return new GofmtConfig(GofmtFormatStep.defaultVersion()); + } + + public GofmtConfig gofmt(String version) { + return new GofmtConfig(version); + } + + public class GofmtConfig { + GofmtFormatStep stepCfg; + + public GofmtConfig(String version) { + stepCfg = GofmtFormatStep.withVersion(version); + addStep(createStep()); + } + + public GofmtConfig withGoExecutable(String pathToGo) { + stepCfg = stepCfg.withGoExecutable(pathToGo); + replaceStep(createStep()); + return this; + } + + private FormatterStep createStep() { + return stepCfg.create(); + } + } +} diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/SpotlessExtension.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/SpotlessExtension.java index b4c8e3cc03..f02ac28548 100644 --- a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/SpotlessExtension.java +++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/SpotlessExtension.java @@ -223,6 +223,11 @@ public void gherkin(Action closure) { format(GherkinExtension.NAME, GherkinExtension.class, closure); } + public void go(Action closure) { + requireNonNull(closure); + format(GoExtension.NAME, GoExtension.class, closure); + } + /** Configures a custom extension. */ public void format(String name, Action closure) { requireNonNull(name, "name"); diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GoGradleTest.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GoGradleTest.java new file mode 100644 index 0000000000..94bd345854 --- /dev/null +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GoGradleTest.java @@ -0,0 +1,42 @@ +/* + * Copyright 2020-2024 DiffPlug + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.diffplug.gradle.spotless; + +import java.io.IOException; + +import org.junit.jupiter.api.Test; + +import com.diffplug.spotless.tag.GofmtTest; + +@GofmtTest +class GoGradleTest extends GradleIntegrationHarness { + @Test + void gofmt() throws IOException { + setFile("build.gradle").toLines( + "plugins {", + " id 'com.diffplug.spotless'", + "}", + "spotless {", + " go {", + " target 'src/**/*.go'", + " gofmt(\"go1.21.5\")", + " }", + "}"); + setFile("src/test.go").toResource("go/gofmt/go.dirty"); + gradleRunner().withArguments("spotlessApply").build(); + assertFile("src/test.go").sameAsResource("go/gofmt/go.clean"); + } +} diff --git a/plugin-maven/CHANGES.md b/plugin-maven/CHANGES.md index b95f2e998e..d1f158d533 100644 --- a/plugin-maven/CHANGES.md +++ b/plugin-maven/CHANGES.md @@ -5,7 +5,8 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( ## [Unreleased] ### Added * Support for formatting shell scripts via [shfmt](https://github.com/mvdan/sh). ([#1998](https://github.com/diffplug/spotless/issues/1998)) -* Maven / Gradle - Support for formatting Java Docs for the Palantir formatter ([#2009](https://github.com/diffplug/spotless/pull/2009)) +* Support for `gofmt` ([#2001](https://github.com/diffplug/spotless/pull/2001)) +* Support for formatting Java Docs for the Palantir formatter ([#2009](https://github.com/diffplug/spotless/pull/2009)) ## [2.42.0] - 2024-01-15 ### Added diff --git a/plugin-maven/README.md b/plugin-maven/README.md index 7785412a32..97128768d9 100644 --- a/plugin-maven/README.md +++ b/plugin-maven/README.md @@ -54,6 +54,7 @@ user@machine repo % mvn spotless:check - [JSON](#json) ([simple](#simple), [gson](#gson), [jackson](#jackson), [Biome](#biome), [jsonPatch](#jsonPatch)) - [YAML](#yaml) - [Gherkin](#gherkin) + - [Go](#go) - Multiple languages - [Prettier](#prettier) ([plugins](#prettier-plugins), [npm detection](#npm-detection), [`.npmrc` detection](#npmrc-detection), [caching `npm install` results](#caching-results-of-npm-install)) - [eclipse web tools platform](#eclipse-web-tools-platform) @@ -1048,6 +1049,33 @@ Uses a Gherkin pretty-printer that optionally allows configuring the number of s ``` +## Go + +- `com.diffplug.spotless.maven.FormatterFactory.addStepFactory(FormatterStepFactory)` [code](https://github.com/diffplug/spotless/blob/main/plugin-maven/src/main/java/com/diffplug/spotless/maven/go/Go.java) + +```xml + + + + src/**/*.go + + + + + +``` + +### gofmt + +Standard Go formatter, part of Go distribution. + +```xml + + go1.25.1 + /opt/sdks/go1.25.1/bin/go + +``` + ## Prettier [homepage](https://prettier.io/). [changelog](https://github.com/prettier/prettier/blob/master/CHANGELOG.md). [official plugins](https://prettier.io/docs/en/plugins.html#official-plugins). [community plugins](https://prettier.io/docs/en/plugins.html#community-plugins). Prettier is a formatter that can format almost every anything - JavaScript, JSX, Angular, Vue, Flow, TypeScript, CSS, Less, SCSS, HTML, JSON, GraphQL, Markdown (including GFM and MDX), and YAML. It can format even more [using plugins](https://prettier.io/docs/en/plugins.html) (PHP, Ruby, Swift, XML, Apex, Elm, Java (!!), Kotlin, pgSQL, .properties, solidity, svelte, toml, shellscript, ...). diff --git a/plugin-maven/src/main/java/com/diffplug/spotless/maven/AbstractSpotlessMojo.java b/plugin-maven/src/main/java/com/diffplug/spotless/maven/AbstractSpotlessMojo.java index 5a4a1f6742..0528cccbdb 100644 --- a/plugin-maven/src/main/java/com/diffplug/spotless/maven/AbstractSpotlessMojo.java +++ b/plugin-maven/src/main/java/com/diffplug/spotless/maven/AbstractSpotlessMojo.java @@ -62,6 +62,7 @@ import com.diffplug.spotless.maven.generic.Format; import com.diffplug.spotless.maven.generic.LicenseHeader; import com.diffplug.spotless.maven.gherkin.Gherkin; +import com.diffplug.spotless.maven.go.Go; import com.diffplug.spotless.maven.groovy.Groovy; import com.diffplug.spotless.maven.incremental.UpToDateChecker; import com.diffplug.spotless.maven.incremental.UpToDateChecking; @@ -188,6 +189,9 @@ public abstract class AbstractSpotlessMojo extends AbstractMojo { @Parameter private Gherkin gherkin; + @Parameter + private Go go; + @Parameter(property = "spotlessFiles") private String filePatterns; @@ -362,7 +366,7 @@ private FileLocator getFileLocator() { } private List getFormatterFactories() { - return Stream.concat(formats.stream(), Stream.of(groovy, java, scala, kotlin, cpp, typescript, javascript, antlr4, pom, sql, python, markdown, json, shell, yaml, gherkin)) + return Stream.concat(formats.stream(), Stream.of(groovy, java, scala, kotlin, cpp, typescript, javascript, antlr4, pom, sql, python, markdown, json, shell, yaml, gherkin, go)) .filter(Objects::nonNull) .collect(toList()); } diff --git a/plugin-maven/src/main/java/com/diffplug/spotless/maven/go/Go.java b/plugin-maven/src/main/java/com/diffplug/spotless/maven/go/Go.java new file mode 100644 index 0000000000..bb26bd0355 --- /dev/null +++ b/plugin-maven/src/main/java/com/diffplug/spotless/maven/go/Go.java @@ -0,0 +1,39 @@ +/* + * Copyright 2024 DiffPlug + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.diffplug.spotless.maven.go; + +import java.util.Collections; +import java.util.Set; + +import org.apache.maven.project.MavenProject; + +import com.diffplug.spotless.maven.FormatterFactory; + +public class Go extends FormatterFactory { + @Override + public Set defaultIncludes(MavenProject project) { + return Collections.emptySet(); + } + + @Override + public String licenseHeaderDelimiter() { + return null; + } + + public void addGofmt(Gofmt gofmt) { + addStepFactory(gofmt); + } +} diff --git a/plugin-maven/src/main/java/com/diffplug/spotless/maven/go/Gofmt.java b/plugin-maven/src/main/java/com/diffplug/spotless/maven/go/Gofmt.java new file mode 100644 index 0000000000..aaa30efb4f --- /dev/null +++ b/plugin-maven/src/main/java/com/diffplug/spotless/maven/go/Gofmt.java @@ -0,0 +1,41 @@ +/* + * Copyright 2024 DiffPlug + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.diffplug.spotless.maven.go; + +import org.apache.maven.plugins.annotations.Parameter; + +import com.diffplug.spotless.FormatterStep; +import com.diffplug.spotless.go.GofmtFormatStep; +import com.diffplug.spotless.maven.FormatterStepConfig; +import com.diffplug.spotless.maven.FormatterStepFactory; + +public class Gofmt implements FormatterStepFactory { + + @Parameter + private String version; + + @Parameter + private String goExecutablePath; + + @Override + public FormatterStep newFormatterStep(FormatterStepConfig config) { + GofmtFormatStep step = GofmtFormatStep.withVersion(version == null ? GofmtFormatStep.defaultVersion() : version); + if (goExecutablePath != null) { + step = step.withGoExecutable(goExecutablePath); + } + return step.create(); + } +} diff --git a/plugin-maven/src/test/java/com/diffplug/spotless/maven/MavenIntegrationHarness.java b/plugin-maven/src/test/java/com/diffplug/spotless/maven/MavenIntegrationHarness.java index 6b629e3596..9e2e70c60f 100644 --- a/plugin-maven/src/test/java/com/diffplug/spotless/maven/MavenIntegrationHarness.java +++ b/plugin-maven/src/test/java/com/diffplug/spotless/maven/MavenIntegrationHarness.java @@ -191,6 +191,10 @@ protected void writePomWithGherkinSteps(String... steps) throws IOException { writePom(groupWithSteps("gherkin", including("**/*.feature"), steps)); } + protected void writePomWithGoSteps(String... steps) throws IOException { + writePom(groupWithSteps("go", including("**/*.go"), steps)); + } + protected void writePom(String... configuration) throws IOException { writePom(null, configuration, null, null); } diff --git a/plugin-maven/src/test/java/com/diffplug/spotless/maven/go/GofmtTest.java b/plugin-maven/src/test/java/com/diffplug/spotless/maven/go/GofmtTest.java new file mode 100644 index 0000000000..5cf4398f70 --- /dev/null +++ b/plugin-maven/src/test/java/com/diffplug/spotless/maven/go/GofmtTest.java @@ -0,0 +1,32 @@ +/* + * Copyright 2024 DiffPlug + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.diffplug.spotless.maven.go; + +import org.junit.jupiter.api.Test; + +import com.diffplug.spotless.maven.MavenIntegrationHarness; + +@com.diffplug.spotless.tag.GofmtTest +public class GofmtTest extends MavenIntegrationHarness { + @Test + void testGofmt() throws Exception { + writePomWithGoSteps("go1.21.5"); + + setFile("src/main/go/example.go").toResource("go/gofmt/go.dirty"); + mavenRunner().withArguments("spotless:apply").runNoError(); + assertFile("src/main/go/example.go").sameAsResource("go/gofmt/go.clean"); + } +} diff --git a/testlib/src/main/java/com/diffplug/spotless/tag/GofmtTest.java b/testlib/src/main/java/com/diffplug/spotless/tag/GofmtTest.java new file mode 100644 index 0000000000..6228a84895 --- /dev/null +++ b/testlib/src/main/java/com/diffplug/spotless/tag/GofmtTest.java @@ -0,0 +1,30 @@ +/* + * Copyright 2021-2024 DiffPlug + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.diffplug.spotless.tag; + +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import org.junit.jupiter.api.Tag; + +@Target({TYPE, METHOD}) +@Retention(RUNTIME) +@Tag("gofmt") +public @interface GofmtTest {} diff --git a/testlib/src/main/resources/go/gofmt/go.clean b/testlib/src/main/resources/go/gofmt/go.clean new file mode 100644 index 0000000000..321185cd76 --- /dev/null +++ b/testlib/src/main/resources/go/gofmt/go.clean @@ -0,0 +1,14 @@ +package main + +import "fmt" + +func split(sum int) (x int, y int) { + x = sum * 4 / 9 + y = sum - x + return +} + +func main() { + fmt.Println( + split(17)) +} diff --git a/testlib/src/main/resources/go/gofmt/go.dirty b/testlib/src/main/resources/go/gofmt/go.dirty new file mode 100644 index 0000000000..f1f9adaca7 --- /dev/null +++ b/testlib/src/main/resources/go/gofmt/go.dirty @@ -0,0 +1,14 @@ +package main + +import "fmt" + +func split (sum int) (x int , y int) { + x = sum * 4 / 9 + y = sum - x + return +} + +func main() { + fmt.Println( + split(17)) +} diff --git a/testlib/src/test/java/com/diffplug/spotless/go/GofmtFormatStepTest.java b/testlib/src/test/java/com/diffplug/spotless/go/GofmtFormatStepTest.java new file mode 100644 index 0000000000..c9158088fa --- /dev/null +++ b/testlib/src/test/java/com/diffplug/spotless/go/GofmtFormatStepTest.java @@ -0,0 +1,33 @@ +/* + * Copyright 2024 DiffPlug + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.diffplug.spotless.go; + +import org.junit.jupiter.api.Test; + +import com.diffplug.spotless.ResourceHarness; +import com.diffplug.spotless.StepHarness; +import com.diffplug.spotless.tag.GofmtTest; + +@GofmtTest +public class GofmtFormatStepTest extends ResourceHarness { + @Test + void test() { + try (StepHarness harness = StepHarness.forStep(GofmtFormatStep.withVersion("go1.21.5").create())) { + harness.testResource("go/gofmt/go.dirty", "go/gofmt/go.clean") + .close(); + } + } +}