Skip to content
Merged
Show file tree
Hide file tree
Changes from 10 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
7 changes: 7 additions & 0 deletions changelog/@unreleased/pr-988.v2.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
type: improvement
improvement:
description: >
Run `./gradlew formatDiff` to reformat the relevant sections of any uncommitted changed Java files
(relies on `git diff -U0 HEAD` under the hood)
links:
- https://github.com/palantir/gradle-baseline/pull/988
Original file line number Diff line number Diff line change
Expand Up @@ -18,18 +18,22 @@

import com.diffplug.gradle.spotless.SpotlessExtension;
import com.diffplug.spotless.FormatterFunc;
import com.palantir.javaformat.java.FormatDiff;
import com.palantir.javaformat.java.Formatter;
import com.palantir.javaformat.java.JavaFormatterOptions;
import com.palantir.javaformat.java.JavaFormatterOptions.Style;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import org.gradle.api.DefaultTask;
import org.gradle.api.GradleException;
import org.gradle.api.Project;
import org.gradle.api.Task;
import org.gradle.api.file.ConfigurableFileCollection;
import org.gradle.api.plugins.JavaBasePlugin;
import org.gradle.api.plugins.JavaPluginConvention;
import org.gradle.api.tasks.TaskAction;
import org.gradle.api.tasks.TaskProvider;
import org.gradle.api.tasks.compile.JavaCompile;

Expand All @@ -45,6 +49,8 @@ public void apply(Project project) {
this.project = project;

project.getPluginManager().withPlugin("java", plugin -> {
project.getTasks().register("formatDiff", FormatDiffTask.class);

project.getPluginManager().apply("com.diffplug.gradle.spotless");
Path eclipseXml = eclipseConfigFile(project);

Expand Down Expand Up @@ -87,7 +93,9 @@ public void apply(Project project) {
spotlessExtension.setEnforceCheck(false);

// necessary because SpotlessPlugin creates tasks in an afterEvaluate block
TaskProvider<Task> formatTask = project.getTasks().register("format");
TaskProvider<Task> formatTask = project.getTasks().register("format", task -> {
task.setGroup("Formatting");
});
project.afterEvaluate(p -> {
Task spotlessJava = project.getTasks().getByName("spotlessJava");
Task spotlessApply = project.getTasks().getByName("spotlessApply");
Expand All @@ -107,6 +115,18 @@ public void apply(Project project) {
});
}

public static class FormatDiffTask extends DefaultTask {
FormatDiffTask() {
setDescription("Format only chunks of files that appear in git diff");
setGroup("Formatting");
}

@TaskAction
public final void formatDiff() throws IOException, InterruptedException {
FormatDiff.formatDiff(getProject().getProjectDir().toPath());
}
}

static boolean eclipseFormattingEnabled(Project project) {
return project.hasProperty(ECLIPSE_FORMATTING);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -221,4 +221,41 @@ class BaselineFormatIntegrationTest extends AbstractPluginTest {
BuildResult result = with('spotlessJavaCheck').build()
result.task(":spotlessJava").outcome == TaskOutcome.SUCCESS
}

def 'formatDiff updates only lines changed in git diff'() {
when:
buildFile << standardBuildFile
"git init".execute(Collections.emptyList(), projectDir).waitFor()
"git config user.name Foo".execute(Collections.emptyList(), projectDir).waitFor()
"git config user.email [email protected]".execute(Collections.emptyList(), projectDir).waitFor()

file('src/main/java/Main.java') << '''
class Main {
public static void crazyExistingFormatting ( String... args) {

}
}
'''.stripIndent()

"git add .".execute(Collections.emptyList(), projectDir).waitFor()
"git commit -m Commit".execute(Collections.emptyList(), projectDir).waitFor()

file('src/main/java/Main.java').text = '''
class Main {
public static void crazyExistingFormatting ( String... args) {
System.out.println("Reformat me please");
}
}
'''.stripIndent()

then:
with('formatDiff').build()
file('src/main/java/Main.java').text == '''
class Main {
public static void crazyExistingFormatting ( String... args) {
System.out.println("Reformat me please");
}
}
'''.stripIndent()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,11 @@
class MultilineStringConstant {

// NON-NLS comments are required for i18n, it's important they are kept with their strings.
private static final String MULTIPLE_LINE_NON_NLS = "field_0,"
+ //$NON-NLS-1$
"field_1,"
+ //$NON-NLS-1$
"field_2,"
+ //$NON-NLS-1$
"field_3,"
+ //$NON-NLS-1$
"field_4"; //$NON-NLS-1$
private static final String MULTIPLE_LINE_NON_NLS = "field_0," //$NON-NLS-1$
+ "field_1," //$NON-NLS-1$
+ "field_2," //$NON-NLS-1$
+ "field_3," //$NON-NLS-1$
+ "field_4"; //$NON-NLS-1$

private static final String MULTIPLE_LINE_NO_COMMENT =
"field_0," + "field_1," + "field_2," + "field_3," + "field_4";
Expand Down
2 changes: 1 addition & 1 deletion versions.props
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ com.google.errorprone:error_prone_test_helpers = 2.3.3
com.google.guava:guava = 27.1-jre
com.netflix.nebula:nebula-dependency-recommender = 9.0.0
com.palantir.configurationresolver:gradle-configuration-resolver-plugin = 0.4.0
com.palantir.javaformat:* = 0.2.7
com.palantir.javaformat:* = 0.2.8
com.palantir.safe-logging:* = 1.11.0
org.apache.maven.shared:maven-dependency-analyzer = 1.11.1
org.github.ngbinh.scalastyle:gradle-scalastyle-plugin_2.11 = 1.0.1
Expand Down