override fun addCompletions()

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)
                    }
                  }
                }
            },
          )
        }
      }
  }