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

Kotlin support in Maven plugin #223

Merged
merged 9 commits into from
Mar 13, 2018
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
import com.diffplug.spotless.maven.generic.Format;
import com.diffplug.spotless.maven.generic.LicenseHeader;
import com.diffplug.spotless.maven.java.Java;
import com.diffplug.spotless.maven.kotlin.Kotlin;
import com.diffplug.spotless.maven.scala.Scala;

public abstract class AbstractSpotlessMojo extends AbstractMojo {
Expand Down Expand Up @@ -85,6 +86,9 @@ public abstract class AbstractSpotlessMojo extends AbstractMojo {
@Parameter
private Scala scala;

@Parameter
private Kotlin kotlin;

protected abstract void process(List<File> files, Formatter formatter) throws MojoExecutionException;

@Override
Expand Down Expand Up @@ -142,7 +146,7 @@ private FileLocator getFileLocator() {
}

private List<FormatterFactory> getFormatterFactories() {
return Stream.of(format, java, scala)
return Stream.of(format, java, scala, kotlin)
.filter(Objects::nonNull)
.collect(toList());
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/*
* Copyright 2016 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.kotlin;

import static com.diffplug.common.collect.Sets.newHashSet;
import static java.util.Collections.unmodifiableSet;

import java.util.Set;

import com.diffplug.spotless.maven.FormatterFactory;

public class Kotlin extends FormatterFactory {

private static final Set<String> DEFAULT_INCLUDES = unmodifiableSet(newHashSet("src/main/kotlin/**/*.kt",
"src/test/kotlin/**/*.kt"));
Copy link
Member

Choose a reason for hiding this comment

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

Feel free to ignore this, but I would've written as ImmutableSet.of("src/main/.... ImmutableSet gives compile-warnings if you accidentally call modifier-methods like put, and it's a little faster since it doesn't have to worry about the modification usecase.


private static final String LICENSE_HEADER_DELIMITER = "(package |@file)";

@Override
public Set<String> defaultIncludes() {
return DEFAULT_INCLUDES;
}

@Override
public String licenseHeaderDelimiter() {
return LICENSE_HEADER_DELIMITER;
}

public void addKtlint(Ktlint ktlint) {
addStepFactory(ktlint);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/*
* Copyright 2016 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.kotlin;

import org.apache.maven.plugins.annotations.Parameter;

import com.diffplug.spotless.FormatterStep;
import com.diffplug.spotless.kotlin.KtLintStep;
import com.diffplug.spotless.maven.FormatterStepConfig;
import com.diffplug.spotless.maven.FormatterStepFactory;

public class Ktlint implements FormatterStepFactory {

@Parameter
private String version;

@Override
public FormatterStep newFormatterStep(FormatterStepConfig config) {
String ktlintVersion = version != null ? version : KtLintStep.defaultVersion();
return KtLintStep.create(ktlintVersion, config.getProvisioner());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,10 @@ protected void writePomWithScalaSteps(String... steps) throws IOException {
writePom(groupWithSteps("scala", steps));
}

protected void writePomWithKotlinSteps(String... steps) throws IOException {
writePom(groupWithSteps("kotlin", steps));
}

protected void writePom(String... configuration) throws IOException {
writePom(null, configuration);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@

public class LicenseHeaderTest extends MavenIntegrationTest {
private static final String KEY_LICENSE = "license/TestLicense";
private static final String KOTLIN_LICENSE_HEADER = "// Hello, I'm Kotlin license header";

@Test
public void fromFileJava() throws Exception {
Expand Down Expand Up @@ -79,6 +80,23 @@ public void fromContentFormat() throws Exception {
runTest();
}

@Test
public void fromContentKotlin() throws Exception {
writePomWithKotlinSteps(
"<licenseHeader>",
" <content>",
KOTLIN_LICENSE_HEADER,
" </content>",
"</licenseHeader>");

String path = "src/main/kotlin/test.kt";
String noLicenseHeader = getTestResource("kotlin/licenseheader/KotlinCodeWithoutHeader.test");

setFile(path).toContent(noLicenseHeader);
mavenRunner().withArguments("spotless:apply").runNoError();
assertFile(path).hasContent(KOTLIN_LICENSE_HEADER + '\n' + noLicenseHeader);
}

private void runTest() throws Exception {
String path = "src/main/java/test.java";
setFile(path).toResource("license/MissingLicense.test");
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/*
* Copyright 2016 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.kotlin;

import org.junit.Test;

import com.diffplug.spotless.maven.MavenIntegrationTest;

public class KtLintTest extends MavenIntegrationTest {

@Test
public void testKtlint() throws Exception {
writePomWithKotlinSteps("<ktlint/>");

String path1 = "src/main/kotlin/main1.kt";
String path2 = "src/main/kotlin/main2.kt";

setFile(path1).toResource("kotlin/ktlint/basic.dirty");
setFile(path2).toResource("kotlin/ktlint/basic.dirty");

mavenRunner().withArguments("spotless:apply").runNoError();

assertFile(path1).sameAsResource("kotlin/ktlint/basic.clean");
assertFile(path2).sameAsResource("kotlin/ktlint/basic.clean");
}
}