Skip to content

Commit

Permalink
feat: Give up try using Plugin way for Run Debug
Browse files Browse the repository at this point in the history
  • Loading branch information
bluelovers committed Feb 25, 2020
1 parent b9c49fc commit c75599c
Show file tree
Hide file tree
Showing 5 changed files with 132 additions and 61 deletions.
34 changes: 24 additions & 10 deletions resources/META-INF/plugin.xml
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
<idea-plugin url="https://github.com/bluelovers/idea-run-typescript">
<id>io.plugin.tsnode</id>
<name>Run Configuration for TypeScript</name>
<version>2020.2.19.0</version>
<vendor email="[email protected]" url="https://github.com/bluelovers/idea-run-typescript">bluelovers</vendor>
<version>2020.2.25.0</version>
<vendor email="[email protected]" url="https://github.com/bluelovers/idea-run-typescript">
bluelovers
</vendor>

<category>JavaScript</category>
<idea-version since-build="183.0"/>
Expand Down Expand Up @@ -45,8 +47,9 @@ IntelliJ IDEA (and WebStorm...) plugin to support 'TypeScript' as a run configur

<change-notes><![CDATA[
<ul>
<li>Add ability to run TSX files</li>
<li>Add ability to run TS scratch files</li>
<li>Build Plugin in IntelliJ IDEA 2019.2.4#IU-192.7142.36</li>
<li>Set Console output UTF-8 for avoid output as BIG5 and GBK</li>
<li>Support Debug from NodeJS Run Conf by https://github.com/nguyennk92/run-typescript-plugin</li>
</ul>
]]></change-notes>

Expand Down Expand Up @@ -81,17 +84,28 @@ IntelliJ IDEA (and WebStorm...) plugin to support 'TypeScript' as a run configur
description="Run TypeScript">
<add-to-group group-id="ProjectViewPopupMenuRunGroup" anchor="first"/>
<add-to-group group-id="EditorPopupMenu.Run" anchor="first"/>
</action>
</action-->

<action id="io.plugin.tsnode.action.DebugTsAction"
class="io.plugin.tsnode.action.DebugTsAction"
text="Debug TypeScript"
description="Debug TypeScript">
<add-to-group group-id="ProjectViewPopupMenuRunGroup" anchor="after" relative-to-action="io.plugin.tsnode.action.RunTsAction"/>
<add-to-group group-id="EditorPopupMenu.Run" anchor="after" relative-to-action="io.plugin.tsnode.action.RunTsAction"/>
</action>
<group id="MyPlugin.TestMeu"
<add-to-group
group-id="ProjectViewPopupMenuRunGroup"
anchor="first"
/>
<add-to-group
group-id="EditorPopupMenuDebug"
anchor="first"
/>
<add-to-group
group-id="EditorTabPopupMenuEx"
relative-to-action="RunContextPopupGroup"
anchor="before"
/>
</action>

<!--group id="MyPlugin.TestMeu"
text="Greeting"
description="Greeting menu">
<add-to-group group-id="MainMenu" anchor="last"/>
Expand Down
55 changes: 43 additions & 12 deletions src/io/plugin/tsnode/action/TsAction.kt
Original file line number Diff line number Diff line change
@@ -1,8 +1,14 @@
package io.plugin.tsnode.action

import com.intellij.execution.RunnerAndConfigurationSettings
import com.intellij.execution.ProgramRunnerUtil
import com.intellij.execution.RunManager
import com.intellij.execution.executors.DefaultDebugExecutor
import com.intellij.execution.executors.DefaultRunExecutor
import com.intellij.openapi.actionSystem.AnAction
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.actionSystem.DataKeys
import com.intellij.openapi.actionSystem.DataKeys.*
import com.intellij.openapi.diagnostic.Logger
import com.intellij.openapi.util.text.StringUtil
import com.intellij.openapi.vfs.VirtualFile
Expand All @@ -11,21 +17,17 @@ import io.plugin.tsnode.execution.TsExecutor
import io.plugin.tsnode.execution.TsUtil
import javax.swing.Icon
import com.intellij.openapi.project.DumbAware
import com.intellij.openapi.actionSystem.CommonDataKeys
import com.intellij.openapi.actionSystem.CommonDataKeys.VIRTUAL_FILE
import com.intellij.openapi.project.Project
import com.jetbrains.nodejs.run.NodeJsRunConfiguration
import com.jetbrains.nodejs.run.NodeJsRunConfigurationType

