Skip to content

Commit 566d173

Browse files
committed
feat: add dependencies function provider and auto check #308
1 parent ed79d69 commit 566d173

File tree

3 files changed

+46
-4
lines changed

3 files changed

+46
-4
lines changed

core/src/main/kotlin/cc/unitmesh/devti/provider/BuildSystemProvider.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package cc.unitmesh.devti.provider
33
import cc.unitmesh.devti.template.context.DockerfileContext
44
import com.intellij.openapi.extensions.ExtensionPointName
55
import com.intellij.openapi.project.Project
6+
import com.intellij.psi.PsiFile
67
import com.intellij.serviceContainer.LazyExtensionInstance
78
import com.intellij.util.xmlb.annotations.Attribute
89

@@ -15,6 +16,13 @@ import com.intellij.util.xmlb.annotations.Attribute
1516
abstract class BuildSystemProvider : LazyExtensionInstance<BuildSystemProvider>() {
1617
abstract fun collect(project: Project): DockerfileContext?
1718

19+
/**
20+
* For PsiFile only for resolve in Sketch and Bridge mode
21+
*/
22+
open fun collectDependencies(project: Project, psiFile: PsiFile): List<DevPackage> {
23+
return emptyList()
24+
}
25+
1826
@Attribute("implementationClass")
1927
var implementationClass: String? = null
2028

@@ -23,7 +31,7 @@ abstract class BuildSystemProvider : LazyExtensionInstance<BuildSystemProvider>(
2331
}
2432

2533
companion object {
26-
private val EP_NAME: ExtensionPointName<BuildSystemProvider> =
34+
val EP_NAME: ExtensionPointName<BuildSystemProvider> =
2735
ExtensionPointName.create("cc.unitmesh.buildSystemProvider")
2836

2937
fun guess(project: Project): List<DockerfileContext> {

exts/ext-dependencies/src/233/main/kotlin/cc/unitmesh/dependencies/AutoDevDependenciesCheck.kt

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package cc.unitmesh.dependencies
22

3+
import cc.unitmesh.devti.provider.BuildSystemProvider
34
import com.intellij.openapi.actionSystem.ActionUpdateThread
45
import com.intellij.openapi.actionSystem.AnAction
56
import com.intellij.openapi.actionSystem.AnActionEvent
@@ -9,6 +10,8 @@ import com.intellij.packageChecker.api.BuildFileProvider
910
import com.intellij.packageChecker.service.PackageChecker
1011
import com.intellij.packageChecker.service.PackageService
1112
import com.intellij.psi.PsiManager
13+
import org.jetbrains.security.`package`.Package
14+
import org.jetbrains.security.`package`.PackageType
1215

1316
class AutoDevDependenciesCheck : AnAction("Check dependencies has Issues") {
1417
override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.EDT
@@ -37,10 +40,18 @@ class AutoDevDependenciesCheck : AnAction("Check dependencies has Issues") {
3740
val file = FileDocumentManager.getInstance().getFile(document) ?: return
3841
val psiFile = PsiManager.getInstance(project).findFile(file) ?: return
3942

40-
val dependencies = PackageService.getInstance(project).declaredDependencies(psiFile)
43+
val dependencies: List<Package> = BuildSystemProvider.EP_NAME.extensionList.map {
44+
it.collectDependencies(project, psiFile)
45+
}.flatten()
46+
.map {
47+
Package(PackageType.fromString(it.type), it.namespace, it.name, it.version, it.qualifiers, it.subpath)
48+
}
49+
4150
val checker = PackageChecker.getInstance(project)
42-
dependencies.forEach {
43-
checker.packageStatus(it.pkg)
51+
val statuses = dependencies.map {
52+
checker.packageStatus(it)
4453
}
54+
55+
println(statuses)
4556
}
4657
}

javascript/src/main/kotlin/cc/unitmesh/ide/javascript/provider/JavaScriptBuildSystemProvider.kt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,19 @@
11
package cc.unitmesh.ide.javascript.provider
22

33
import cc.unitmesh.devti.provider.BuildSystemProvider
4+
import cc.unitmesh.devti.provider.DevPackage
45
import cc.unitmesh.devti.template.context.DockerfileContext
56
import cc.unitmesh.ide.javascript.JsDependenciesSnapshot
67
import com.intellij.javascript.nodejs.PackageJsonData
8+
import com.intellij.javascript.nodejs.packageJson.NodeInstalledPackageFinder
9+
import com.intellij.json.psi.JsonFile
10+
import com.intellij.json.psi.JsonStringLiteral
711
import com.intellij.lang.javascript.buildTools.npm.NpmScriptsUtil
812
import com.intellij.lang.javascript.buildTools.npm.PackageJsonUtil
913
import com.intellij.openapi.application.runReadAction
1014
import com.intellij.openapi.project.Project
1115
import com.intellij.openapi.project.guessProjectDir
16+
import com.intellij.psi.PsiFile
1217

1318

1419
class JavaScriptBuildSystemProvider : BuildSystemProvider() {
@@ -34,12 +39,15 @@ class JavaScriptBuildSystemProvider : BuildSystemProvider() {
3439
snapshot.packages.containsKey("vite") -> {
3540
buildTool = "Vite"
3641
}
42+
3743
snapshot.packages.containsKey("webpack") -> {
3844
buildTool = "Webpack"
3945
}
46+
4047
snapshot.packages.containsKey("parcel") -> {
4148
buildTool = "Parcel"
4249
}
50+
4351
snapshot.packages.containsKey("rollup") -> {
4452
buildTool = "Rollup"
4553
}
@@ -49,12 +57,15 @@ class JavaScriptBuildSystemProvider : BuildSystemProvider() {
4957
snapshot.packages.containsKey("vue") -> {
5058
language = "Vue " + snapshot.packages["vue"]?.versionString()
5159
}
60+
5261
snapshot.packages.containsKey("react") -> {
5362
language = "React " + snapshot.packages["react"]?.versionString()
5463
}
64+
5565
snapshot.packages.containsKey("angular") -> {
5666
language = "Angular " + snapshot.packages["angular"]?.versionString()
5767
}
68+
5869
snapshot.packages.containsKey("next") -> {
5970
language = "Next.js " + snapshot.packages["next"]?.versionString()
6071
}
@@ -76,6 +87,18 @@ class JavaScriptBuildSystemProvider : BuildSystemProvider() {
7687
taskString = taskString
7788
)
7889
}
90+
91+
override fun collectDependencies(project: Project, psiFile: PsiFile): List<DevPackage> {
92+
val packageJson = psiFile as? JsonFile ?: return emptyList()
93+
return PackageJsonUtil.getDependencies(packageJson, PackageJsonUtil.PROD_DEV_DEPENDENCIES)
94+
.mapNotNull { jsonProperty ->
95+
val packageName = jsonProperty.name
96+
val version: String = (jsonProperty.value as? JsonStringLiteral)?.value ?: return@mapNotNull null
97+
98+
DevPackage("npm", name = packageName, version = version)
99+
}.toList()
100+
}
101+
79102
}
80103

81104
fun PackageJsonData.PackageJsonDependencyEntry.versionString(): String {

0 commit comments

Comments
 (0)