From ebdfdf3087be84fa21911f6f93bca74cac3a8c1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Sat, 30 Apr 2022 09:16:36 +0300 Subject: [PATCH] perf(bash-v2): short-circuit descriptionless candidate lists 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 b55ff6212..ad60aa722 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 # Look for the longest completion so that we can format things nicely while IFS='' read -r comp; do