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