in src/main/kotlin/com/pestphp/pest/completion/PestCustomExtensionCompletionProvider.kt [29:57]
override fun addCompletions(parameters: CompletionParameters, context: ProcessingContext, result: CompletionResultSet) {
val memberReference = parameters.position.originalElement.parent as? MemberReference ?: return
val project = parameters.position.project
if (PhpType.intersectsGlobal(project, expectationType, memberReference.classReference?.globalType ?: PhpType.EMPTY)) {
val index = FileBasedIndex.getInstance()
index.getAllKeys(KEY, project).forEach { extensionName ->
index.processValues(KEY, extensionName, null, { file, value ->
memberReference.manager.findFile(file)?.let { psiFile ->
val cheapRenderer = CustomExpectationRenderer()
val lookupElement = LookupElementBuilder.create(extensionName)
.withRenderer(cheapRenderer)
.withExpensiveRenderer(CustomExtensionExpensiveRenderer(cheapRenderer, psiFile, value.first()))
.withInsertHandler { context, _ ->
val expectation = psiFile.findElementAt(value.first())
val methodDescriptor =
PhpPsiUtil.getParentOfClass(expectation, MethodReference::class.java)?.toMethod()
PhpInsertHandlerUtil.insertStringAtCaret(context.editor, "()")
if (methodDescriptor?.parameters?.isNotEmpty() == true) {
PhpCompletionUtil.moveCaretRelativelyWithScroll(context.editor, -1)
AutoPopupController.getInstance(project).autoPopupParameterInfo(context.editor, null)
}
}
result.addElement(lookupElement)
}
true
}, GlobalSearchScope.projectScope(project))
}
}
}