Skip to content

Commit 2c158ea

Browse files
committed
feat(http): add support for executing HTTP requests from files #198
Integrate file support for executing HTTP requests in HttpClientProvider.
1 parent 8434fd3 commit 2c158ea

File tree

4 files changed

+39
-6
lines changed

4 files changed

+39
-6
lines changed
Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,36 @@
11
package cc.unitmesh.http
22

3-
class IntellijHttpClientExecutor {
3+
import cc.unitmesh.devti.provider.http.HttpClientProvider
4+
import com.intellij.execution.Executor
5+
import com.intellij.execution.RunnerAndConfigurationSettings
6+
import com.intellij.execution.actions.ConfigurationContext
7+
import com.intellij.execution.actions.ConfigurationFromContext
8+
import com.intellij.execution.actions.RunConfigurationProducer
9+
import com.intellij.httpClient.http.request.HttpRequestPsiFile
10+
import com.intellij.httpClient.http.request.run.HttpRequestExecutorExtensionFactory
11+
import com.intellij.httpClient.http.request.run.HttpRequestRunConfigurationExecutor
12+
import com.intellij.httpClient.http.request.run.config.HttpFileRuntimeConfigurationProducer
13+
import com.intellij.openapi.project.Project
14+
import com.intellij.openapi.vfs.VirtualFile
15+
import com.intellij.psi.PsiManager
16+
17+
class IntellijHttpClientExecutor : HttpClientProvider {
18+
override fun execute(project: Project, virtualFile: VirtualFile, text: String) {
19+
val psiFile: HttpRequestPsiFile =
20+
PsiManager.getInstance(project).findFile(virtualFile) as? HttpRequestPsiFile ?: return
21+
22+
val producer = RunConfigurationProducer.getInstance(
23+
HttpFileRuntimeConfigurationProducer::class.java
24+
)
25+
26+
val runner: RunnerAndConfigurationSettings = ConfigurationContext(psiFile).configurationsFromContext?.firstOrNull {
27+
val configuration = it.configuration as? RunnerAndConfigurationSettings
28+
configuration?.configuration?.name == "HttpRequest"
29+
}?.configurationSettings ?: return
30+
31+
val executor: Executor = HttpRequestExecutorExtensionFactory.getRunExtension().executor ?: return
32+
HttpRequestRunConfigurationExecutor.getInstance().execute(
33+
project, runner, executor
34+
)
35+
}
436
}

exts/ext-http-client/src/main/resources/cc.unitmesh.httpclient.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<plugin id="com.jetbrains.restClient"/>
55
</dependencies>
66

7-
<actions>
8-
9-
</actions>
7+
<extensions defaultExtensionNs="cc.unitmesh">
8+
<httpClientExecutor implementation="cc.unitmesh.http.IntellijHttpClientExecutor"/>
9+
</extensions>
1010
</idea-plugin>

src/main/kotlin/cc/unitmesh/devti/gui/snippet/AutoDevRunDevInsAction.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class AutoDevRunDevInsAction : DumbAwareAction() {
3838
when (language) {
3939
"http request" -> {
4040
// call http request processor
41-
HttpClientProvider.all().forEach { it.execute(project, text) }
41+
HttpClientProvider.all().forEach { it.execute(project, file, text) }
4242
}
4343

4444
"DevIn" -> {

src/main/kotlin/cc/unitmesh/devti/provider/http/HttpClientProvider.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ package cc.unitmesh.devti.provider.http
22

33
import com.intellij.openapi.extensions.ExtensionPointName
44
import com.intellij.openapi.project.Project
5+
import com.intellij.openapi.vfs.VirtualFile
56

67
interface HttpClientProvider {
78

8-
fun execute(project: Project, text: String)
9+
fun execute(project: Project, virtualFile: VirtualFile, text: String)
910

1011
companion object {
1112
private val EP_NAME: ExtensionPointName<HttpClientProvider> =

0 commit comments

Comments
 (0)