Skip to content

Commit bd5d893

Browse files
committed
feat(go): add GoBuildSystemProvider for dependency management #308
Implement GoBuildSystemProvider to collect and manage dependencies in Go projects. The provider extracts module specifications and converts them into DevPackage objects for further processing.
1 parent b784624 commit bd5d893

File tree

2 files changed

+48
-0
lines changed

2 files changed

+48
-0
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package cc.unitmesh.go.provider
2+
3+
import cc.unitmesh.devti.provider.BuildSystemProvider
4+
import cc.unitmesh.devti.provider.DevPackage
5+
import cc.unitmesh.devti.template.context.DockerfileContext
6+
import com.goide.vgo.mod.psi.VgoModuleSpec
7+
import com.goide.vgo.mod.psi.VgoRequireDirective
8+
import com.goide.vgo.project.VgoDependency
9+
import com.intellij.openapi.project.Project
10+
import com.intellij.psi.PsiFile
11+
import com.intellij.psi.util.PsiTreeUtil
12+
13+
class GoBuildSystemProvider : BuildSystemProvider() {
14+
override fun collect(project: Project): DockerfileContext? {
15+
return null
16+
}
17+
18+
override fun collectDependencies(
19+
project: Project,
20+
psiFile: PsiFile
21+
): List<DevPackage> {
22+
return getDependencies(psiFile)
23+
.mapNotNull { vgoModuleSpec -> toPackage(vgoModuleSpec) }
24+
.toList()
25+
}
26+
27+
fun getDependencies(modFile: PsiFile): List<VgoModuleSpec> {
28+
return PsiTreeUtil.getChildrenOfTypeAsList(modFile, VgoRequireDirective::class.java)
29+
.flatMap { requireDirective ->
30+
PsiTreeUtil.getChildrenOfTypeAsList(requireDirective, VgoModuleSpec::class.java)
31+
}
32+
}
33+
34+
fun toPackage(dependency: VgoDependency): DevPackage? {
35+
val version = dependency.version ?: return null
36+
val importPath = dependency.importPath
37+
val lowerCase = importPath.lowercase()
38+
return DevPackage("go", null, lowerCase, version)
39+
}
40+
41+
fun toPackage(moduleSpec: VgoModuleSpec): DevPackage? {
42+
val version = moduleSpec.moduleVersion ?: return null
43+
val name = moduleSpec.identifier.text.lowercase()
44+
return DevPackage("go", null, name, version.text)
45+
}
46+
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
<livingDocumentation language="go" implementationClass="cc.unitmesh.go.provider.GoLivingDocumentationProvider"/>
2020

21+
<buildSystemProvider implementation="cc.unitmesh.go.provider.GoBuildSystemProvider"/>
22+
2123
<langSketchProvider implementation="cc.unitmesh.go.provider.GoLangPlaygroundSketchProvider"/>
2224
</extensions>
2325
</idea-plugin>

0 commit comments

Comments
 (0)