Skip to content

Commit 8d01da3

Browse files
committed
feat(go): add GoStructContextBuilder and GoStructContextBuilderTest
This commit adds the `GoStructContextBuilder` class, which is responsible for building the class context for Go struct types. It also adds the corresponding test class `GoStructContextBuilderTest`. These additions enhance the functionality of the Go plugin in Goland.
1 parent 5b89fc5 commit 8d01da3

File tree

3 files changed

+47
-0
lines changed

3 files changed

+47
-0
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package cc.unitmesh.go.context
2+
3+
import cc.unitmesh.devti.context.ClassContext
4+
import cc.unitmesh.devti.context.builder.ClassContextBuilder
5+
import com.goide.psi.GoMethodDeclaration
6+
import com.goide.psi.GoTypeDeclaration
7+
import com.goide.psi.GoTypeSpec
8+
import com.intellij.psi.PsiElement
9+
10+
class GoStructContextBuilder : ClassContextBuilder {
11+
override fun getClassContext(psiElement: PsiElement, gatherUsages: Boolean): ClassContext? {
12+
if (psiElement !is GoTypeDeclaration && psiElement !is GoTypeSpec) {
13+
return null
14+
}
15+
16+
val typeSpecs: List<GoTypeSpec> = when (psiElement) {
17+
is GoTypeSpec -> listOf(psiElement)
18+
is GoTypeDeclaration -> psiElement.typeSpecList
19+
else -> emptyList()
20+
}
21+
22+
val methodPairs = typeSpecs.flatMap { type ->
23+
val methods = type.methods
24+
methods.map { method -> method to type.name }
25+
}
26+
27+
val methods = methodPairs.map { it.first }
28+
.filterIsInstance<GoMethodDeclaration>()
29+
30+
val name = when (psiElement) {
31+
is GoTypeSpec -> psiElement.name
32+
is GoTypeDeclaration -> psiElement.text
33+
else -> null
34+
}
35+
36+
return ClassContext(
37+
psiElement, psiElement.text, name, methods, emptyList(), emptyList(), emptyList()
38+
)
39+
}
40+
}

goland/src/main/resources/cc.unitmesh.goland.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22
<!--suppress PluginXmlValidity -->
33
<dependencies>
44
<plugin id="org.jetbrains.plugins.go"/>
5+
<plugin id="com.intellij.modules.goland"/>
56
</dependencies>
67

78
<extensions defaultExtensionNs="cc.unitmesh">
9+
<classContextBuilder language="go" implementationClass="cc.unitmesh.go.context.GoStructContextBuilder"/>
810
<methodContextBuilder language="go" implementationClass="cc.unitmesh.go.context.GoMethodContextBuilder"/>
911

1012
<chatContextProvider implementation="cc.unitmesh.go.provider.GoVersionChatContextProvider"/>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package cc.unitmesh.go.context;
2+
3+
class GoStructContextBuilderTest {
4+
5+
}

0 commit comments

Comments
 (0)