in plugin-bazel/src/main/kotlin/org/jetbrains/bazel/languages/bazelrc/completion/BazelrcCompletionContributor.kt [160:205]
override fun addCompletions(
parameters: CompletionParameters,
context: ProcessingContext,
result: CompletionResultSet,
) {
parameters.position
.findParentOfType<BazelrcLine>()
?.command
?.let { command ->
Flag
.all()
.filterNot {
// filter out old flag names
it.value.option.oldName
.isNotEmpty() &&
it.key.endsWith(it.value.option.oldName)
}.filterNot {
// filter out NO_OP flags
it.value.option.effectTags
.contains(OptionEffectTag.NO_OP)
}.filterValues {
// filter out values that don't apply to the current command line+
command == "common" || it.option.commands.contains(command)
}
}?.let { flagsMap ->
val pos = parameters.position
result.run {
addAllElements(
flagsMap.entries.map { it -> Pair(it.key, BazelFlagSymbol(it.value, pos.project)) }.map { (k, flagSymbol) ->
LookupElementBuilder
.create(flagSymbol, k)
.withLookupString("${k}_xxx")
.withTypeText(" ${flagSymbol.flag.option.valueHelp}")
.withPresentableText(k)
.withInsertHandler { ctx, _ ->
ctx.file.findElementAt(ctx.startOffset)?.let { psiElement ->
if (psiElement.text != k) {
ctx.editor.document.replaceString(psiElement.textOffset, psiElement.endOffset, k)
}
}
}
},
)
}
}
}