Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reuse configs for GroovyExtension and GroovyGradleExtension #1892

Merged
merged 1 commit into from
Nov 20, 2023
Merged
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
/*
* Copyright 2023 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 static com.diffplug.gradle.spotless.PluginGradlePreconditions.requireElementsNonNull;

import java.util.Map;
import java.util.Objects;

import org.gradle.api.Project;

import com.diffplug.spotless.extra.EquoBasedStepBuilder;
import com.diffplug.spotless.extra.groovy.GrEclipseFormatterStep;
import com.diffplug.spotless.java.ImportOrderStep;

abstract class BaseGroovyExtension extends FormatExtension {
protected BaseGroovyExtension(SpotlessExtension spotless) {
super(spotless);
}

public void importOrder(String... importOrder) {
addStep(ImportOrderStep.forGroovy().createFrom(importOrder));
}

public void importOrderFile(Object importOrderFile) {
Objects.requireNonNull(importOrderFile);
addStep(ImportOrderStep.forGroovy().createFrom(getProject().file(importOrderFile)));
}

public GrEclipseConfig greclipse() {
return greclipse(GrEclipseFormatterStep.defaultVersion());
}

public GrEclipseConfig greclipse(String version) {
return new GrEclipseConfig(version, this);
}

public static class GrEclipseConfig {
private final EquoBasedStepBuilder builder;
private final FormatExtension extension;

private GrEclipseConfig(String version, FormatExtension extension) {
this.extension = extension;
builder = GrEclipseFormatterStep.createBuilder(extension.provisioner());
builder.setVersion(version);
extension.addStep(builder.build());
}

public void configFile(Object... configFiles) {
requireElementsNonNull(configFiles);
Project project = extension.getProject();
builder.setPreferences(project.files(configFiles).getFiles());
extension.replaceStep(builder.build());
}

public GrEclipseConfig withP2Mirrors(Map<String, String> mirrors) {
builder.setP2Mirrors(mirrors);
extension.replaceStep(builder.build());
return this;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,36 +15,26 @@
*/
package com.diffplug.gradle.spotless;

import static com.diffplug.gradle.spotless.PluginGradlePreconditions.requireElementsNonNull;

import java.util.Map;
import java.util.Objects;

import javax.inject.Inject;

import org.gradle.api.GradleException;
import org.gradle.api.Project;
import org.gradle.api.internal.plugins.DslObject;
import org.gradle.api.plugins.GroovyBasePlugin;
import org.gradle.api.tasks.GroovySourceDirectorySet;
import org.gradle.api.tasks.GroovySourceSet;
import org.gradle.util.GradleVersion;

import com.diffplug.spotless.extra.EquoBasedStepBuilder;
import com.diffplug.spotless.extra.groovy.GrEclipseFormatterStep;
import com.diffplug.spotless.generic.LicenseHeaderStep;
import com.diffplug.spotless.java.ImportOrderStep;

public class GroovyExtension extends FormatExtension implements HasBuiltinDelimiterForLicense, JvmLang {
public class GroovyExtension extends BaseGroovyExtension implements HasBuiltinDelimiterForLicense, JvmLang {
Comment on lines -38 to +29
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we implement HasBuiltinDelimiterForLicense for GroovyGradleExtension? If so we can move this into BaseGroovyExtension as well.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's pretty hard to find the regex for Groovy, I think it's really hard to find it for GroovyGradle, as anything could be at the top. IMO hiding this regex from the user is counterproductive because too likely that they will end up needing to change something about it.

private boolean excludeJava = false;
static final String NAME = "groovy";

@Inject
public GroovyExtension(SpotlessExtension spotless) {
super(spotless);
}

boolean excludeJava = false;

/** Excludes .java files, to focus on only .groovy files. */
public void excludeJava() {
excludeJava(true);
Expand All @@ -65,48 +55,6 @@ public LicenseHeaderConfig licenseHeaderFile(Object licenseHeaderFile) {
return licenseHeaderFile(licenseHeaderFile, JavaExtension.LICENSE_HEADER_DELIMITER);
}

public void importOrder(String... importOrder) {
addStep(ImportOrderStep.forGroovy().createFrom(importOrder));
}

public void importOrderFile(Object importOrderFile) {
Objects.requireNonNull(importOrderFile);
addStep(ImportOrderStep.forGroovy().createFrom(getProject().file(importOrderFile)));
}

public GrEclipseConfig greclipse() {
return greclipse(GrEclipseFormatterStep.defaultVersion());
}

public GrEclipseConfig greclipse(String version) {
return new GrEclipseConfig(version, this);
}

public static class GrEclipseConfig {
private final EquoBasedStepBuilder builder;
private final FormatExtension extension;

GrEclipseConfig(String version, FormatExtension extension) {
this.extension = extension;
builder = GrEclipseFormatterStep.createBuilder(extension.provisioner());
builder.setVersion(version);
extension.addStep(builder.build());
}

public void configFile(Object... configFiles) {
requireElementsNonNull(configFiles);
Project project = extension.getProject();
builder.setPreferences(project.files(configFiles).getFiles());
extension.replaceStep(builder.build());
}

public GrEclipseConfig withP2Mirrors(Map<String, String> mirrors) {
builder.setP2Mirrors(mirrors);
extension.replaceStep(builder.build());
return this;
}
}

/** If the user hasn't specified the files yet, we'll assume he/she means all of the groovy files. */
@Override
protected void setupTask(SpotlessTask task) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2016-2020 DiffPlug
* Copyright 2016-2023 DiffPlug
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand All @@ -15,14 +15,9 @@
*/
package com.diffplug.gradle.spotless;

import java.util.Objects;

import javax.inject.Inject;

import com.diffplug.spotless.extra.groovy.GrEclipseFormatterStep;
import com.diffplug.spotless.java.ImportOrderStep;

public class GroovyGradleExtension extends FormatExtension {
public class GroovyGradleExtension extends BaseGroovyExtension {
private static final String GRADLE_FILE_EXTENSION = "*.gradle";
static final String NAME = "groovyGradle";

Expand All @@ -31,23 +26,6 @@ public GroovyGradleExtension(SpotlessExtension spotless) {
super(spotless);
}

public void importOrder(String... importOrder) {
addStep(ImportOrderStep.forGroovy().createFrom(importOrder));
}

public void importOrderFile(Object importOrderFile) {
Objects.requireNonNull(importOrderFile);
addStep(ImportOrderStep.forGroovy().createFrom(getProject().file(importOrderFile)));
}

public GroovyExtension.GrEclipseConfig greclipse() {
return new GroovyExtension.GrEclipseConfig(GrEclipseFormatterStep.defaultVersion(), this);
}

public GroovyExtension.GrEclipseConfig greclipse(String version) {
return new GroovyExtension.GrEclipseConfig(version, this);
}

@Override
protected void setupTask(SpotlessTask task) {
if (target == null) {
Expand Down
Loading