diff --git a/src/main/kotlin/platform/mixin/config/MixinConfigFileType.kt b/src/main/kotlin/platform/mixin/config/MixinConfigFileType.kt index bd37ac5dd..a6cfb647c 100644 --- a/src/main/kotlin/platform/mixin/config/MixinConfigFileType.kt +++ b/src/main/kotlin/platform/mixin/config/MixinConfigFileType.kt @@ -22,22 +22,35 @@ package com.demonwav.mcdev.platform.mixin.config 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 { - - private val filenameRegex = "(^|\\.)mixins?(\\.[^.]+)*\\.json\$".toRegex() +interface MixinConfigFileType : FileTypeIdentifiableByVirtualFile { + fun getFilenameRegex() : Regex // 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 diff --git a/src/main/kotlin/platform/mixin/config/MixinConfigImportOptimizer.kt b/src/main/kotlin/platform/mixin/config/MixinConfigImportOptimizer.kt index 5bb35f5a0..c7f1ca12f 100644 --- a/src/main/kotlin/platform/mixin/config/MixinConfigImportOptimizer.kt +++ b/src/main/kotlin/platform/mixin/config/MixinConfigImportOptimizer.kt @@ -81,7 +81,7 @@ class MixinConfigImportOptimizer : ImportOptimizer { } } - 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) { diff --git a/src/main/kotlin/platform/mixin/config/inspection/MixinConfigInspection.kt b/src/main/kotlin/platform/mixin/config/inspection/MixinConfigInspection.kt index bdeac9bd1..37b4cdd4c 100644 --- a/src/main/kotlin/platform/mixin/config/inspection/MixinConfigInspection.kt +++ b/src/main/kotlin/platform/mixin/config/inspection/MixinConfigInspection.kt @@ -34,7 +34,7 @@ abstract class MixinConfigInspection : LocalInspectionTool() { 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 { diff --git a/src/main/kotlin/platform/mixin/config/reference/MixinConfigReferenceContributor.kt b/src/main/kotlin/platform/mixin/config/reference/MixinConfigReferenceContributor.kt index 5ffffbdc8..433df566d 100644 --- a/src/main/kotlin/platform/mixin/config/reference/MixinConfigReferenceContributor.kt +++ b/src/main/kotlin/platform/mixin/config/reference/MixinConfigReferenceContributor.kt @@ -31,10 +31,14 @@ import com.intellij.psi.PsiReferenceContributor 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 @@ class MixinConfigReferenceContributor : PsiReferenceContributor() { registrar.registerReferenceProvider(pattern.withParent(mixinList.isPropertyValue("client")), MixinClass) } } + diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 58b44c1bd..f01c10a05 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -720,14 +720,22 @@ id="Find Mixins"/> - + + + +