From e5166b993e9ae6c433ec704415172eaeca78494c Mon Sep 17 00:00:00 2001 From: "lada.gagina" Date: Fri, 5 Jan 2024 23:16:25 +0100 Subject: [PATCH] [python] Inject requirements language into pyproject.toml (PY-42296, PY-54440) GitOrigin-RevId: 196f56270d0a102a074872871898d640d77b2918 --- python/src/META-INF/python-core-common.xml | 5 +-- .../RequirementsLanguageInjector.kt | 34 ++++++++++++++++++ .../pyproject.toml | 2 ++ .../pyproject.toml | 2 ++ .../pyproject.toml | 2 ++ .../pyproject.toml | 2 ++ .../RequirementsCompletionTest.kt | 36 +++++++++++++++++++ 7 files changed, 79 insertions(+), 4 deletions(-) create mode 100644 python/src/com/intellij/python/community/impl/requirements/RequirementsLanguageInjector.kt create mode 100644 python/testData/requirements/completion/packageNameInBuildSystemTablePyProjectToml/pyproject.toml create mode 100644 python/testData/requirements/completion/packageNameInProjectTablePyProjectToml/pyproject.toml create mode 100644 python/testData/requirements/completion/versionInBuildSystemTablePyProjectToml/pyproject.toml create mode 100644 python/testData/requirements/completion/versionInProjectTablePyProjectToml/pyproject.toml diff --git a/python/src/META-INF/python-core-common.xml b/python/src/META-INF/python-core-common.xml index cfb42eac4dcd..2b07a429103b 100644 --- a/python/src/META-INF/python-core-common.xml +++ b/python/src/META-INF/python-core-common.xml @@ -28,6 +28,7 @@ + - - > { + try { + return mutableListOf(TomlLiteral::class.java) + } + catch (exception: NoClassDefFoundError) { + return mutableListOf() + } + } +} \ No newline at end of file diff --git a/python/testData/requirements/completion/packageNameInBuildSystemTablePyProjectToml/pyproject.toml b/python/testData/requirements/completion/packageNameInBuildSystemTablePyProjectToml/pyproject.toml new file mode 100644 index 000000000000..0f00fe3516ce --- /dev/null +++ b/python/testData/requirements/completion/packageNameInBuildSystemTablePyProjectToml/pyproject.toml @@ -0,0 +1,2 @@ +[build-system] +requires = [ "my" ] \ No newline at end of file diff --git a/python/testData/requirements/completion/packageNameInProjectTablePyProjectToml/pyproject.toml b/python/testData/requirements/completion/packageNameInProjectTablePyProjectToml/pyproject.toml new file mode 100644 index 000000000000..25ff840b737c --- /dev/null +++ b/python/testData/requirements/completion/packageNameInProjectTablePyProjectToml/pyproject.toml @@ -0,0 +1,2 @@ +[project] +dependencies = [ "my" ] \ No newline at end of file diff --git a/python/testData/requirements/completion/versionInBuildSystemTablePyProjectToml/pyproject.toml b/python/testData/requirements/completion/versionInBuildSystemTablePyProjectToml/pyproject.toml new file mode 100644 index 000000000000..2bc287004656 --- /dev/null +++ b/python/testData/requirements/completion/versionInBuildSystemTablePyProjectToml/pyproject.toml @@ -0,0 +1,2 @@ +[build-system] +requires = [ "mypy==" ] \ No newline at end of file diff --git a/python/testData/requirements/completion/versionInProjectTablePyProjectToml/pyproject.toml b/python/testData/requirements/completion/versionInProjectTablePyProjectToml/pyproject.toml new file mode 100644 index 000000000000..25b6183f050c --- /dev/null +++ b/python/testData/requirements/completion/versionInProjectTablePyProjectToml/pyproject.toml @@ -0,0 +1,2 @@ +[project] +dependencies = [ "mypy==" ] \ No newline at end of file diff --git a/python/testSrc/com/intellij/python/community/impl/requirements/RequirementsCompletionTest.kt b/python/testSrc/com/intellij/python/community/impl/requirements/RequirementsCompletionTest.kt index 8393c64b6918..7bed1d6ad468 100644 --- a/python/testSrc/com/intellij/python/community/impl/requirements/RequirementsCompletionTest.kt +++ b/python/testSrc/com/intellij/python/community/impl/requirements/RequirementsCompletionTest.kt @@ -30,6 +30,24 @@ class RequirementsCompletionTest : BasePlatformTestCase() { assertContainsElements(myFixture.lookupElementStrings!!, "mypy", "mypy-extensions") } + fun testPackageNameInProjectTablePyProjectToml() { + mockPackageNames(listOf("mypy", "mypy-extensions")) + + myFixture.configureByFile("${getTestName(true)}/pyproject.toml") + myFixture.completeBasic() + assertNotEmpty(myFixture.lookupElementStrings) + assertContainsElements(myFixture.lookupElementStrings!!, "mypy", "mypy-extensions") + } + + fun testPackageNameInBuildSystemTablePyProjectToml() { + mockPackageNames(listOf("mypy", "mypy-extensions")) + + myFixture.configureByFile("${getTestName(true)}/pyproject.toml") + myFixture.completeBasic() + assertNotEmpty(myFixture.lookupElementStrings) + assertContainsElements(myFixture.lookupElementStrings!!, "mypy", "mypy-extensions") + } + fun testVersionCompletion() { mockPackageDetails("mypy", listOf("1.7.0", "1.6.1", "1.6.0")) @@ -39,6 +57,24 @@ class RequirementsCompletionTest : BasePlatformTestCase() { assertContainsOrdered(myFixture.lookupElementStrings!!, "1.7.0", "1.6.1", "1.6.0") } + fun testVersionInBuildSystemTablePyProjectToml() { + mockPackageDetails("mypy", listOf("1.7.0", "1.6.1", "1.6.0")) + + myFixture.configureByFile("${getTestName(true)}/pyproject.toml") + myFixture.completeBasic() + assertNotEmpty(myFixture.lookupElementStrings) + assertContainsOrdered(myFixture.lookupElementStrings!!, "1.7.0", "1.6.1", "1.6.0") + } + + fun testVersionInProjectTablePyProjectToml() { + mockPackageDetails("mypy", listOf("1.7.0", "1.6.1", "1.6.0")) + + myFixture.configureByFile("${getTestName(true)}/pyproject.toml") + myFixture.completeBasic() + assertNotEmpty(myFixture.lookupElementStrings) + assertContainsOrdered(myFixture.lookupElementStrings!!, "1.7.0", "1.6.1", "1.6.0") + } + private fun mockPackageNames(packageNames: List) { val packageManagerProvider = TestPackageManagerProvider().withPackageNames(packageNames) ExtensionTestUtil.maskExtensions(PythonPackageManagerProvider.EP_NAME, listOf(packageManagerProvider), testRootDisposable)