From f4676a2eb44ed6b1e8379484629357ead3e03a99 Mon Sep 17 00:00:00 2001 From: WarningImHack3r <43064022+WarningImHack3r@users.noreply.github.com> Date: Thu, 20 Jun 2024 23:29:18 +0200 Subject: [PATCH] 0.8.4 - Catch tsconfig parsing errors and guide user (fixes #48) - Disable unused manual serialization dependency --- CHANGELOG.md | 8 +++++++ build.gradle.kts | 2 +- gradle.properties | 2 +- .../backend/sources/Source.kt | 21 +++++++++++++++---- .../backend/sources/impl/VueSource.kt | 8 +++---- 5 files changed, 31 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1972045..200cde9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,14 @@ ## [Unreleased] +### Changed + +- Temporarily reduce back bundle size by removing unused dependencies + +### Fixed + +- Fix a crash due to an edge case with tsconfig.json files with JSON5 patterns (#48) + ## [0.8.3] - 2024-06-17 ### Added diff --git a/build.gradle.kts b/build.gradle.kts index 1efe6b7..49e0d39 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -25,7 +25,7 @@ repositories { // Dependencies are managed with Gradle version catalog - read more: https://docs.gradle.org/current/userguide/platforms.html#sub:version-catalog dependencies { - implementation(libs.serialization) +// implementation(libs.serialization) } // Set the JVM language level used to build the project. diff --git a/gradle.properties b/gradle.properties index 16cf3b5..216a3f6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ pluginGroup = com.github.warningimhack3r.intellijshadcnplugin pluginName = intellij-shadcn-plugin pluginRepositoryUrl = https://github.com/WarningImHack3r/intellij-shadcn-plugin # SemVer format -> https://semver.org -pluginVersion = 0.8.3 +pluginVersion = 0.8.4 # Supported build number ranges and IntelliJ Platform versions -> https://plugins.jetbrains.com/docs/intellij/build-number-ranges.html pluginSinceBuild = 213 diff --git a/src/main/kotlin/com/github/warningimhack3r/intellijshadcnplugin/backend/sources/Source.kt b/src/main/kotlin/com/github/warningimhack3r/intellijshadcnplugin/backend/sources/Source.kt index ecb7fb7..51640f7 100644 --- a/src/main/kotlin/com/github/warningimhack3r/intellijshadcnplugin/backend/sources/Source.kt +++ b/src/main/kotlin/com/github/warningimhack3r/intellijshadcnplugin/backend/sources/Source.kt @@ -26,9 +26,9 @@ abstract class Source(val project: Project, private val serializer: private val tsConfigJson = Json { // Lax parsing (unquoted keys, formatting, etc.) isLenient = true - // Allow trailing commas + // Allow trailing commas (1.6.1+) // allowTrailingComma = true - // Allow comments + // Allow comments (1.7.0+) // allowComments = true } } @@ -105,7 +105,7 @@ abstract class Source(val project: Project, private val serializer: protected open fun adaptFileExtensionToConfig(extension: String): String = extension - protected fun parseTsConfig(config: String): JsonElement { + protected fun parseTsConfig(config: String, fileName: String = "tsconfig.json"): JsonElement { // Temporary workaround until kotlinx.serialization is upgraded val cleanConfig = config // Remove /* */ comments @@ -117,7 +117,20 @@ abstract class Source(val project: Project, private val serializer: // Remove trailing commas .replace(Regex(",\\s*}"), "\n}") .replace(Regex(",\\s*]"), "\n]") - return tsConfigJson.parseToJsonElement(cleanConfig) + return try { + tsConfigJson.parseToJsonElement(cleanConfig) + } catch (e: Exception) { + log.warn("Failed to parse $fileName using replacements", e) + try { + tsConfigJson.parseToJsonElement(config) + } catch (e: Exception) { + log.error( + "Failed to parse $fileName. Please try removing comments and trailing commas from it and try again.", + e + ) + throw e + } + } } protected abstract fun adaptFileToConfig(file: PsiFile) diff --git a/src/main/kotlin/com/github/warningimhack3r/intellijshadcnplugin/backend/sources/impl/VueSource.kt b/src/main/kotlin/com/github/warningimhack3r/intellijshadcnplugin/backend/sources/impl/VueSource.kt index 1c40d1f..c1a8c55 100644 --- a/src/main/kotlin/com/github/warningimhack3r/intellijshadcnplugin/backend/sources/impl/VueSource.kt +++ b/src/main/kotlin/com/github/warningimhack3r/intellijshadcnplugin/backend/sources/impl/VueSource.kt @@ -37,8 +37,8 @@ open class VueSource(project: Project) : Source(project, VueConfig.se return alias } - fun resolvePath(configFile: String): String? { - return parseTsConfig(configFile) + fun resolvePath(configFile: String, fileName: String): String? { + return parseTsConfig(configFile, fileName) .jsonObject["compilerOptions"] ?.jsonObject?.get("paths") ?.jsonObject?.get("${alias.substringBefore("/")}/*") @@ -54,8 +54,8 @@ open class VueSource(project: Project) : Source(project, VueConfig.se val tsConfig = FileManager(project).getFileContentsAtPath(tsConfigLocation) ?: throw NoSuchFileException("$tsConfigLocation not found") - val aliasPath = (resolvePath(tsConfig) ?: if (config.typescript) { - resolvePath("tsconfig.app.json") + val aliasPath = (resolvePath(tsConfig, tsConfigLocation) ?: if (config.typescript) { + resolvePath("tsconfig.app.json", "tsconfig.app.json") } else null) ?: throw Exception("Cannot find alias $alias in $tsConfig") return aliasPath.replace(Regex("^\\.+/"), "") .replace(Regex("\\*$"), alias.substringAfter("/")).also {