Skip to content

Commit

Permalink
Merge pull request #1079 from Kotlin/compiler-plugin-dev-2
Browse files Browse the repository at this point in the history
Extend CS DSL support in compiler plugin
  • Loading branch information
koperagen authored Feb 28, 2025
2 parents 9d0fe3d + adac331 commit 319191c
Show file tree
Hide file tree
Showing 54 changed files with 1,838 additions and 68 deletions.
13 changes: 13 additions & 0 deletions core/api/core.api
Original file line number Diff line number Diff line change
Expand Up @@ -9451,7 +9451,10 @@ public final class org/jetbrains/kotlinx/dataframe/columns/ColumnReference$Defau
}

public final class org/jetbrains/kotlinx/dataframe/columns/ColumnResolutionContext {
public fun <init> (Lorg/jetbrains/kotlinx/dataframe/DataFrame;Lorg/jetbrains/kotlinx/dataframe/columns/UnresolvedColumnsPolicy;)V
public final fun getAllowMissingColumns ()Z
public final fun getDf ()Lorg/jetbrains/kotlinx/dataframe/DataFrame;
public final fun getUnresolvedColumnsPolicy ()Lorg/jetbrains/kotlinx/dataframe/columns/UnresolvedColumnsPolicy;
}

public abstract interface class org/jetbrains/kotlinx/dataframe/columns/ColumnSet : org/jetbrains/kotlinx/dataframe/columns/ColumnsResolver {
Expand Down Expand Up @@ -9499,6 +9502,7 @@ public final class org/jetbrains/kotlinx/dataframe/columns/ColumnWithPath$Defaul
}

public final class org/jetbrains/kotlinx/dataframe/columns/ColumnWithPathKt {
public static final fun ColumnWithPath (Lorg/jetbrains/kotlinx/dataframe/DataColumn;Lorg/jetbrains/kotlinx/dataframe/columns/ColumnPath;)Lorg/jetbrains/kotlinx/dataframe/columns/ColumnWithPath;
public static final fun getDepth (Lorg/jetbrains/kotlinx/dataframe/columns/ColumnWithPath;)I
}

Expand Down Expand Up @@ -9592,6 +9596,15 @@ public final class org/jetbrains/kotlinx/dataframe/columns/TypeSuggestion$Use :
public fun toString ()Ljava/lang/String;
}

