User: bawnorton Date: 23 Sep 24 16:17 Revision: 56b37648bc393ecfc073a42759ca05fc8461a3be Summary: Add json5 support to mixin config jsons (#2375) * add json5 support to mixin config jsons * remove debug line * use or pattern TeamCity URL: https://ci.mcdev.io/viewModification.html?tab=vcsModificationFiles&modId=9709&personal=false Index: src/main/kotlin/platform/mixin/config/MixinConfigFileType.kt =================================================================== --- src/main/kotlin/platform/mixin/config/MixinConfigFileType.kt (revision 816437a2e84b22c7e5a262f9c6e55bed35d077df) +++ src/main/kotlin/platform/mixin/config/MixinConfigFileType.kt (revision 56b37648bc393ecfc073a42759ca05fc8461a3be) @@ -22,22 +22,35 @@ import com.demonwav.mcdev.asset.PlatformAssets import com.intellij.json.JsonLanguage +import com.intellij.json.json5.Json5Language import com.intellij.openapi.fileTypes.LanguageFileType import com.intellij.openapi.fileTypes.ex.FileTypeIdentifiableByVirtualFile import com.intellij.openapi.vfs.VirtualFile -object MixinConfigFileType : LanguageFileType(JsonLanguage.INSTANCE), FileTypeIdentifiableByVirtualFile { +interface MixinConfigFileType : FileTypeIdentifiableByVirtualFile { + fun getFilenameRegex() : Regex - private val filenameRegex = "(^|\\.)mixins?(\\.[^.]+)*\\.json\$".toRegex() - // Dynamic file type detection is sadly needed as we're overriding the built-in json file type. // Simply using an extension pattern is not sufficient as there is no way to bump the version to tell // the cache that the pattern has changed, as it now has, without changing the file type name. // See https://www.plugin-dev.com/intellij/custom-language/file-type-detection/#guidelines - override fun isMyFileType(file: VirtualFile) = file.name.contains(filenameRegex) + override fun isMyFileType(file: VirtualFile) = file.name.contains(getFilenameRegex()) - override fun getName() = "Mixin Configuration" override fun getDescription() = "Mixin configuration" override fun getDefaultExtension() = "" override fun getIcon() = PlatformAssets.MIXIN_ICON + + object Json : LanguageFileType(JsonLanguage.INSTANCE), MixinConfigFileType { + private val filenameRegex = "(^|\\.)mixins?(\\.[^.]+)*\\.json\$".toRegex() + + override fun getFilenameRegex() : Regex = filenameRegex + override fun getName() = "Mixin Json Configuration" -} + } + + object Json5 : LanguageFileType(Json5Language.INSTANCE), MixinConfigFileType { + private var filenameRegex = "(^|\\.)mixins?(\\.[^.]+)*\\.json5\$".toRegex() + + override fun getFilenameRegex() : Regex = filenameRegex + override fun getName() = "Mixin Json5 Configuration" + } +} \ No newline at end of file Index: src/main/kotlin/platform/mixin/config/MixinConfigImportOptimizer.kt =================================================================== --- src/main/kotlin/platform/mixin/config/MixinConfigImportOptimizer.kt (revision 816437a2e84b22c7e5a262f9c6e55bed35d077df) +++ src/main/kotlin/platform/mixin/config/MixinConfigImportOptimizer.kt (revision 56b37648bc393ecfc073a42759ca05fc8461a3be) @@ -81,7 +81,7 @@ } } - override fun supports(file: PsiFile) = file is JsonFile && file.fileType == MixinConfigFileType + override fun supports(file: PsiFile) = file is JsonFile && file.fileType is MixinConfigFileType override fun processFile(file: PsiFile): Runnable { if (file !is JsonFile) { Index: src/main/kotlin/platform/mixin/config/inspection/MixinConfigInspection.kt =================================================================== --- src/main/kotlin/platform/mixin/config/inspection/MixinConfigInspection.kt (revision 816437a2e84b22c7e5a262f9c6e55bed35d077df) +++ src/main/kotlin/platform/mixin/config/inspection/MixinConfigInspection.kt (revision 56b37648bc393ecfc073a42759ca05fc8461a3be) @@ -34,7 +34,7 @@ protected abstract fun buildVisitor(holder: ProblemsHolder): PsiElementVisitor private fun checkFile(file: PsiFile): Boolean { - return file.fileType === MixinConfigFileType && MixinModuleType.isInModule(file) + return file.fileType is MixinConfigFileType && MixinModuleType.isInModule(file) } final override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean): PsiElementVisitor { Index: src/main/kotlin/platform/mixin/config/reference/MixinConfigReferenceContributor.kt =================================================================== --- src/main/kotlin/platform/mixin/config/reference/MixinConfigReferenceContributor.kt (revision 816437a2e84b22c7e5a262f9c6e55bed35d077df) +++ src/main/kotlin/platform/mixin/config/reference/MixinConfigReferenceContributor.kt (revision 56b37648bc393ecfc073a42759ca05fc8461a3be) @@ -31,10 +31,14 @@ import com.intellij.psi.PsiReferenceRegistrar class MixinConfigReferenceContributor : PsiReferenceContributor() { - override fun registerReferenceProviders(registrar: PsiReferenceRegistrar) { + val anyMixinConfigFileType = StandardPatterns.or( + StandardPatterns.`object`(MixinConfigFileType.Json), + StandardPatterns.`object`(MixinConfigFileType.Json5) + ) + val pattern = PlatformPatterns.psiElement(JsonStringLiteral::class.java) - .inFile(PlatformPatterns.psiFile().withFileType(StandardPatterns.`object`(MixinConfigFileType))) + .inFile(PlatformPatterns.psiFile().withFileType(anyMixinConfigFileType)) registrar.registerReferenceProvider(pattern.isPropertyKey(), ConfigProperty) registrar.registerReferenceProvider(pattern.isPropertyValue("package"), MixinPackage) @@ -47,3 +51,4 @@ registrar.registerReferenceProvider(pattern.withParent(mixinList.isPropertyValue("client")), MixinClass) } } + Index: src/main/resources/META-INF/plugin.xml =================================================================== --- src/main/resources/META-INF/plugin.xml (revision 816437a2e84b22c7e5a262f9c6e55bed35d077df) +++ src/main/resources/META-INF/plugin.xml (revision 56b37648bc393ecfc073a42759ca05fc8461a3be) @@ -720,14 +720,22 @@ id="Find Mixins"/> - + + + +