diff --git a/python/src/META-INF/python-core-common.xml b/python/src/META-INF/python-core-common.xml index f682b4445c94..cb711e9b09fe 100644 --- a/python/src/META-INF/python-core-common.xml +++ b/python/src/META-INF/python-core-common.xml @@ -67,6 +67,8 @@ + () { + override fun addCompletions(parameters: CompletionParameters, context: ProcessingContext?, result: CompletionResultSet) { + val pyFunction = PsiTreeUtil.getParentOfType(parameters.position, PyParameterList::class.java)?.containingFunction ?: return + val module = ModuleUtilCore.findModuleForPsiElement(pyFunction) ?: return + val typeEvalContext = TypeEvalContext.userInitiated(pyFunction.project, pyFunction.containingFile) + + if (TestRunnerService.getInstance(module).projectConfiguration != pyTestName) { + return + } + val usedParams = pyFunction.getParameters(typeEvalContext).mapNotNull { it.name }.toSet() + if (isTestElement(pyFunction, ThreeState.UNSURE, typeEvalContext)) { + getFixtures(module).map { it.name }.filter { !usedParams.contains(it) }.forEach { + result.addElement(PythonLookupElement(it, false, PythonIcons.Python.Function)) + } + } + } +} + +/** + * Provide pytest fixtures are possible arguments for tests + */ +class PyTestFixtureCompletionContributor : CompletionContributor() { + init { + extend(CompletionType.BASIC, PlatformPatterns.psiElement().inside(PyParameterList::class.java), PyTestFixtureCompletionProvider) + } +}