Skip to content

Commit e2e336c

Browse files
committed
Add an utility to print generated code
1 parent 432c94a commit e2e336c

File tree

4 files changed

+25
-8
lines changed

4 files changed

+25
-8
lines changed

core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/generateCode.kt

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import org.jetbrains.kotlinx.dataframe.codeGen.MarkerVisibility
77
public inline fun <reified T> DataFrame<T>.generateCode(
88
fields: Boolean = true,
99
extensionProperties: Boolean = true,
10-
): String {
10+
): CodeString {
1111
val name = markerName<T>()
1212
return generateCode(name, fields, extensionProperties)
1313
}
@@ -17,7 +17,7 @@ public fun <T> DataFrame<T>.generateCode(
1717
fields: Boolean = true,
1818
extensionProperties: Boolean = true,
1919
visibility: MarkerVisibility = MarkerVisibility.IMPLICIT_PUBLIC,
20-
): String {
20+
): CodeString {
2121
val codeGen = CodeGenerator.create()
2222
return codeGen.generate(
2323
schema = schema(),
@@ -26,10 +26,10 @@ public fun <T> DataFrame<T>.generateCode(
2626
extensionProperties = extensionProperties,
2727
isOpen = true,
2828
visibility = visibility,
29-
).code.declarations
29+
).code.declarations.toCodeString()
3030
}
3131

32-
public inline fun <reified T> DataFrame<T>.generateInterfaces(): String = generateCode(
32+
public inline fun <reified T> DataFrame<T>.generateInterfaces(): CodeString = generateCode(
3333
fields = true,
3434
extensionProperties = false
3535
)
@@ -39,7 +39,7 @@ public inline fun <reified T> DataFrame<T>.generateDataClasses(
3939
extensionProperties: Boolean = true,
4040
visibility: MarkerVisibility = MarkerVisibility.IMPLICIT_PUBLIC,
4141
useFqNames: Boolean = false
42-
): String {
42+
): CodeString {
4343
val name = markerName ?: markerName<T>()
4444
val codeGen = CodeGenerator.create(useFqNames)
4545
return codeGen.generate(
@@ -51,15 +51,29 @@ public inline fun <reified T> DataFrame<T>.generateDataClasses(
5151
visibility = visibility,
5252
asDataClass = true
5353
).code.declarations
54+
).code.declarations.toCodeString()
5455
}
5556

5657
@PublishedApi
5758
internal inline fun <reified T> markerName(): String = if (T::class.isAbstract) {
5859
T::class.simpleName!!
5960
} else "DataEntry"
6061

61-
public fun <T> DataFrame<T>.generateInterfaces(markerName: String): String = generateCode(
62+
public fun <T> DataFrame<T>.generateInterfaces(markerName: String): CodeString = generateCode(
6263
markerName = markerName,
6364
fields = true,
6465
extensionProperties = false
6566
)
67+
68+
/**
69+
* Converts delimited 'my_name', 'my name', etc, String to camelCase 'myName'
70+
*/
71+
public val NameNormalizer.Companion.default: NameNormalizer get() = NameNormalizer.from(setOf('\t', ' ', '_'))
72+
73+
@JvmInline
74+
public value class CodeString(public val value: String) {
75+
override fun toString(): String = value
76+
}
77+
78+
@PublishedApi
79+
internal fun String.toCodeString(): CodeString = CodeString(this)

core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/print.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,5 @@ public fun <T, G> GroupBy<T, G>.print(): Unit = println(this)
4242
public fun DataFrameSchema.print(): Unit = println(this)
4343

4444
// endregion
45+
46+
public fun CodeString.print(): Unit = println(this)

core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/gather.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ class GatherTests {
117117

118118
@Test
119119
fun `generated code is fully typed`() {
120-
generatedCode.contains("<*>") shouldBe false
120+
generatedCode.value.contains("<*>") shouldBe false
121121
}
122122

123123
@Test

core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/codeGen/CodeGenerationTests.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import org.jetbrains.kotlinx.dataframe.api.generateDataClasses
1515
import org.jetbrains.kotlinx.dataframe.api.groupBy
1616
import org.jetbrains.kotlinx.dataframe.api.move
1717
import org.jetbrains.kotlinx.dataframe.api.schema
18+
import org.jetbrains.kotlinx.dataframe.api.toCodeString
1819
import org.jetbrains.kotlinx.dataframe.api.toDataFrame
1920
import org.jetbrains.kotlinx.dataframe.api.under
2021
import org.jetbrains.kotlinx.dataframe.columns.ColumnGroup
@@ -326,7 +327,7 @@ class CodeGenerationTests : BaseTest() {
326327
val group: List<Person1>,
327328
val name: String
328329
)
329-
""".trimIndent()
330+
""".trimIndent().toCodeString()
330331
}
331332

332333
@Test

0 commit comments

Comments
 (0)