public final class org/jetbrains/kotlinx/dataframe/columns/UnresolvedColumnsPolicy : java/lang/Enum {
public static final field Create Lorg/jetbrains/kotlinx/dataframe/columns/UnresolvedColumnsPolicy;
public static final field Fail Lorg/jetbrains/kotlinx/dataframe/columns/UnresolvedColumnsPolicy;
public static final field Skip Lorg/jetbrains/kotlinx/dataframe/columns/UnresolvedColumnsPolicy;
public static fun getEntries ()Lkotlin/enums/EnumEntries;
public static fun valueOf (Ljava/lang/String;)Lorg/jetbrains/kotlinx/dataframe/columns/UnresolvedColumnsPolicy;
public static fun values ()[Lorg/jetbrains/kotlinx/dataframe/columns/UnresolvedColumnsPolicy;
}

public abstract interface class org/jetbrains/kotlinx/dataframe/columns/ValueColumn : org/jetbrains/kotlinx/dataframe/DataColumn {
public abstract fun distinct ()Lorg/jetbrains/kotlinx/dataframe/columns/ValueColumn;
public abstract fun get (Ljava/lang/Iterable;)Lorg/jetbrains/kotlinx/dataframe/columns/ValueColumn;
Expand Down
16 changes: 15 additions & 1 deletion core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/all.kt
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,7 @@ public interface AllColumnsSelectionDsl<out _UNUSED> {
* NOTE: This is an identity call and can be omitted in most cases.
*/
@Suppress("UNCHECKED_CAST")
@Interpretable("All0")
public fun <C> ColumnSet<C>.all(): TransformableColumnSet<C> = allColumnsInternal() as TransformableColumnSet<C>

/**
Expand All @@ -271,7 +272,7 @@ public interface AllColumnsSelectionDsl<out _UNUSED> {
*
* `df.`[select][DataFrame.select]` { `[all][ColumnsSelectionDsl.all]`() }`
*/
@Interpretable("All0")
@Interpretable("All1")
public fun ColumnsSelectionDsl<*>.all(): TransformableColumnSet<*> = asSingleColumn().allColumnsInternal()

/**
Expand All @@ -280,6 +281,7 @@ public interface AllColumnsSelectionDsl<out _UNUSED> {
*
* `df.`[select][DataFrame.select]` { myGroup.`[allCols][SingleColumn.allCols]`() }`
*/
@Interpretable("All2")
public fun SingleColumn<DataRow<*>>.allCols(): TransformableColumnSet<*> =
ensureIsColumnGroup().allColumnsInternal()

Expand Down Expand Up @@ -350,6 +352,7 @@ public interface AllColumnsSelectionDsl<out _UNUSED> {
public fun <C> ColumnSet<C>.allAfter(column: String): ColumnSet<C> = allAfter(pathOf(column))

/** @include [ColumnSetAllAfterDocs] {@set [ColumnSetAllAfterDocs.Arg] (myColumn)} */
@Interpretable("AllAfter0")
public fun <C> ColumnSet<C>.allAfter(column: AnyColumnReference): ColumnSet<C> = allAfter(column.path())

/** @include [ColumnSetAllAfterDocs] {@set [ColumnSetAllAfterDocs.Arg] (Type::myColumn)} */
Expand All @@ -370,6 +373,7 @@ public interface AllColumnsSelectionDsl<out _UNUSED> {
}

/** @include [ColumnsSelectionDslAllAfterDocs] {@set [ColumnsSelectionDslAllAfterDocs.Arg] \ \{ myColumn \}} */
@Interpretable("AllAfter1")
public fun <T> ColumnsSelectionDsl<T>.allAfter(column: ColumnSelector<T, *>): ColumnSet<*> =
asSingleColumn().allColsAfter(column)

Expand All @@ -380,6 +384,7 @@ public interface AllColumnsSelectionDsl<out _UNUSED> {
public fun ColumnsSelectionDsl<*>.allAfter(column: String): ColumnSet<*> = allAfter(pathOf(column))

/** @include [ColumnsSelectionDslAllAfterDocs] {@set [ColumnsSelectionDslAllAfterDocs.Arg] (myColumn)} */
@Interpretable("AllAfter2")
public fun ColumnsSelectionDsl<*>.allAfter(column: AnyColumnReference): ColumnSet<*> = allAfter(column.path())

/** @include [ColumnsSelectionDslAllAfterDocs] {@set [ColumnsSelectionDslAllAfterDocs.Arg] (Type::myColumn)} */
Expand Down Expand Up @@ -564,6 +569,7 @@ public interface AllColumnsSelectionDsl<out _UNUSED> {
public fun <C> ColumnSet<C>.allFrom(column: String): ColumnSet<C> = allFrom(pathOf(column))

/** @include [ColumnSetAllFromDocs] {@set [ColumnSetAllFromDocs.Arg] (myColumn)} */
@Interpretable("AllFrom0")
public fun <C> ColumnSet<C>.allFrom(column: AnyColumnReference): ColumnSet<C> = allFrom(column.path())

/** @include [ColumnSetAllFromDocs] {@set [ColumnSetAllFromDocs.Arg] (Type::myColumn)} */
Expand All @@ -583,6 +589,7 @@ public interface AllColumnsSelectionDsl<out _UNUSED> {
}

/** @include [ColumnsSelectionDslAllFromDocs] {@set [ColumnsSelectionDslAllFromDocs.Arg] \ \{ myColumn \}} */
@Interpretable("AllFrom1")
public fun <T> ColumnsSelectionDsl<T>.allFrom(column: ColumnSelector<T, *>): ColumnSet<*> =
asSingleColumn().allColsFrom(column)

Expand All @@ -593,6 +600,7 @@ public interface AllColumnsSelectionDsl<out _UNUSED> {
public fun ColumnsSelectionDsl<*>.allFrom(column: String): ColumnSet<*> = asSingleColumn().allColsFrom(column)

/** @include [ColumnsSelectionDslAllFromDocs] {@set [ColumnsSelectionDslAllFromDocs.Arg] (myColumn)} */
@Interpretable("AllFrom2")
public fun ColumnsSelectionDsl<*>.allFrom(column: AnyColumnReference): ColumnSet<*> =
asSingleColumn().allColsFrom(column)

Expand Down Expand Up @@ -776,6 +784,7 @@ public interface AllColumnsSelectionDsl<out _UNUSED> {
public fun <C> ColumnSet<C>.allBefore(column: String): ColumnSet<C> = allBefore(pathOf(column))

/** @include [ColumnSetAllBeforeDocs] {@set [ColumnSetAllBeforeDocs.Arg] (myColumn)} */
@Interpretable("AllBefore0")
public fun <C> ColumnSet<C>.allBefore(column: AnyColumnReference): ColumnSet<C> = allBefore(column.path())

/** @include [ColumnSetAllBeforeDocs] {@set [ColumnSetAllBeforeDocs.Arg] (Type::myColumn)} */
Expand All @@ -796,6 +805,7 @@ public interface AllColumnsSelectionDsl<out _UNUSED> {
}

/** @include [ColumnsSelectionDslAllBeforeDocs] {@set [ColumnsSelectionDslAllBeforeDocs.Arg] \ \{ myColumn \}} */
@Interpretable("AllBefore1")
public fun <T> ColumnsSelectionDsl<T>.allBefore(column: ColumnSelector<T, *>): ColumnSet<*> =
asSingleColumn().allColsBefore(column)

Expand All @@ -807,6 +817,7 @@ public interface AllColumnsSelectionDsl<out _UNUSED> {
public fun ColumnsSelectionDsl<*>.allBefore(column: String): ColumnSet<*> = allBefore(pathOf(column))

/** @include [ColumnsSelectionDslAllBeforeDocs] {@set [ColumnsSelectionDslAllBeforeDocs.Arg] (myColumn)} */
@Interpretable("AllBefore2")
public fun ColumnsSelectionDsl<*>.allBefore(column: AnyColumnReference): ColumnSet<*> = allBefore(column.path())

/** @include [ColumnsSelectionDslAllBeforeDocs] {@set [ColumnsSelectionDslAllBeforeDocs.Arg] (Type::myColumn)} */
Expand Down Expand Up @@ -989,6 +1000,7 @@ public interface AllColumnsSelectionDsl<out _UNUSED> {
public fun <C> ColumnSet<C>.allUpTo(column: String): ColumnSet<C> = allUpTo(pathOf(column))

/** @include [ColumnSetAllUpToDocs] {@set [ColumnSetAllUpToDocs.Arg] (myColumn)} */
@Interpretable("AllUpTo0")
public fun <C> ColumnSet<C>.allUpTo(column: AnyColumnReference): ColumnSet<C> = allUpTo(column.path())

/** @include [ColumnSetAllUpToDocs] {@set [ColumnSetAllUpToDocs.Arg] (Type::myColumn)} */
Expand All @@ -1008,6 +1020,7 @@ public interface AllColumnsSelectionDsl<out _UNUSED> {
}

/** @include [ColumnsSelectionDslAllUpToDocs] {@set [ColumnsSelectionDslAllUpToDocs.Arg] \ \{ myColumn \}} */
@Interpretable("AllUpTo1")
public fun <T> ColumnsSelectionDsl<T>.allUpTo(column: ColumnSelector<T, *>): ColumnSet<*> =
asSingleColumn().allColsUpTo(column)

Expand All @@ -1018,6 +1031,7 @@ public interface AllColumnsSelectionDsl<out _UNUSED> {
public fun ColumnsSelectionDsl<*>.allUpTo(column: String): ColumnSet<*> = asSingleColumn().allColsUpTo(column)

/** @include [ColumnsSelectionDslAllUpToDocs] {@set [ColumnsSelectionDslAllUpToDocs.Arg] (myColumn)} */
@Interpretable("AllUpTo2")
public fun ColumnsSelectionDsl<*>.allUpTo(column: AnyColumnReference): ColumnSet<*> =
asSingleColumn().allColsUpTo(column)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import org.jetbrains.kotlinx.dataframe.AnyRow
import org.jetbrains.kotlinx.dataframe.DataFrame
import org.jetbrains.kotlinx.dataframe.DataRow
import org.jetbrains.kotlinx.dataframe.Predicate
import org.jetbrains.kotlinx.dataframe.annotations.Interpretable
import org.jetbrains.kotlinx.dataframe.columns.ColumnGroup
import org.jetbrains.kotlinx.dataframe.columns.ColumnPath
import org.jetbrains.kotlinx.dataframe.columns.ColumnReference
Expand Down Expand Up @@ -108,6 +109,7 @@ public interface ColGroupsColumnsSelectionDsl {
*
* `df.`[select][DataFrame.select]` { `[colGroups][ColumnsSelectionDsl.colGroups]` { it.`[name][ColumnReference.name]`.`[startsWith][String.startsWith]`("my") } }`
*/
@Interpretable("ColGroups0")
public fun ColumnSet<*>.colGroups(filter: Predicate<ColumnGroup<*>> = { true }): TransformableColumnSet<AnyRow> =
columnGroupsInternal(filter)

Expand All @@ -119,6 +121,7 @@ public interface ColGroupsColumnsSelectionDsl {
*
* `df.`[select][DataFrame.select]` { `[colGroups][ColumnsSelectionDsl.colGroups]` { it.`[name][ColumnReference.name]`.`[startsWith][String.startsWith]`("my") } }`
*/
@Interpretable("ColGroups1")
public fun ColumnsSelectionDsl<*>.colGroups(
filter: Predicate<ColumnGroup<*>> = { true },
): TransformableColumnSet<AnyRow> = asSingleColumn().columnGroupsInternal(filter)
Expand All @@ -131,6 +134,7 @@ public interface ColGroupsColumnsSelectionDsl {
*
* `df.`[select][DataFrame.select]` { myColGroup.`[colGroups][SingleColumn.colGroups]` { it.`[name][ColumnReference.name]`.`[startsWith][String.startsWith]`("my") } }`
*/
@Interpretable("ColGroups2")
public fun SingleColumn<DataRow<*>>.colGroups(
filter: Predicate<ColumnGroup<*>> = { true },
): TransformableColumnSet<AnyRow> = this.ensureIsColumnGroup().columnGroupsInternal(filter)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import org.jetbrains.kotlinx.dataframe.ColumnFilter
import org.jetbrains.kotlinx.dataframe.DataColumn
import org.jetbrains.kotlinx.dataframe.DataFrame
import org.jetbrains.kotlinx.dataframe.DataRow
import org.jetbrains.kotlinx.dataframe.annotations.Interpretable
import org.jetbrains.kotlinx.dataframe.columns.ColumnPath
import org.jetbrains.kotlinx.dataframe.columns.ColumnReference
import org.jetbrains.kotlinx.dataframe.columns.ColumnSet
Expand Down Expand Up @@ -382,6 +383,7 @@ public interface ColsColumnsSelectionDsl<out _UNUSED> {
private interface ColumnsSelectionDslColsVarargColumnReferenceDocs

/** @include [ColumnsSelectionDslColsVarargColumnReferenceDocs] */
@Interpretable("Cols0")
public fun <C> ColumnsSelectionDsl<*>.cols(
firstCol: ColumnReference<C>,
vararg otherCols: ColumnReference<C>,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ public interface ColsAtAnyDepthColumnsSelectionDsl {
*
* `df.`[select][DataFrame.select]` { `[colGroups][ColumnsSelectionDsl.colGroups]`().`[colsAtAnyDepth][ColumnsSelectionDsl.colsAtAnyDepth]` { "Alice" `[in][Iterable.contains]` it.`[values][DataColumn.values]`() } }`
*/
@Interpretable("ColsAtAnyDepth0")
public fun ColumnSet<*>.colsAtAnyDepth(predicate: ColumnFilter<*> = { true }): ColumnSet<*> =
colsAtAnyDepthInternal(predicate)

Expand All @@ -131,7 +132,7 @@ public interface ColsAtAnyDepthColumnsSelectionDsl {
*
* `df.`[select][DataFrame.select]` { `[colsAtAnyDepth][ColumnsSelectionDsl.colsAtAnyDepth]` { !it.`[isColumnGroup][DataColumn.isColumnGroup]` } }`
*/
@Interpretable("ColsAtAnyDepth0")
@Interpretable("ColsAtAnyDepth1")
public fun ColumnsSelectionDsl<*>.colsAtAnyDepth(predicate: ColumnFilter<*> = { true }): ColumnSet<*> =
asSingleColumn().colsAtAnyDepthInternal(predicate)

Expand All @@ -141,6 +142,7 @@ public interface ColsAtAnyDepthColumnsSelectionDsl {
*
* `df.`[select][DataFrame.select]` { myColGroup.`[colsAtAnyDepth][SingleColumn.colsAtAnyDepth]` { "Alice" `[in][Iterable.contains]` it.`[values][DataColumn.values]`() } }`
*/
@Interpretable("ColsAtAnyDepth2")
public fun SingleColumn<DataRow<*>>.colsAtAnyDepth(predicate: ColumnFilter<*> = { true }): ColumnSet<*> =
ensureIsColumnGroup().colsAtAnyDepthInternal(predicate)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -248,6 +248,7 @@ public fun <C> SingleColumn<DataRow<*>>.colsOf(
* @include [ColsOfColumnsSelectionDsl.CommonColsOfDocs.FilterParam]
* @include [ColsOfColumnsSelectionDsl.CommonColsOfDocs.Return]
*/
@Interpretable("ColsOf2")
public inline fun <reified C> SingleColumn<DataRow<*>>.colsOf(
noinline filter: ColumnFilter<C> = { true },
): TransformableColumnSet<C> = colsOf(typeOf<C>(), filter)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package org.jetbrains.kotlinx.dataframe.api
import org.jetbrains.kotlinx.dataframe.DataColumn
import org.jetbrains.kotlinx.dataframe.DataFrame
import org.jetbrains.kotlinx.dataframe.DataRow
import org.jetbrains.kotlinx.dataframe.annotations.Interpretable
import org.jetbrains.kotlinx.dataframe.columns.ColumnGroup
import org.jetbrains.kotlinx.dataframe.columns.ColumnPath
import org.jetbrains.kotlinx.dataframe.columns.ColumnSet
Expand Down Expand Up @@ -146,6 +147,7 @@ public interface ColumnNameFiltersColumnsSelectionDsl {
* `df.`[select][DataFrame.select]` { `[colsOf][SingleColumn.colsOf]`<`[Int][Int]`>().`[nameContains][ColumnSet.nameContains]`("my", ignoreCase = true) }`
*/
@Suppress("UNCHECKED_CAST")
@Interpretable("NameContains0")
public fun <C> ColumnSet<C>.nameContains(
text: CharSequence,
ignoreCase: Boolean = false,
Expand All @@ -157,6 +159,7 @@ public interface ColumnNameFiltersColumnsSelectionDsl {
*
* `df.`[select][DataFrame.select]` { `[nameContains][ColumnsSelectionDsl.colsNameContains]`("my") }`
*/
@Interpretable("NameContains1")
public fun ColumnsSelectionDsl<*>.nameContains(
text: CharSequence,
ignoreCase: Boolean = false,
Expand All @@ -168,6 +171,7 @@ public interface ColumnNameFiltersColumnsSelectionDsl {
*
* `df.`[select][DataFrame.select]` { someGroupCol.`[colsNameContains][SingleColumn.colsNameContains]`("my") }`
*/
@Interpretable("NameContains2")
public fun SingleColumn<DataRow<*>>.colsNameContains(
text: CharSequence,
ignoreCase: Boolean = false,
Expand Down Expand Up @@ -348,6 +352,7 @@ public interface ColumnNameFiltersColumnsSelectionDsl {
* `df.`[select][DataFrame.select]` { `[colsOf][SingleColumn.colsOf]`<`[Int][Int]`>().`[nameStartsWith][ColumnSet.nameStartsWith]`("order-") }`
*/
@Suppress("UNCHECKED_CAST")
@Interpretable("NameStartsWith0")
public fun <C> ColumnSet<C>.nameStartsWith(
prefix: CharSequence,
ignoreCase: Boolean = false,
Expand All @@ -359,6 +364,7 @@ public interface ColumnNameFiltersColumnsSelectionDsl {
*
* `df.`[select][DataFrame.select]` { `[nameStartsWith][ColumnsSelectionDsl.nameStartsWith]`("order-") }`
*/
@Interpretable("NameStartsWith1")
public fun ColumnsSelectionDsl<*>.nameStartsWith(
prefix: CharSequence,
ignoreCase: Boolean = false,
Expand All @@ -370,6 +376,7 @@ public interface ColumnNameFiltersColumnsSelectionDsl {
*
* `df.`[select][DataFrame.select]` { someGroupCol.`[colsNameStartsWith][SingleColumn.colsNameStartsWith]`("order-") }`
*/
@Interpretable("NameStartsWith2")
public fun SingleColumn<DataRow<*>>.colsNameStartsWith(
prefix: CharSequence,
ignoreCase: Boolean = false,
Expand Down Expand Up @@ -434,6 +441,7 @@ public interface ColumnNameFiltersColumnsSelectionDsl {
* `df.`[select][DataFrame.select]` { `[colsOf][SingleColumn.colsOf]`<`[Int][Int]`>().`[nameEndsWith][ColumnSet.nameEndsWith]`("-order") }`
*/
@Suppress("UNCHECKED_CAST")
@Interpretable("NameEndsWith0")
public fun <C> ColumnSet<C>.nameEndsWith(
suffix: CharSequence,
ignoreCase: Boolean = false,
Expand All @@ -445,6 +453,7 @@ public interface ColumnNameFiltersColumnsSelectionDsl {
*
* `df.`[select][DataFrame.select]` { `[nameEndsWith][ColumnsSelectionDsl.nameEndsWith]`("-order") }`
*/
@Interpretable("NameEndsWith1")
public fun ColumnsSelectionDsl<*>.nameEndsWith(
suffix: CharSequence,
ignoreCase: Boolean = false,
Expand All @@ -456,6 +465,7 @@ public interface ColumnNameFiltersColumnsSelectionDsl {
*
* `df.`[select][DataFrame.select]` { someGroupCol.`[colsNameEndsWith][SingleColumn.colsNameEndsWith]`("-order") }`
*/
@Interpretable("NameEndsWith2")
public fun SingleColumn<DataRow<*>>.colsNameEndsWith(
suffix: CharSequence,
ignoreCase: Boolean = false,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package org.jetbrains.kotlinx.dataframe.api

import org.jetbrains.kotlinx.dataframe.AnyColumnReference
import org.jetbrains.kotlinx.dataframe.DataFrame
import org.jetbrains.kotlinx.dataframe.annotations.Interpretable
import org.jetbrains.kotlinx.dataframe.columns.ColumnReference
import org.jetbrains.kotlinx.dataframe.columns.ColumnSet
import org.jetbrains.kotlinx.dataframe.documentation.AccessApiLink
Expand Down Expand Up @@ -130,6 +131,7 @@ public interface ColumnRangeColumnsSelectionDsl {
* @include [CommonRangeOfColumnsDocs]
* {@set [CommonRangeOfColumnsDocs.Example] `fromColumn`[`..`][ColumnReference.rangeTo]`toColumn`}
*/
@Interpretable("ColumnRange")
public operator fun AnyColumnReference.rangeTo(endInclusive: AnyColumnReference): ColumnSet<*> =
createColumnSet { context ->
val startPath = this@rangeTo.resolveSingle(context)!!.path
Expand Down
Loading

0 comments on commit 319191c

Please sign in to comment.