enhance makefile completion - shortcircuit early when nothing is found

pull/1502/head
cornfeedhobo 2020-02-21 13:09:08 -06:00
parent 9d97532f8e
commit 552cd89851
No known key found for this signature in database
GPG Key ID: 724357093F994B26
1 changed files with 8 additions and 2 deletions

View File

@ -4,12 +4,16 @@
# Loosely adapted from http://stackoverflow.com/a/38415982/1472048 # Loosely adapted from http://stackoverflow.com/a/38415982/1472048
_makecomplete() { _makecomplete() {
COMPREPLY=()
# https://www.gnu.org/software/make/manual/html_node/Makefile-Names.html # https://www.gnu.org/software/make/manual/html_node/Makefile-Names.html
local files=() local files=()
while IFS='' read -r line; do while IFS='' read -r line; do
files+=("$line") files+=("$line")
done < <(find . -maxdepth 1 -regextype posix-extended -regex '.*(GNU)?[Mm]akefile$' -printf '%f\n') done < <(find . -maxdepth 1 -regextype posix-extended -regex '.*(GNU)?[Mm]akefile$' -printf '%f\n')
[ "${#files[@]}" -eq 0 ] && return 0
# collect all targets # collect all targets
local targets=() local targets=()
for f in "${files[@]}" ; do for f in "${files[@]}" ; do
@ -18,11 +22,13 @@ _makecomplete() {
done < <(grep -oE '^[a-zA-Z0-9_-]+:([^=]|$)' "$f" | cut -d':' -f1) done < <(grep -oE '^[a-zA-Z0-9_-]+:([^=]|$)' "$f" | cut -d':' -f1)
done done
# flatten the array for completion [ "${#targets[@]}" -eq 0 ] && return 0
COMPREPLY=()
# use the targets for completion
while IFS='' read -r line ; do while IFS='' read -r line ; do
COMPREPLY+=("$line") COMPREPLY+=("$line")
done < <(compgen -W "$(tr ' ' '\n' <<<"${targets[@]}" | sort -u)" -- "${COMP_WORDS[COMP_CWORD]}") done < <(compgen -W "$(tr ' ' '\n' <<<"${targets[@]}" | sort -u)" -- "${COMP_WORDS[COMP_CWORD]}")
return 0 return 0
} }