Skip to content

Commit 9ae0331

Browse files
authored
Merge pull request #957 from Kotlin/columns-scope
Add `df.properties()` function to improve visibility of generated API for typed column access
2 parents df2ca63 + 1e1d076 commit 9ae0331

File tree

15 files changed

+119
-70
lines changed

15 files changed

+119
-70
lines changed

core/api/core.api

+6-1
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ public final class org/jetbrains/dataframe/keywords/SoftKeywords$Companion {
192192
public final fun getVALUES ()Ljava/util/List;
193193
}
194194

195-
public abstract interface class org/jetbrains/kotlinx/dataframe/ColumnsContainer {
195+
public abstract interface class org/jetbrains/kotlinx/dataframe/ColumnsContainer : org/jetbrains/kotlinx/dataframe/ColumnsScope {
196196
public abstract fun columns ()Ljava/util/List;
197197
public abstract fun columnsCount ()I
198198
public abstract fun containsColumn (Ljava/lang/String;)Z
@@ -234,6 +234,10 @@ public final class org/jetbrains/kotlinx/dataframe/ColumnsContainer$DefaultImpls
234234
public static fun get (Lorg/jetbrains/kotlinx/dataframe/ColumnsContainer;Lorg/jetbrains/kotlinx/dataframe/columns/ColumnReference;)Lorg/jetbrains/kotlinx/dataframe/columns/FrameColumn;
235235
}
236236

237+
public abstract interface class org/jetbrains/kotlinx/dataframe/ColumnsScope {
238+
public abstract fun get (Ljava/lang/String;)Lorg/jetbrains/kotlinx/dataframe/DataColumn;
239+
}
240+
237241
public abstract interface class org/jetbrains/kotlinx/dataframe/DataColumn : org/jetbrains/kotlinx/dataframe/columns/BaseColumn {
238242
public static final field Companion Lorg/jetbrains/kotlinx/dataframe/DataColumn$Companion;
239243
public abstract fun distinct ()Lorg/jetbrains/kotlinx/dataframe/DataColumn;
@@ -4222,6 +4226,7 @@ public final class org/jetbrains/kotlinx/dataframe/api/DataFrameGetKt {
42224226
public static final fun getOrNull (Lorg/jetbrains/kotlinx/dataframe/DataFrame;I)Lorg/jetbrains/kotlinx/dataframe/DataRow;
42234227
public static final fun getRows (Lorg/jetbrains/kotlinx/dataframe/DataFrame;Ljava/lang/Iterable;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
42244228
public static final fun getRows (Lorg/jetbrains/kotlinx/dataframe/DataFrame;Lkotlin/ranges/IntRange;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
4229+
public static final fun properties (Lorg/jetbrains/kotlinx/dataframe/DataFrame;)Lorg/jetbrains/kotlinx/dataframe/ColumnsScope;
42254230
public static final fun rows (Lorg/jetbrains/kotlinx/dataframe/DataFrame;)Ljava/lang/Iterable;
42264231
public static final fun rowsReversed (Lorg/jetbrains/kotlinx/dataframe/DataFrame;)Ljava/lang/Iterable;
42274232
}

core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/ColumnsContainer.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ import kotlin.reflect.KProperty
1818
*
1919
* Base interface for [DataFrame] and [ColumnSelectionDsl]
2020
*
21-
* @param T Schema marker. Used to generate extension properties for typed column access.
21+
* @param T Schema marker. Used to resolve generated extension properties for typed column access.
2222
*/
23-
public interface ColumnsContainer<out T> {
23+
public interface ColumnsContainer<out T> : ColumnsScope<T> {
2424

2525
// region columns
2626

@@ -54,7 +54,7 @@ public interface ColumnsContainer<out T> {
5454

5555
// region get
5656

57-
public operator fun get(columnName: String): AnyCol = getColumn(columnName)
57+
public override operator fun get(columnName: String): AnyCol = getColumn(columnName)
5858

5959
public operator fun get(columnPath: ColumnPath): AnyCol = getColumn(columnPath)
6060

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package org.jetbrains.kotlinx.dataframe
2+
3+
/**
4+
* Provides minimal API required for generated column properties:
5+
*
6+
* `val ColumnsScope<Schema marker>.column: DataColumn<String> get() = this["column"] as DataColumn<String>`
7+
*
8+
* @param T Schema marker. Used to resolve generated extension properties for typed column access.
9+
*/
10+
public interface ColumnsScope<out T> {
11+
public operator fun get(columnName: String): AnyCol
12+
}

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

+23
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import org.jetbrains.kotlinx.dataframe.AnyCol
44
import org.jetbrains.kotlinx.dataframe.AnyColumnReference
55
import org.jetbrains.kotlinx.dataframe.ColumnSelector
66
import org.jetbrains.kotlinx.dataframe.ColumnsContainer
7+
import org.jetbrains.kotlinx.dataframe.ColumnsScope
78
import org.jetbrains.kotlinx.dataframe.ColumnsSelector
89
import org.jetbrains.kotlinx.dataframe.DataColumn
910
import org.jetbrains.kotlinx.dataframe.DataFrame
@@ -58,6 +59,28 @@ public fun <T> ColumnsContainer<T>.getFrameColumn(columnName: String): FrameColu
5859
public fun <T> ColumnsContainer<T>.getColumnGroup(columnPath: ColumnPath): ColumnGroup<*> =
5960
get(columnPath).asColumnGroup()
6061

62+
/**
63+
* Utility property to access scope with only dataframe column properties for code completion,
64+
* filtering out DataFrame API.
65+
*
66+
* It's a quick way to check that code generation in notebooks or compiler plugin
67+
* worked as expected or find columns you're interested in.
68+
*
69+
* In notebooks:
70+
* ```
71+
* val df = DataFrame.read("file.csv")
72+
* ==== next code cell
73+
* df. // column properties are mixed together with methods, not easy to find unless you already know names
74+
* df.properties(). // easy to overview available columns
75+
* ```
76+
* In compiler plugin:
77+
* ```
78+
* val df = @Import DataFrame.read("file.csv")
79+
* df.properties().
80+
* ```
81+
*/
82+
public fun <T> DataFrame<T>.properties(): ColumnsScope<T> = this
83+
6184
// region getColumn
6285

6386
public fun <T> ColumnsContainer<T>.getColumn(name: String): AnyCol =

core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/codeGen/CodeGeneratorImpl.kt

+3-2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import org.jetbrains.dataframe.impl.codeGen.InterfaceGenerationMode.WithFields
1212
import org.jetbrains.dataframe.keywords.HardKeywords
1313
import org.jetbrains.dataframe.keywords.ModifierKeywords
1414
import org.jetbrains.kotlinx.dataframe.ColumnsContainer
15+
import org.jetbrains.kotlinx.dataframe.ColumnsScope
1516
import org.jetbrains.kotlinx.dataframe.DataColumn
1617
import org.jetbrains.kotlinx.dataframe.DataFrame
1718
import org.jetbrains.kotlinx.dataframe.DataRow
@@ -166,7 +167,7 @@ internal object FullyQualifiedNames : TypeRenderingStrategy {
166167
internal object ShortNames : TypeRenderingStrategy {
167168

168169
private val dataRow = DataRow::class.simpleName!!
169-
private val columnsContainer = ColumnsContainer::class.simpleName!!
170+
private val columnsContainer = ColumnsScope::class.simpleName!!
170171
private val dataFrame = DataFrame::class.simpleName!!
171172
private val dataColumn = DataColumn::class.simpleName!!
172173
private val columnGroup = ColumnGroup::class.simpleName!!
@@ -565,7 +566,7 @@ public fun Code.toStandaloneSnippet(packageName: String, additionalImports: List
565566
appendLine("package $packageName")
566567
appendLine()
567568
}
568-
appendLine("import org.jetbrains.kotlinx.dataframe.ColumnsContainer")
569+
appendLine("import org.jetbrains.kotlinx.dataframe.ColumnsScope")
569570
appendLine("import org.jetbrains.kotlinx.dataframe.DataColumn")
570571
appendLine("import org.jetbrains.kotlinx.dataframe.DataFrame")
571572
appendLine("import org.jetbrains.kotlinx.dataframe.DataRow")

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import org.jetbrains.dataframe.impl.codeGen.InterfaceGenerationMode
66
import org.jetbrains.dataframe.impl.codeGen.ReplCodeGenerator
77
import org.jetbrains.dataframe.impl.codeGen.generate
88
import org.jetbrains.kotlinx.dataframe.AnyRow
9-
import org.jetbrains.kotlinx.dataframe.ColumnsContainer
9+
import org.jetbrains.kotlinx.dataframe.ColumnsScope
1010
import org.jetbrains.kotlinx.dataframe.DataColumn
1111
import org.jetbrains.kotlinx.dataframe.DataRow
1212
import org.jetbrains.kotlinx.dataframe.api.dataFrameOf
@@ -30,7 +30,7 @@ class CodeGenerationTests : BaseTest() {
3030

3131
val personShortName = Person::class.simpleName!!
3232

33-
val dfName = (ColumnsContainer::class).simpleName!!
33+
val dfName = (ColumnsScope::class).simpleName!!
3434
val dfRowName = (DataRow::class).simpleName!!
3535
val dataCol = (DataColumn::class).simpleName!!
3636
val dataRow = (DataRow::class).simpleName!!

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

+4-4
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import io.kotest.matchers.shouldBe
44
import io.kotest.matchers.string.shouldNotBeEmpty
55
import org.jetbrains.dataframe.impl.codeGen.ReplCodeGenerator
66
import org.jetbrains.dataframe.impl.codeGen.process
7-
import org.jetbrains.kotlinx.dataframe.ColumnsContainer
7+
import org.jetbrains.kotlinx.dataframe.ColumnsScope
88
import org.jetbrains.kotlinx.dataframe.DataColumn
99
import org.jetbrains.kotlinx.dataframe.DataRow
1010
import org.jetbrains.kotlinx.dataframe.annotations.DataSchema
@@ -20,7 +20,7 @@ import org.junit.Test
2020
@Suppress("ktlint:standard:class-naming")
2121
class ReplCodeGenTests : BaseTest() {
2222

23-
val dfName = (ColumnsContainer::class).simpleName!!
23+
val dfName = (ColumnsScope::class).simpleName!!
2424
val dfRowName = (DataRow::class).simpleName!!
2525
val dataCol = (DataColumn::class).simpleName!!
2626
val intName = Int::class.simpleName!!
@@ -192,7 +192,7 @@ class ReplCodeGenTests : BaseTest() {
192192
repl.process<Test3.B>()
193193
repl.process<Test3.D>()
194194
val c = repl.process(Test3.df, Test3::df)
195-
"""val .*ColumnsContainer<\w*>.x:""".toRegex().findAll(c.declarations).count() shouldBe 1
195+
"""val .*ColumnsScope<\w*>.x:""".toRegex().findAll(c.declarations).count() shouldBe 1
196196
}
197197

198198
object Test4 {
@@ -216,6 +216,6 @@ class ReplCodeGenTests : BaseTest() {
216216
repl.process<Test4.A>()
217217
repl.process<Test4.B>()
218218
val c = repl.process(Test4.df, Test4::df)
219-
"""val .*ColumnsContainer<\w*>.a:""".toRegex().findAll(c.declarations).count() shouldBe 1
219+
"""val .*ColumnsScope<\w*>.a:""".toRegex().findAll(c.declarations).count() shouldBe 1
220220
}
221221
}

plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/extensions/IrBodyFiller.kt

+3-1
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,8 @@ private class DataFrameFileLowering(val context: IrPluginContext) : FileLowering
129129
companion object {
130130
val COLUMNS_CONTAINER_ID =
131131
CallableId(ClassId(FqName("org.jetbrains.kotlinx.dataframe"), Name.identifier("ColumnsContainer")), Name.identifier("get"))
132+
val COLUMNS_SCOPE_ID =
133+
CallableId(ClassId(FqName("org.jetbrains.kotlinx.dataframe"), Name.identifier("ColumnsScope")), Name.identifier("get"))
132134
val DATA_ROW_ID =
133135
CallableId(ClassId(FqName("org.jetbrains.kotlinx.dataframe"), Name.identifier("DataRow")), Name.identifier("get"))
134136
}
@@ -196,7 +198,7 @@ private class DataFrameFileLowering(val context: IrPluginContext) : FileLowering
196198

197199
val get = if (isDataColumn) {
198200
context
199-
.referenceFunctions(COLUMNS_CONTAINER_ID)
201+
.referenceFunctions(COLUMNS_SCOPE_ID)
200202
.single {
201203
it.owner.valueParameters.size == 1 && it.owner.valueParameters[0].type == context.irBuiltIns.stringType
202204
}

plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/extensions/TokenGenerator.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ class TokenGenerator(session: FirSession) : FirDeclarationGenerationExtension(se
7373
val columnContainerExtension = generateExtensionProperty(
7474
callableId = callableId,
7575
receiverType = ConeClassLikeTypeImpl(
76-
ConeClassLikeLookupTagImpl(Names.COLUMNS_CONTAINER_CLASS_ID),
76+
ConeClassLikeLookupTagImpl(Names.COLUMNS_SCOPE_CLASS_ID),
7777
typeArguments = arrayOf(schemaProperty.marker),
7878
isNullable = false
7979
),

plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/utils/Names.kt

+6
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@ object Names {
3333
FqName.fromSegments(listOf("org", "jetbrains", "kotlinx", "dataframe")),
3434
Name.identifier("ColumnsContainer")
3535
)
36+
37+
val COLUMNS_SCOPE_CLASS_ID: ClassId
38+
get() = ClassId(
39+
FqName.fromSegments(listOf("org", "jetbrains", "kotlinx", "dataframe")),
40+
Name.identifier("ColumnsScope")
41+
)
3642
val DATA_ROW_CLASS_ID: ClassId
3743
get() = ClassId(FqName.fromSegments(listOf("org", "jetbrains", "kotlinx", "dataframe")), Name.identifier("DataRow"))
3844
val DF_ANNOTATIONS_PACKAGE: Name

plugins/kotlin-dataframe/testData/box/propertiesOrder.fir.txt

+5-5
Original file line numberDiff line numberDiff line change
@@ -25,31 +25,31 @@ FILE: propertiesOrder.kt
2525
public final val R|org/jetbrains/kotlinx/dataframe/DataRow<<local>/Read_16I>|.full_name: R|kotlin/String|
2626
public get(): R|kotlin/String|
2727

28-
public final val R|org/jetbrains/kotlinx/dataframe/ColumnsContainer<<local>/Read_16I>|.full_name: R|org/jetbrains/kotlinx/dataframe/DataColumn<kotlin/String>|
28+
public final val R|org/jetbrains/kotlinx/dataframe/ColumnsScope<<local>/Read_16I>|.full_name: R|org/jetbrains/kotlinx/dataframe/DataColumn<kotlin/String>|
2929
public get(): R|org/jetbrains/kotlinx/dataframe/DataColumn<kotlin/String>|
3030

3131
public final val R|org/jetbrains/kotlinx/dataframe/DataRow<<local>/Read_16I>|.topics: R|kotlin/String|
3232
public get(): R|kotlin/String|
3333

34-
public final val R|org/jetbrains/kotlinx/dataframe/ColumnsContainer<<local>/Read_16I>|.topics: R|org/jetbrains/kotlinx/dataframe/DataColumn<kotlin/String>|
34+
public final val R|org/jetbrains/kotlinx/dataframe/ColumnsScope<<local>/Read_16I>|.topics: R|org/jetbrains/kotlinx/dataframe/DataColumn<kotlin/String>|
3535
public get(): R|org/jetbrains/kotlinx/dataframe/DataColumn<kotlin/String>|
3636

3737
public final val R|org/jetbrains/kotlinx/dataframe/DataRow<<local>/Read_16I>|.watchers: R|kotlin/Int|
3838
public get(): R|kotlin/Int|
3939

40-
public final val R|org/jetbrains/kotlinx/dataframe/ColumnsContainer<<local>/Read_16I>|.watchers: R|org/jetbrains/kotlinx/dataframe/DataColumn<kotlin/Int>|
40+
public final val R|org/jetbrains/kotlinx/dataframe/ColumnsScope<<local>/Read_16I>|.watchers: R|org/jetbrains/kotlinx/dataframe/DataColumn<kotlin/Int>|
4141
public get(): R|org/jetbrains/kotlinx/dataframe/DataColumn<kotlin/Int>|
4242

4343
public final val R|org/jetbrains/kotlinx/dataframe/DataRow<<local>/Read_16I>|.stargazers_count: R|kotlin/Int|
4444
public get(): R|kotlin/Int|
4545

46-
public final val R|org/jetbrains/kotlinx/dataframe/ColumnsContainer<<local>/Read_16I>|.stargazers_count: R|org/jetbrains/kotlinx/dataframe/DataColumn<kotlin/Int>|
46+
public final val R|org/jetbrains/kotlinx/dataframe/ColumnsScope<<local>/Read_16I>|.stargazers_count: R|org/jetbrains/kotlinx/dataframe/DataColumn<kotlin/Int>|
4747
public get(): R|org/jetbrains/kotlinx/dataframe/DataColumn<kotlin/Int>|
4848

4949
public final val R|org/jetbrains/kotlinx/dataframe/DataRow<<local>/Read_16I>|.html_url: R|java/net/URL|
5050
public get(): R|java/net/URL|
5151

52-
public final val R|org/jetbrains/kotlinx/dataframe/ColumnsContainer<<local>/Read_16I>|.html_url: R|org/jetbrains/kotlinx/dataframe/DataColumn<java/net/URL>|
52+
public final val R|org/jetbrains/kotlinx/dataframe/ColumnsScope<<local>/Read_16I>|.html_url: R|org/jetbrains/kotlinx/dataframe/DataColumn<java/net/URL>|
5353
public get(): R|org/jetbrains/kotlinx/dataframe/DataColumn<java/net/URL>|
5454

5555
public constructor(): R|<local>/Scope0|

plugins/kotlin-dataframe/testData/diagnostics/selectDuringTyping.fir.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ FILE: selectDuringTyping.kt
2020
public final val R|org/jetbrains/kotlinx/dataframe/DataRow<<local>/ExplodeSchema_94I>|.timestamps: R|kotlin/collections/List<kotlin/Int>|
2121
public get(): R|kotlin/collections/List<kotlin/Int>|
2222

23-
public final val R|org/jetbrains/kotlinx/dataframe/ColumnsContainer<<local>/ExplodeSchema_94I>|.timestamps: R|org/jetbrains/kotlinx/dataframe/DataColumn<kotlin/collections/List<kotlin/Int>>|
23+
public final val R|org/jetbrains/kotlinx/dataframe/ColumnsScope<<local>/ExplodeSchema_94I>|.timestamps: R|org/jetbrains/kotlinx/dataframe/DataColumn<kotlin/collections/List<kotlin/Int>>|
2424
public get(): R|org/jetbrains/kotlinx/dataframe/DataColumn<kotlin/collections/List<kotlin/Int>>|
2525

2626
public constructor(): R|<local>/Scope0|

plugins/kotlin-dataframe/testData/diagnostics/toDataFrame_java.fir.txt

+4-4
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ FILE: test.kt
2222
public final val R|org/jetbrains/kotlinx/dataframe/DataRow<<local>/S_43I>|.javaRecord: R|org/jetbrains/kotlinx/dataframe/DataRow<<local>/JavaRecord_771>|
2323
public get(): R|org/jetbrains/kotlinx/dataframe/DataRow<<local>/JavaRecord_771>|
2424

25-
public final val R|org/jetbrains/kotlinx/dataframe/ColumnsContainer<<local>/S_43I>|.javaRecord: R|org/jetbrains/kotlinx/dataframe/columns/ColumnGroup<<local>/JavaRecord_771>|
25+
public final val R|org/jetbrains/kotlinx/dataframe/ColumnsScope<<local>/S_43I>|.javaRecord: R|org/jetbrains/kotlinx/dataframe/columns/ColumnGroup<<local>/JavaRecord_771>|
2626
public get(): R|org/jetbrains/kotlinx/dataframe/columns/ColumnGroup<<local>/JavaRecord_771>|
2727

2828
public constructor(): R|<local>/Scope0|
@@ -47,19 +47,19 @@ FILE: test.kt
4747
public final val R|org/jetbrains/kotlinx/dataframe/DataRow<<local>/JavaRecord_771>|.aaa: R|org/jetbrains/kotlinx/dataframe/DataRow<<local>/Aaa_771>|
4848
public get(): R|org/jetbrains/kotlinx/dataframe/DataRow<<local>/Aaa_771>|
4949

50-
public final val R|org/jetbrains/kotlinx/dataframe/ColumnsContainer<<local>/JavaRecord_771>|.aaa: R|org/jetbrains/kotlinx/dataframe/columns/ColumnGroup<<local>/Aaa_771>|
50+
public final val R|org/jetbrains/kotlinx/dataframe/ColumnsScope<<local>/JavaRecord_771>|.aaa: R|org/jetbrains/kotlinx/dataframe/columns/ColumnGroup<<local>/Aaa_771>|
5151
public get(): R|org/jetbrains/kotlinx/dataframe/columns/ColumnGroup<<local>/Aaa_771>|
5252

5353
public final val R|org/jetbrains/kotlinx/dataframe/DataRow<<local>/JavaRecord_771>|.bean: R|org/jetbrains/kotlinx/dataframe/DataRow<<local>/Bean_771>|
5454
public get(): R|org/jetbrains/kotlinx/dataframe/DataRow<<local>/Bean_771>|
5555

56-
public final val R|org/jetbrains/kotlinx/dataframe/ColumnsContainer<<local>/JavaRecord_771>|.bean: R|org/jetbrains/kotlinx/dataframe/columns/ColumnGroup<<local>/Bean_771>|
56+
public final val R|org/jetbrains/kotlinx/dataframe/ColumnsScope<<local>/JavaRecord_771>|.bean: R|org/jetbrains/kotlinx/dataframe/columns/ColumnGroup<<local>/Bean_771>|
5757
public get(): R|org/jetbrains/kotlinx/dataframe/columns/ColumnGroup<<local>/Bean_771>|
5858

5959
public final val R|org/jetbrains/kotlinx/dataframe/DataRow<<local>/JavaRecord_771>|.i: R|kotlin/Int|
6060
public get(): R|kotlin/Int|
6161

62-
public final val R|org/jetbrains/kotlinx/dataframe/ColumnsContainer<<local>/JavaRecord_771>|.i: R|org/jetbrains/kotlinx/dataframe/DataColumn<kotlin/Int>|
62+
public final val R|org/jetbrains/kotlinx/dataframe/ColumnsScope<<local>/JavaRecord_771>|.i: R|org/jetbrains/kotlinx/dataframe/DataColumn<kotlin/Int>|
6363
public get(): R|org/jetbrains/kotlinx/dataframe/DataColumn<kotlin/Int>|
6464

6565
public constructor(): R|<local>/Scope1|

plugins/symbol-processor/src/main/kotlin/org/jetbrains/dataframe/ksp/ExtensionsGenerator.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ class ExtensionsGenerator(
132132

133133
private fun OutputStreamWriter.writeImports() {
134134
appendLine("import org.jetbrains.kotlinx.dataframe.annotations.*")
135-
appendLine("import org.jetbrains.kotlinx.dataframe.ColumnsContainer")
135+
appendLine("import org.jetbrains.kotlinx.dataframe.ColumnsScope")
136136
appendLine("import org.jetbrains.kotlinx.dataframe.DataColumn")
137137
appendLine("import org.jetbrains.kotlinx.dataframe.DataFrame")
138138
appendLine("import org.jetbrains.kotlinx.dataframe.DataRow")

0 commit comments

Comments
 (0)