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"/>
-
+
+
+
+