in src/org/jetbrains/r/editor/RCompletionContributor.kt [315:360]
override fun addCompletions(parameters: CompletionParameters, context: ProcessingContext, _result: CompletionResultSet) {
val probableIdentifier = PsiTreeUtil.getParentOfType(parameters.position, RExpression::class.java, false)
val position = if (probableIdentifier != null) {
// operator surrounded by % or identifier
PsiTreeUtil.findChildOfType(probableIdentifier, RInfixOperator::class.java) ?: probableIdentifier
} else {
// operator with parser error
PsiTreeUtil.getParentOfType(parameters.position, RPsiElement::class.java, false) ?: return
}
val result =
if (probableIdentifier == null) _result.withPrefixMatcher("%${_result.prefixMatcher.prefix}")
else _result
val parent = position.parent
val shownNames = HashSet<String>()
val project = position.project
val originalFile = parameters.originalFile
// don't complete parameters name
if (parent is RParameter && position == parent.variable) {
return
}
val file = parameters.originalFile
val isHelpFromRConsole = file.getUserData(RConsoleViewImpl.IS_R_CONSOLE_KEY)?.let { file.firstChild is RHelpExpression } ?: false
val elementFactory = if (isHelpFromRConsole) RLookupElementFactory() else rCompletionElementFactory
addKeywords(position, shownNames, result, isHelpFromRConsole)
addLocalsFromControlFlow(position, shownNames, result, elementFactory)
addLocalsFromRuntime(originalFile, shownNames, result, elementFactory)
// we are completing an assignee, so we don't want to suggest function names here
if (position is RExpression && position.isAssignee()) {
return
}
RPackageCompletionUtil.addPackageCompletion(position, result)
addNamedArgumentsCompletion(position, result)
addArgumentValueCompletion(position, result)
val prefix = position.name?.let { StringUtil.trimEnd(it, CompletionInitializationContext.DUMMY_IDENTIFIER_TRIMMED) } ?: ""
RPackageCompletionUtil.addCompletionFromIndices(project, RSearchScopeUtil.getScope(originalFile),
parameters.originalFile, prefix, shownNames, result, elementFactory)
for (extension in RLibrarySupportProvider.EP_NAME.extensions) {
extension.completeIdentifier(parameters.position, rCompletionElementFactory, result)
}
}