|
| 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 | +} |
0 commit comments