diff options
author | Egor Andreevich <egor@squareup.com> | 2021-10-20 09:47:14 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-20 09:47:14 -0400 |
commit | 06ad1f1131adcb5901e2776402d0439ada322b09 (patch) | |
tree | 58fa2fe0b188b21e745f5d6690921d5edad37e09 /kotlinpoet | |
parent | 8742e07c809adde749bfcd790f54ee86474a5d98 (diff) | |
parent | d34c32b6fdc04a41ca7cd44ca45d10bccee93446 (diff) | |
download | kotlinpoet-06ad1f1131adcb5901e2776402d0439ada322b09.tar.gz |
Merge pull request #1174 from glureau/long_type_names_in_comment
Fix #1076: Type names in a line comment may break the line
Diffstat (limited to 'kotlinpoet')
4 files changed, 48 insertions, 5 deletions
diff --git a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/LambdaTypeName.kt b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/LambdaTypeName.kt index 8b31ee96..3f8514a3 100644 --- a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/LambdaTypeName.kt +++ b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/LambdaTypeName.kt @@ -59,7 +59,7 @@ public class LambdaTypeName private constructor( } if (isSuspending) { - out.emit("suspend ") + out.emit("suspend·") } receiver?.let { @@ -71,7 +71,7 @@ public class LambdaTypeName private constructor( } parameters.emit(out) - out.emitCode(if (returnType is LambdaTypeName) " -> (%T)" else " -> %T", returnType) + out.emitCode(if (returnType is LambdaTypeName) "·->·(%T)" else "·->·%T", returnType) if (isNullable) { out.emit(")") diff --git a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/ParameterizedTypeName.kt b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/ParameterizedTypeName.kt index af726bd4..fee91816 100644 --- a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/ParameterizedTypeName.kt +++ b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/ParameterizedTypeName.kt @@ -83,7 +83,7 @@ public class ParameterizedTypeName internal constructor( if (typeArguments.isNotEmpty()) { out.emit("<") typeArguments.forEachIndexed { index, parameter -> - if (index > 0) out.emit(", ") + if (index > 0) out.emit(",·") parameter.emitAnnotations(out) parameter.emit(out) parameter.emitNullable(out) diff --git a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/WildcardTypeName.kt b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/WildcardTypeName.kt index 803091be..914df5a5 100644 --- a/kotlinpoet/src/main/java/com/squareup/kotlinpoet/WildcardTypeName.kt +++ b/kotlinpoet/src/main/java/com/squareup/kotlinpoet/WildcardTypeName.kt @@ -46,9 +46,9 @@ public class WildcardTypeName private constructor( override fun emit(out: CodeWriter): CodeWriter { return when { - inTypes.size == 1 -> out.emitCode("in %T", inTypes[0]) + inTypes.size == 1 -> out.emitCode("in·%T", inTypes[0]) outTypes == STAR.outTypes -> out.emit("*") - else -> out.emitCode("out %T", outTypes[0]) + else -> out.emitCode("out·%T", outTypes[0]) } } diff --git a/kotlinpoet/src/test/java/com/squareup/kotlinpoet/FileSpecTest.kt b/kotlinpoet/src/test/java/com/squareup/kotlinpoet/FileSpecTest.kt index 2ac486bf..ef71a607 100644 --- a/kotlinpoet/src/test/java/com/squareup/kotlinpoet/FileSpecTest.kt +++ b/kotlinpoet/src/test/java/com/squareup/kotlinpoet/FileSpecTest.kt @@ -1055,4 +1055,47 @@ class FileSpecTest { |""".trimMargin() ) } + + class WackyKey + class OhNoThisDoesNotCompile + + @OptIn(ExperimentalStdlibApi::class) + @Test fun longCommentWithTypes() { + val someLongParameterizedTypeName = typeNameOf<List<Map<in String, Collection<Map<WackyKey, out OhNoThisDoesNotCompile>>>>>() + val param = ParameterSpec.builder("foo", someLongParameterizedTypeName).build() + val someLongLambdaTypeName = LambdaTypeName.get(STRING, listOf(param), STRING).copy(suspending = true) + val file = FileSpec.builder("com.squareup.tacos", "Taco") + .addFunction( + FunSpec.builder("f1") + .addComment("this is a long line with a possibly long parameterized type with annotation: %T", someLongParameterizedTypeName) + .build() + ) + .addFunction( + FunSpec.builder("f2") + .addComment("this is a very very very very very very very very very very long line with a very long lambda type: %T", someLongLambdaTypeName) + .build() + ) + .build() + + assertThat(file.toString()).isEqualTo( + """ + |package com.squareup.tacos + | + |import com.squareup.kotlinpoet.FileSpecTest + |import kotlin.String + |import kotlin.Unit + |import kotlin.collections.Collection + |import kotlin.collections.List + |import kotlin.collections.Map + | + |public fun f1(): Unit { + | // this is a long line with a possibly long parameterized type with annotation: List<Map<in String, Collection<Map<FileSpecTest.WackyKey, out FileSpecTest.OhNoThisDoesNotCompile>>>> + |} + | + |public fun f2(): Unit { + | // this is a very very very very very very very very very very long line with a very long lambda type: suspend String.(foo: List<Map<in String, Collection<Map<FileSpecTest.WackyKey, out FileSpecTest.OhNoThisDoesNotCompile>>>>) -> String + |} + |""".trimMargin() + ) + } } |