From 95d7df18589543fc4a0c62a4734349811a2ddcec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Wed, 4 May 2022 04:16:07 +0300 Subject: [PATCH] perf(bash-v2): short-circuit descriptionless candidate lists (#1686) If the list of candidates has no descriptions, short circuit all the description processing logic, basically just do a `compgen -W` for the whole list and be done with it. We could conceivably do some optimizations like this and more when generating the completions with `--no-descriptions` in Go code, by omitting some parts we know won't be needed, or doing some things differently. But doing it this way in bash, the improvements are available also to completions generated with descriptions enabled when they are invoked for completion cases that produce no descriptions. The result after this for descriptionless entries seems fast enough so it seems there's no immediate need to look into doing that. --- bash_completionsV2.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/bash_completionsV2.go b/bash_completionsV2.go index 49d03bef6..7c0b4f152 100644 --- a/bash_completionsV2.go +++ b/bash_completionsV2.go @@ -176,6 +176,14 @@ __%[1]s_handle_completion_types() { __%[1]s_handle_standard_completion_case() { local tab=$'\t' comp + # Short circuit to optimize if we don't have descriptions + if [[ $out != *$tab* ]]; then + while IFS='' read -r comp; do + COMPREPLY+=("$comp") + done < <(IFS=$'\n' compgen -W "$out" -- "$cur") + return 0 + fi + local longest=0 local compline # Look for the longest completion so that we can format things nicely