Text Munging mini-plugin
August 20, 2014 ยท View on GitHub
import com.intellij.openapi.actionSystem.AnActionEvent import com.intellij.openapi.editor.Document import com.intellij.testFramework.MapDataContext
import static liveplugin.PluginUtil.*
registerAction("MungeText", "ctrl alt shift M") { AnActionEvent event -> def project = event.project showPopupMenu([ "Group by": { def keyRegex = showInputDialog("Regex to group by (must have a capturing group):", "Group by") if (keyRegex == null) return def separator = showInputDialog("String to join with:", "Group by") runDocumentWriteAction(project, currentDocumentIn(project)) { Document document -> document.text = document.text.split("\n") .groupBy { def matcher = (it =~ keyRegex) matcher.matches() ?matcher.group(1) : "" } .values().collect{ it.join(separator) } .join("\n") } }, "Sort": { runDocumentWriteAction(project, currentDocumentIn(project)) { Document document -> document.text = document.text.split("\n").sort().join("\n") } }, "Join": { def separator = showInputDialog("Join with text:", "Join lines") if (separator == null) return runDocumentWriteAction(project, currentDocumentIn(project)) { Document document -> document.text = document.text.replaceAll("\n", separator) } }, "Split": { def separator = showInputDialog("Split text on string:", "Split text") if (separator == null) return runDocumentWriteAction(project, currentDocumentIn(project)) { Document document -> document.text = document.text.replaceAll(separator, "\n") } }, "Unique": { runDocumentWriteAction(project, currentDocumentIn(project)) { Document document -> document.text = document.text.split("\n").toList().unique().join("\n") } }, "Keep Lines": { def text = showInputDialog("Keep lines with text:", "Keep lines") if (text == null) return runDocumentWriteAction(project, currentDocumentIn(project)) { Document document -> document.text = document.text.split("\n").findAll{ it.matches(".?" + text + ".") }.join("\n") } }, "Delete Lines": { def text = showInputDialog("Delete lines with text:", "Delete lines") if (text == null) return runDocumentWriteAction(project, currentDocumentIn(project)) { Document document -> document.text = document.text.split("\n").findAll{ !it.matches(".?" + text + ".") }.join("\n") } } ], "Munge Text") } if (!isIdeStartup) show("Reloaded text munging")