Przeglądaj źródła

Merge pull request #64 from windchargerj/feature=xmake_lua_file_auto_save

Add the auto-save feature for xmake.lua files after changes
ruki 5 miesięcy temu
rodzic
commit
a7778421b4

+ 18 - 0
src/main/kotlin/io/xmake/file/XMakeLuaFileChangeListener.kt

@@ -0,0 +1,18 @@
+package io.xmake.file
+
+import com.intellij.openapi.fileEditor.FileDocumentManager
+import com.intellij.psi.PsiFile
+import com.intellij.psi.PsiTreeAnyChangeAbstractAdapter
+
+class XMakeLuaFileChangeListener : PsiTreeAnyChangeAbstractAdapter() {
+    private val fileDocumentManager = FileDocumentManager.getInstance()
+
+    override fun onChange(file: PsiFile?) {
+        file?.let {
+            if (XMakeLuaFileType.isFileOfType(file.virtualFile)) {
+                println("${file.name} on change")
+                fileDocumentManager.saveDocument(it.fileDocument)
+            }
+        }
+    }
+}

+ 47 - 0
src/main/kotlin/io/xmake/file/XMakeLuaFileType.kt

@@ -0,0 +1,47 @@
+package io.xmake.file
+
+import com.intellij.lang.Language
+import com.intellij.openapi.fileTypes.FileTypeManager
+import com.intellij.openapi.fileTypes.LanguageFileType
+import com.intellij.openapi.fileTypes.PlainTextLanguage
+import com.intellij.openapi.vfs.VirtualFile
+import io.xmake.icons.XMakeIcons
+import org.jetbrains.annotations.Contract
+import javax.swing.Icon
+
+object XMakeLuaFileType : LanguageFileType(XMakeLuaLanguage) {
+
+    const val FILE_NAME: String = "xmake.lua"
+    val INSTANCE: XMakeLuaFileType = XMakeLuaFileType
+
+    override fun getName(): String {
+        return FILE_NAME
+    }
+
+    override fun getDescription(): String {
+        return "XMake Lua file"
+    }
+
+    override fun getDefaultExtension(): String {
+        return "lua"
+    }
+
+    override fun getIcon(): Icon {
+        return XMakeIcons.FILE
+    }
+
+    override fun getDisplayName(): String {
+        return "XMake Lua"
+    }
+
+
+    private fun findLanguage(): Language {
+        return Language.findLanguageByID("xmake.lua") ?: PlainTextLanguage.INSTANCE
+    }
+
+    @Contract("null->false")
+    fun isFileOfType(file: VirtualFile?): Boolean {
+        return file != null && FileTypeManager.getInstance().isFileOfType(file, INSTANCE)
+    }
+
+}

+ 8 - 0
src/main/kotlin/io/xmake/file/XMakeLuaLanguage.kt

@@ -0,0 +1,8 @@
+package io.xmake.file
+
+import com.intellij.lang.Language
+
+object XMakeLuaLanguage : Language("xmake.lua") {
+    private fun readResolve(): Any = XMakeLuaLanguage
+    val INSTANCE: XMakeLuaLanguage = XMakeLuaLanguage
+}

+ 6 - 0
src/main/resources/META-INF/plugin.xml

@@ -52,6 +52,12 @@
         <!-- notifications -->
         <notificationGroup id="XMake" displayType="BALLOON"/>
 
+        <fileType name="xmake.lua" language="xmake.lua" fieldName="INSTANCE"
+                  fileNames="xmake.lua" fileNamesCaseInsensitive="xmake.lua"
+                  implementationClass="io.xmake.file.XMakeLuaFileType"/>
+
+        <psi.treeChangeListener implementation="io.xmake.file.XMakeLuaFileChangeListener"/>
+
     </extensions>
 
     <!--