From 4dfdd628bd5a1cce2fb65e93b31ac6e65c5fffb3 Mon Sep 17 00:00:00 2001 From: Alejandro Serrano Date: Fri, 31 Mar 2023 15:48:42 +0200 Subject: [PATCH] Fix sanitization of keywords (#3016) --- .../kotlin/arrow/optics/plugin/internals/utils.kt | 4 ++-- .../test/kotlin/arrow/optics/plugin/DSLTests.kt | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/utils.kt b/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/utils.kt index b1e71afc443..d61dde87043 100644 --- a/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/utils.kt +++ b/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/utils.kt @@ -12,8 +12,8 @@ fun String.plusIfNotBlank(prefix: String = "", postfix: String = "") = /** * Sanitizes each delimited section if it matches with Kotlin reserved keywords. */ -fun KSName.asSanitizedString(delimiter: String = ".", separator: String = delimiter) = - asString().splitToSequence(delimiter).joinToString(separator) { if (kotlinKeywords.contains(it)) "`$it`" else it } +fun KSName.asSanitizedString(delimiter: String = ".") = + asString().splitToSequence(delimiter).joinToString(delimiter) { if (it in kotlinKeywords) "`$it`" else it } private val kotlinKeywords = setOf( diff --git a/arrow-libs/optics/arrow-optics-ksp-plugin/src/test/kotlin/arrow/optics/plugin/DSLTests.kt b/arrow-libs/optics/arrow-optics-ksp-plugin/src/test/kotlin/arrow/optics/plugin/DSLTests.kt index 9fe6cfd5c8f..22a21a55d6d 100755 --- a/arrow-libs/optics/arrow-optics-ksp-plugin/src/test/kotlin/arrow/optics/plugin/DSLTests.kt +++ b/arrow-libs/optics/arrow-optics-ksp-plugin/src/test/kotlin/arrow/optics/plugin/DSLTests.kt @@ -61,5 +61,20 @@ class DSLTests { """.compilationSucceeds() } + @Test + fun `DSL for a class in a package including keywords, issue #2996`() { + """ + |package id.co.app_name.features.main.transaction.internal.outgoing.data.OutgoingInternalTransaction + | + |$imports + | + |@optics + |data class Source(val program: String) { + | companion object + |} + | + """.compilationSucceeds() + } + // Db.content.at(At.map(), One).set(db, None) }