Skip to content

Commit c0f3832

Browse files
authored
Merge pull request #1 from Pakisan/feat/autocompletion
feat: autocompletion
2 parents a3d2642 + 4770a0f commit c0f3832

File tree

50 files changed

+2779
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+2779
-0
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.github.pakisan.arazzoideaplugin.extensions.completion
2+
3+
import com.github.pakisan.arazzoideaplugin.ArazzoSpecificationRecognizer
4+
import com.intellij.openapi.components.Service
5+
import com.intellij.openapi.components.service
6+
import com.intellij.openapi.project.Project
7+
import com.intellij.openapi.vfs.VfsUtil
8+
import com.intellij.psi.PsiFile
9+
import com.intellij.util.ResourceUtil
10+
import com.jetbrains.jsonSchema.ide.JsonSchemaService
11+
import com.jetbrains.jsonSchema.impl.JsonSchemaObject
12+
import kotlin.jvm.javaClass
13+
14+
/**
15+
* Provides Arazzo JSON Schema
16+
*
17+
* @author Pavel Bodiachevskii
18+
* @since 1.1.0
19+
*/
20+
@Service
21+
class ArazzoJsonSchemaProvider {
22+
23+
private val arazzoSpecificationRecognizer = service<ArazzoSpecificationRecognizer>()
24+
25+
fun provide(file: PsiFile, project: Project): JsonSchemaObject? {
26+
val arazzoVersion = arazzoSpecificationRecognizer.extractArazzoKey(file)
27+
arazzoVersion ?: return null
28+
29+
if (!arazzoSpecificationRecognizer.isSupported(arazzoVersion)) {
30+
return null
31+
}
32+
33+
val arazzoJsonSchemaURL = ResourceUtil.getResource(javaClass.classLoader, "schema", "arazzo-1.0.0.json")
34+
val arazzoJsonSchemaFile = VfsUtil.findFileByURL(arazzoJsonSchemaURL)
35+
arazzoJsonSchemaFile ?: return null
36+
37+
val jsonSchemaService = JsonSchemaService.Impl.get(project)
38+
val arazzoJsonSchemaObject = jsonSchemaService.getSchemaObjectForSchemaFile(arazzoJsonSchemaFile)
39+
arazzoJsonSchemaObject ?: return null
40+
41+
return arazzoJsonSchemaObject
42+
}
43+
44+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.github.pakisan.arazzoideaplugin.extensions.completion
2+
3+
import com.intellij.codeInsight.completion.CompletionContributor
4+
import com.intellij.codeInsight.completion.CompletionParameters
5+
import com.intellij.codeInsight.completion.CompletionResultSet
6+
import com.intellij.openapi.components.service
7+
import com.jetbrains.jsonSchema.impl.JsonSchemaCompletionContributor
8+
9+
/**
10+
* Provides JSON Schema completion contributor
11+
*
12+
* @author Pavel Bodiachevskii
13+
* @since 1.1.0
14+
*/
15+
class ArazzoSpecificationCompletionContributor: CompletionContributor() {
16+
17+
private val arazzoJsonSchemaProvider = service<ArazzoJsonSchemaProvider>()
18+
19+
override fun fillCompletionVariants(
20+
parameters: CompletionParameters,
21+
result: CompletionResultSet
22+
) {
23+
val arazzoJsonSchemaObject = arazzoJsonSchemaProvider.provide(parameters.originalFile, parameters.position.project)
24+
arazzoJsonSchemaObject ?: return
25+
26+
JsonSchemaCompletionContributor.doCompletion(parameters, result, arazzoJsonSchemaObject, false)
27+
}
28+
29+
}

src/main/resources/META-INF/description.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ <h3>✅ Key Features</h3>
1313
<h4>1. Smart File Recognition</h4>
1414
<p>Automatically detects <code>.yaml</code>, <code>.yml</code>, and <code>.json</code> files that follow the Arazzo schema</p>
1515

16+
<h4>2. Context-Aware Autocompletion</h4>
17+
<p>Get intelligent code completion for workflows, workflow steps, source descriptions, and components</p>
18+
1619
<h3>🛠 Who It's For</h3>
1720
<ul>
1821
<li>Arazzo spec authors</li>

src/main/resources/META-INF/plugin.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
<!-- Icons to render when working with Arazzo files -->
1616
<iconProvider implementation="com.github.pakisan.arazzoideaplugin.extensions.icon.ArazzoIconProvider" id="arazzoIconProvider" order="first"/>
1717

18+
<!-- AsyncAPI specification completion -->
19+
<completion.contributor language="JSON" implementationClass="com.github.pakisan.arazzoideaplugin.extensions.completion.ArazzoSpecificationCompletionContributor"/>
20+
<completion.contributor language="yaml" implementationClass="com.github.pakisan.arazzoideaplugin.extensions.completion.ArazzoSpecificationCompletionContributor"/>
21+
1822
</extensions>
1923

2024
<actions>

0 commit comments

Comments
 (0)