|  | 
|  | 1 | +// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. | 
|  | 2 | +// SPDX-License-Identifier: Apache-2.0 | 
|  | 3 | + | 
|  | 4 | +package software.aws.toolkits.jetbrains.services.amazonq.lsp.dependencies.providers | 
|  | 5 | + | 
|  | 6 | +import com.intellij.openapi.module.Module | 
|  | 7 | +import com.jetbrains.python.packaging.management.PythonPackageManager | 
|  | 8 | +import com.jetbrains.python.sdk.PythonSdkUtil | 
|  | 9 | +import software.aws.toolkits.jetbrains.services.amazonq.lsp.dependencies.ModuleDependencyProvider | 
|  | 10 | +import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.dependencies.DidChangeDependencyPathsParams | 
|  | 11 | + | 
|  | 12 | +internal class PythonModuleDependencyProvider : ModuleDependencyProvider { | 
|  | 13 | +    override fun isApplicable(module: Module): Boolean = | 
|  | 14 | +        PythonSdkUtil.findPythonSdk(module) != null | 
|  | 15 | + | 
|  | 16 | +    override fun createParams(module: Module): DidChangeDependencyPathsParams { | 
|  | 17 | +        val dependencies = mutableListOf<String>() | 
|  | 18 | + | 
|  | 19 | +        PythonSdkUtil.findPythonSdk(module)?.let { sdk -> | 
|  | 20 | +            PythonSdkUtil.getSitePackagesDirectory(sdk)?.let { sitePackagesDir -> | 
|  | 21 | +                val packageManager = PythonPackageManager.forSdk(module.project, sdk) | 
|  | 22 | +                packageManager.listInstalledPackagesSnapshot().forEach { pkg -> | 
|  | 23 | +                    val packageDir = sitePackagesDir.findChild(pkg.name) | 
|  | 24 | +                    if (packageDir != null) { | 
|  | 25 | +                        dependencies.add(packageDir.path) | 
|  | 26 | +                    } | 
|  | 27 | +                } | 
|  | 28 | +            } | 
|  | 29 | +        } | 
|  | 30 | + | 
|  | 31 | +        return DidChangeDependencyPathsParams( | 
|  | 32 | +            moduleName = getWorkspaceFolderPath(module), | 
|  | 33 | +            runtimeLanguage = "python", | 
|  | 34 | +            paths = dependencies, | 
|  | 35 | +            includePatterns = emptyList(), | 
|  | 36 | +            excludePatterns = emptyList() | 
|  | 37 | +        ) | 
|  | 38 | +    } | 
|  | 39 | +} | 
0 commit comments