abstract class TsAction(icon: Icon = TsIcons.TypeScript): AnAction(icon), DumbAware
abstract class TsAction(icon: Icon = TsIcons.TypeScript) : AnAction(icon), DumbAware
{
public val LOG = Logger.getInstance(javaClass)

protected open val _debug: Boolean = false
protected open var _prefix: String = ""

init
{
if (StringUtil.isEmpty(_prefix))
{
_prefix = if (_debug) "Debug" else "Run"
}
}

override fun actionPerformed(event: AnActionEvent)
{
Expand All @@ -39,14 +41,42 @@ event.inputEvent.modifiers: ${event.inputEvent.modifiers.toString()}
""")
*/

TsExecutor.execute(event, isDebugAction())
//TsExecutor.execute(event, isDebugAction())

val project = event.getData(CommonDataKeys.PROJECT) as Project
val virtualFile = event.getData(CommonDataKeys.VIRTUAL_FILE) as VirtualFile

val runManager = RunManager.getInstance(event.project!!)
val type = NodeJsRunConfigurationType.getInstance()
val settings = runManager.createConfiguration(virtualFile.name, type)

val nodeJsRunConf = settings.configuration as NodeJsRunConfiguration

//LOG.info("working directory: ${nodeJsRunConf.workingDirectory}")

if (nodeJsRunConf.workingDirectory.isNullOrEmpty())
nodeJsRunConf.workingDirectory = project.basePath

nodeJsRunConf.inputPath = virtualFile.path

if (nodeJsRunConf.programParameters?.contains("--require ts-node/register") != true)
{
nodeJsRunConf.programParameters = "--require ts-node/register " + nodeJsRunConf.programParameters.orEmpty()
}

runManager.setTemporaryConfiguration(settings)

val executor =
if (isDebugAction()) DefaultDebugExecutor.getDebugExecutorInstance() else DefaultRunExecutor.getRunExecutorInstance()

ProgramRunnerUtil.executeConfiguration(settings, executor)
}

override fun update(event: AnActionEvent)
{
//LOG.info("""[update]""")

val virtualFile = event.getData(DataKeys.VIRTUAL_FILE) as VirtualFile
val virtualFile = event.getData(VIRTUAL_FILE) as VirtualFile

if (TsUtil.isTypeScript(virtualFile))
{
Expand All @@ -67,6 +97,7 @@ event.inputEvent.modifiers: ${event.inputEvent.modifiers.toString()}

protected fun _getText(virtualFile: VirtualFile): String
{
val _prefix = if (_debug) "Debug" else "Run"
return "${_prefix} '${virtualFile.name}'"
}
}
4 changes: 3 additions & 1 deletion src/io/plugin/tsnode/execution/TsExecutor.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ import com.jetbrains.nodejs.run.NodeJsRunConfiguration
//import com.jetbrains.nodejs.run.NodeJsRunConfigurationState
import com.jetbrains.nodejs.run.NodeJsRunConfigurationType
import io.plugin.tsnode.lib.TsLog
import com.intellij.openapi.actionSystem.CommonDataKeys
import com.intellij.openapi.actionSystem.CommonDataKeys.VIRTUAL_FILE

object TsExecutor
{
Expand All @@ -31,7 +33,7 @@ object TsExecutor
fun executable(event: AnActionEvent, debug: Boolean): Boolean
{
val project = event.project
val virtualFile = event.getData(DataKeys.VIRTUAL_FILE)
val virtualFile = event.getData(CommonDataKeys.VIRTUAL_FILE)
val module = event.getData(DataKeys.MODULE) as Module?

//LOG.info("[execute:executable] debug=$debug")
Expand Down
35 changes: 1 addition & 34 deletions src/io/plugin/tsnode/execution/TsRunConfigurationProducer.kt
Original file line number Diff line number Diff line change
Expand Up @@ -40,43 +40,10 @@ class TsRunConfigurationProducer : RunConfigurationProducer<TsRunConfiguration>(

//LOG.info("${psiFile.fileType}")

if (psiFile == null)
if (!TsUtil.isTypeScript(psiFile))
{
return false
}
else if (psiFile.fileType is TypeScriptFileType || psiFile.fileType is TypeScriptJSXFileType)
{
// support .ts and .tsx
}
else if (psiFile.fileType is ScratchFileType)
{
val ext = PathUtil.getFileExtension(psiFile.originalFile.toString())

//LOG.info("${location.virtualFile!!.canonicalPath}")
//LOG.info("${location.virtualFile!!.path}")

if ("ts" == ext || "tsx" == ext)
{

}
else
{
//LOG.info("${psiFile.fileType}")
//LOG.info("${psiFile.originalFile}")
//LOG.info("${psiFile.originalFile.fileType}")
//LOG.info("${psiFile.fileElementType}")
//LOG.info("${psiFile.originalFile.toString()}")
//LOG.info("${PathUtil.getFileExtension(psiFile.originalFile.toString())}")

return false
}
}
else
{
//LOG.warn("${psiFile.fileType}")

return false
}

val virtualFile = location.virtualFile ?: return false

Expand Down
65 changes: 61 additions & 4 deletions src/io/plugin/tsnode/execution/TsUtil.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,18 @@ import com.intellij.execution.configurations.RuntimeConfigurationException
import com.intellij.execution.executors.DefaultDebugExecutor
import com.intellij.execution.executors.DefaultRunExecutor
import com.intellij.execution.impl.RunnerAndConfigurationSettingsImpl
import com.intellij.ide.scratch.ScratchFileType
import com.intellij.javascript.nodejs.util.NodePackage
import com.intellij.lang.javascript.TypeScriptFileType
import com.intellij.lang.javascript.TypeScriptJSXFileType
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.actionSystem.DataKeys
import com.intellij.openapi.diagnostic.Logger
import com.intellij.openapi.fileTypes.FileType
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.text.StringUtil
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.psi.PsiFile
import com.intellij.util.PathUtil
import io.plugin.tsnode.lib.TsData
import io.plugin.tsnode.lib.TsLog
import java.io.File
Expand All @@ -27,14 +32,66 @@ object TsUtil

val LOG = TsLog(javaClass)

val logger2 = Logger.getInstance(javaClass)
//val logger2 = Logger.getInstance(javaClass)

private val configurations = HashMap<String, RunnerAndConfigurationSettingsImpl>()

fun isTypeScript(psiFile: PsiFile): Boolean
{
if (psiFile !== null)
{
if (psiFile.fileType is TypeScriptFileType || psiFile.fileType is TypeScriptJSXFileType)
{
return true
}
else if (psiFile.fileType is ScratchFileType)
{
val ext = PathUtil.getFileExtension(psiFile.originalFile.toString())

if ("ts" == ext || "tsx" == ext)
{
return true
}

//LOG.info("${psiFile.fileType}")
//LOG.info("${psiFile.originalFile}")
//LOG.info("${psiFile.originalFile.fileType}")
//LOG.info("${psiFile.fileElementType}")
//LOG.info("${psiFile.originalFile.toString()}")
//LOG.info("${PathUtil.getFileExtension(psiFile.originalFile.toString())}")

LOG.info("[isTypeScript] ${ext}")
}

LOG.info("[isTypeScript] ${psiFile.fileType}")
}
return false
}

fun isTypeScript(virtualFile: VirtualFile): Boolean
{
val fileType = virtualFile.fileType.javaClass.name
return TypeScriptFileType == fileType || FileTypeJSXClassName == fileType
if (virtualFile !== null)
{
if (virtualFile.fileType is TypeScriptFileType || virtualFile.fileType is TypeScriptJSXFileType)
{
return true
}
else if (virtualFile.fileType is ScratchFileType)
{
//val ext = PathUtil.getFileExtension(virtualFile.extension.toString())
val ext = virtualFile.extension.toString()

if ("ts" == ext || "tsx" == ext)
{
return true
}

LOG.info("[isTypeScript] ${ext}")
}

LOG.info("[isTypeScript] ${virtualFile.fileType}")
}
return false
}

fun compatibleFiles(event: AnActionEvent): List<VirtualFile>
Expand Down

0 comments on commit c75599c

Please sign in to comment.