Skip to content

Commit b6d2953

Browse files
committed
Add the actual plugin code
Converted from old Java project.
1 parent 0cd44df commit b6d2953

File tree

10 files changed

+148
-135
lines changed

10 files changed

+148
-135
lines changed

CHANGELOG.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
# AvaJavaScriptTestRunnerRunConfigurationGenerator Changelog
44

5-
## [Unreleased]
5+
## [1.3]
6+
67
### Added
7-
- Initial scaffold created from [IntelliJ Platform Plugin Template](https://github.com/JetBrains/intellij-platform-plugin-template)
8+
9+
- Old Java project imported and converted to Kotlin
10+
- Initial scaffold created
11+
from [IntelliJ Platform Plugin Template](https://github.com/JetBrains/intellij-platform-plugin-template)

gradle.properties

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# IntelliJ Platform Artifacts Repositories
22
# -> https://plugins.jetbrains.com/docs/intellij/intellij-artifacts.html
33

4-
pluginGroup = com.github.eirikb.avajavascripttestrunnerrunconfigurationgenerator
4+
pluginGroup = no.eirikb.avatest
55
pluginName = AvaJavaScriptTestRunnerRunConfigurationGenerator
66
pluginVersion = 0.0.1
77
pluginSinceBuild = 202
@@ -10,12 +10,12 @@ pluginUntilBuild = 203.*
1010
# See https://jb.gg/intellij-platform-builds-list for available build versions
1111
pluginVerifierIdeVersions = 2020.2.4, 2020.3.2, 2021.1
1212

13-
platformType = IC
13+
platformType = IU
1414
platformVersion = 2020.2.4
1515
platformDownloadSources = true
1616
# Plugin Dependencies -> https://plugins.jetbrains.com/docs/intellij/plugin-dependencies.html
1717
# Example: platformPlugins = com.intellij.java, com.jetbrains.php:203.4449.22
18-
platformPlugins =
18+
platformPlugins = JavaScript, NodeJS
1919

2020
# Opt-out flag for bundling Kotlin standard library.
2121
# See https://kotlinlang.org/docs/reference/using-gradle.html#dependency-on-the-standard-library for details.

src/main/kotlin/com/github/eirikb/avajavascripttestrunnerrunconfigurationgenerator/MyBundle.kt

Lines changed: 0 additions & 21 deletions
This file was deleted.

src/main/kotlin/com/github/eirikb/avajavascripttestrunnerrunconfigurationgenerator/listeners/MyProjectManagerListener.kt

Lines changed: 0 additions & 13 deletions
This file was deleted.

src/main/kotlin/com/github/eirikb/avajavascripttestrunnerrunconfigurationgenerator/services/MyApplicationService.kt

Lines changed: 0 additions & 10 deletions
This file was deleted.

src/main/kotlin/com/github/eirikb/avajavascripttestrunnerrunconfigurationgenerator/services/MyProjectService.kt

Lines changed: 0 additions & 11 deletions
This file was deleted.
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
package no.eirikb.avatest.actions
2+
3+
import com.intellij.execution.RunManager
4+
import com.intellij.execution.RunnerAndConfigurationSettings
5+
import com.intellij.execution.configurations.ConfigurationFactory
6+
import com.intellij.execution.executors.DefaultRunExecutor
7+
import com.intellij.execution.runners.ExecutionUtil
8+
import com.intellij.lang.javascript.psi.JSCallExpression
9+
import com.intellij.lang.javascript.psi.JSExpression
10+
import com.intellij.lang.javascript.psi.JSLiteralExpression
11+
import com.intellij.notification.Notification
12+
import com.intellij.notification.NotificationType
13+
import com.intellij.notification.Notifications
14+
import com.intellij.openapi.actionSystem.AnAction
15+
import com.intellij.openapi.actionSystem.AnActionEvent
16+
import com.intellij.openapi.actionSystem.CommonDataKeys
17+
import com.intellij.openapi.actionSystem.PlatformDataKeys
18+
import com.intellij.openapi.fileEditor.FileDocumentManager
19+
import com.intellij.psi.PsiElement
20+
import com.jetbrains.nodejs.run.NodeJsRunConfiguration
21+
import java.nio.file.Paths
22+
23+
class AvaJavaScriptTestRunnerRunConfigurationGenerator : AnAction() {
24+
private fun writeError(text: String) {
25+
val notification =
26+
Notification(
27+
"no.eirikb.avatest",
28+
"AVA test run configuration generator error",
29+
text,
30+
NotificationType.ERROR
31+
)
32+
Notifications.Bus.notify(notification)
33+
}
34+
35+
private fun getTestName(element: PsiElement?): String? {
36+
if (element == null) {
37+
return null
38+
}
39+
if (element is JSCallExpression) {
40+
val jsCallExpression: JSCallExpression = element
41+
val method: JSExpression? = jsCallExpression.methodExpression
42+
if (method?.text.equals("test")) {
43+
val arguments: Array<JSExpression> = jsCallExpression.arguments
44+
if (arguments.isNotEmpty()) {
45+
if (arguments[0] is JSLiteralExpression) {
46+
val expression: JSLiteralExpression = arguments[0] as JSLiteralExpression
47+
return expression.stringValue
48+
}
49+
}
50+
return null
51+
}
52+
}
53+
return getTestName(element.parent)
54+
}
55+
56+
override fun actionPerformed(e: AnActionEvent) {
57+
val project = e.project
58+
if (project == null) {
59+
writeError("Project not found")
60+
return
61+
}
62+
val editor = e.getRequiredData(CommonDataKeys.EDITOR)
63+
val currentFile = FileDocumentManager.getInstance().getFile(editor.document)
64+
if (currentFile == null) {
65+
writeError("Current file not found")
66+
return
67+
}
68+
var testName: String? = null
69+
val file = e.getData(PlatformDataKeys.PSI_FILE)
70+
if (file != null) {
71+
val element = file.findElementAt(editor.caretModel.offset)
72+
testName = getTestName(element)
73+
}
74+
val filePath = currentFile.path
75+
val fileName = Paths.get(filePath).fileName.toString()
76+
val node: NodeJsRunConfiguration? =
77+
NodeJsRunConfiguration.getDefaultRunConfiguration(project)?.clone() as NodeJsRunConfiguration?
78+
if (node == null) {
79+
writeError("NodeJS run configuration type not found")
80+
return
81+
}
82+
val factory: ConfigurationFactory? = node.factory
83+
if (factory == null) {
84+
writeError("Factory not found")
85+
return
86+
}
87+
node.workingDirectory = project.basePath
88+
node.inputPath = "node_modules/ava/cli.js"
89+
if (testName != null) {
90+
node.name = "ava $fileName $testName"
91+
node.applicationParameters = "-m \"$testName\" -v $fileName"
92+
} else {
93+
node.name = "ava $fileName"
94+
node.applicationParameters = "-v $fileName"
95+
}
96+
val runManager = RunManager.getInstance(project)
97+
val configuration: RunnerAndConfigurationSettings = runManager.createConfiguration(node, factory)
98+
runManager.addConfiguration(configuration, false)
99+
runManager.selectedConfiguration = configuration
100+
ExecutionUtil.runConfiguration(configuration, DefaultRunExecutor.getRunExecutorInstance())
101+
}
102+
}
Lines changed: 36 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,41 @@
11
<idea-plugin>
2-
<id>com.github.eirikb.avajavascripttestrunnerrunconfigurationgenerator</id>
3-
<name>AvaJavaScriptTestRunnerRunConfigurationGenerator</name>
4-
<vendor>eirikb</vendor>
2+
<id>no.eirikb.avatest</id>
3+
<name>AVA Test Run Configuration Generator</name>
4+
<version>1.3</version>
5+
<vendor email="[email protected]">Eirik Brandtzæg</vendor>
56

6-
<!-- Product and plugin compatibility requirements -->
7-
<!-- https://plugins.jetbrains.com/docs/intellij/plugin-compatibility.html -->
8-
<depends>com.intellij.modules.platform</depends>
7+
<description><![CDATA[
8+
<h1>Generates a run configuration for AVA JavaScript test runner</h1>
9+
<p>
10+
This is a workaround while we wait for proper AVA support, see
11+
<a href="https://youtrack.jetbrains.com/issue/WEB-21788">https://youtrack.jetbrains.com/issue/WEB-21788</a>.<br/>
12+
</p>
13+
<h3>Usage</h3>
14+
<p>
15+
Place caret inside a test and press <b>ctrl</b> + <b>alt</b> + <b>shift</b> + <b>a</b>. <br/>
16+
This should generate and start a new run configuration. <br/>
17+
If caret is outside of a test it should generate and start a run configuration for the file. <br/>
18+
</p>
19+
<h3>P.S.</h3>
20+
<p>
21+
Any feedback and request can be sent to [email protected].<br/>
22+
I haven't made a plugin before, I have no idea what I'm doing.
23+
</p>
24+
]]></description>
925

10-
<extensions defaultExtensionNs="com.intellij">
11-
<applicationService serviceImplementation="com.github.eirikb.avajavascripttestrunnerrunconfigurationgenerator.services.MyApplicationService"/>
12-
<projectService serviceImplementation="com.github.eirikb.avajavascripttestrunnerrunconfigurationgenerator.services.MyProjectService"/>
13-
</extensions>
26+
<idea-version since-build="173.0"/>
27+
<depends>com.intellij.modules.lang</depends>
28+
<depends>JavaScript</depends>
29+
<depends>NodeJS</depends>
1430

15-
<applicationListeners>
16-
<listener class="com.github.eirikb.avajavascripttestrunnerrunconfigurationgenerator.listeners.MyProjectManagerListener"
17-
topic="com.intellij.openapi.project.ProjectManagerListener"/>
18-
</applicationListeners>
31+
<extensions defaultExtensionNs="com.intellij"/>
32+
33+
<actions>
34+
<action id="AvaJavaScriptTestRunnerRunConfigurationGenerator"
35+
class="no.eirikb.avatest.actions.AvaJavaScriptTestRunnerRunConfigurationGenerator"
36+
text="AvaJavaScriptTestRunnerRunConfigurationGenerator"
37+
description="AvaJavaScriptTestRunnerRunConfigurationGenerator">
38+
<keyboard-shortcut keymap="$default" first-keystroke="shift ctrl alt A"/>
39+
</action>
40+
</actions>
1941
</idea-plugin>
Lines changed: 1 addition & 58 deletions
Loading

src/main/resources/messages/MyBundle.properties

Lines changed: 0 additions & 3 deletions
This file was deleted.

0 commit comments

Comments
 (0)