All of lore.kernel.org
 help / color / mirror / Atom feed
From: Felipe Contreras <felipe.contreras@gmail.com>
To: git@vger.kernel.org
Cc: Felipe Contreras <felipe.contreras@gmail.com>
Subject: [PATCH v7 38/49] completion: bash: shuffle __gitcomp functions
Date: Sat,  1 Apr 2023 02:46:15 -0600	[thread overview]
Message-ID: <20230401084626.304356-39-felipe.contreras@gmail.com> (raw)
In-Reply-To: <20230401084626.304356-1-felipe.contreras@gmail.com>

They are the ones that actually do the completion, put them at the top.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 contrib/completion/git-completion.bash | 270 +++++++++++++------------
 1 file changed, 139 insertions(+), 131 deletions(-)

diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index bc6f83adce..3f48b61cbe 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -65,6 +65,145 @@
 #     case insensitively, even on systems with case sensitive file systems
 #     (e.g., completing tag name "FOO" on "git checkout f<TAB>").
 
+# The following functions are meant to modify COMPREPLY, which should not be
+# modified directly.  The purpose is to localize the modifications so it's
+# easier to emulate it in Zsh. Every time a new __gitcomp* function is added,
+# the corresponding function should be added to Zsh.
+
+__gitcompadd ()
+{
+	local x i=${#COMPREPLY[@]}
+	for x in $1; do
+		if [[ "$x" == "$3"* ]]; then
+			COMPREPLY[i++]="$2$x$4"
+		fi
+	done
+}
+
+# Creates completion replies.
+# It accepts 1 to 4 arguments:
+# 1: List of possible completion words.
+# 2: A prefix to be added to each possible completion word (optional).
+# 3: Generate possible completion matches for this word (optional).
+# 4: A suffix to be appended to each possible completion word (optional).
+__gitcomp ()
+{
+	local IFS=$' \t\n'
+	__gitcompadd "$1" "${2-}" "${3-$cur}" "${4- }"
+}
+
+# Generates completion reply from newline-separated possible completion words
+# by appending a space to all of them. The result is appended to COMPREPLY.
+# It accepts 1 to 4 arguments:
+# 1: List of possible completion words, separated by a single newline.
+# 2: A prefix to be added to each possible completion word (optional).
+# 3: Generate possible completion matches for this word (optional).
+# 4: A suffix to be appended to each possible completion word instead of
+#    the default space (optional).  If specified but empty, nothing is
+#    appended.
+__gitcomp_nl ()
+{
+	local IFS=$'\n'
+	__gitcompadd "$1" "${2-}" "${3-$cur}" "${4- }"
+}
+
+# Appends prefiltered words to COMPREPLY without any additional processing.
+# Callers must take care of providing only words that match the current word
+# to be completed and adding any prefix and/or suffix (trailing space!), if
+# necessary.
+# 1: List of newline-separated matching completion words, complete with
+#    prefix and suffix.
+__gitcomp_direct ()
+{
+	local IFS=$'\n'
+
+	COMPREPLY+=($1)
+}
+
+# Generates completion reply with compgen from newline-separated possible
+# completion filenames.
+# It accepts 1 to 3 arguments:
+# 1: List of possible completion filenames, separated by a single newline.
+# 2: A directory prefix to be added to each possible completion filename
+#    (optional).
+# 3: Generate possible completion matches for this word (optional).
+__gitcomp_file ()
+{
+	local IFS=$'\n'
+
+	# XXX does not work when the directory prefix contains a tilde,
+	# since tilde expansion is not applied.
+	# This means that COMPREPLY will be empty and Bash default
+	# completion will be used.
+	__gitcompadd "$1" "${2-}" "${3-$cur}" ""
+
+	# use a hack to enable file mode in bash < 4
+	compopt -o filenames +o nospace 2>/dev/null ||
+	compgen -f /non-existing-dir/ >/dev/null ||
+	true
+}
+
+# Fills the COMPREPLY array with prefiltered paths without any additional
+# processing.
+# Callers must take care of providing only paths that match the current path
+# to be completed and adding any prefix path components, if necessary.
+# 1: List of newline-separated matching paths, complete with all prefix
+#    path components.
+__gitcomp_file_direct ()
+{
+	local IFS=$'\n'
+
+	COMPREPLY+=($1)
+
+	# use a hack to enable file mode in bash < 4
+	compopt -o filenames +o nospace 2>/dev/null ||
+	compgen -f /non-existing-dir/ >/dev/null ||
+	true
+}
+
+# Creates completion replies, reorganizing options and adding suffixes as needed.
+# It accepts 1 to 4 arguments:
+# 1: List of possible completion words.
+# 2: A prefix to be added to each possible completion word (optional).
+# 3: Generate possible completion matches for this word (optional).
+# 4: A suffix to be appended to each possible completion word (optional).
+__gitcomp_opts ()
+{
+	local cur_="${3-$cur}"
+
+	if [[ "$cur_" == *= ]]; then
+		return
+	fi
+
+	local c i=0 IFS=$' \t\n' sfx
+	for c in $1; do
+		if [[ $c == "--" ]]; then
+			if [[ "$cur_" == --no-* ]]; then
+				continue
+			fi
+
+			if [[ --no == "$cur_"* ]]; then
+				COMPREPLY[i++]="--no-... "
+			fi
+			break
+		fi
+		if [[ $c == "$cur_"* ]]; then
+			if [[ -z "${4+set}" ]]; then
+				case $c in
+				*=|*.) sfx="" ;;
+				*) sfx=" " ;;
+				esac
+			else
+				sfx="$4"
+			fi
+			COMPREPLY[i++]="${2-}$c$sfx"
+		fi
+	done
+}
+
+# __gitcomp functions end here
+# ==============================================================================
+
 # Discovers the path to the git repository taking any '--git-dir=<path>' and
 # '-C <path>' options into account and stores it in the $__git_repo_path
 # variable.
@@ -307,81 +446,6 @@ _get_comp_words_by_ref ()
 }
 fi
 
-# Appends prefiltered words to COMPREPLY without any additional processing.
-# Callers must take care of providing only words that match the current word
-# to be completed and adding any prefix and/or suffix (trailing space!), if
-# necessary.
-# 1: List of newline-separated matching completion words, complete with
-#    prefix and suffix.
-__gitcomp_direct ()
-{
-	local IFS=$'\n'
-
-	COMPREPLY+=($1)
-}
-
-__gitcompadd ()
-{
-	local x i=${#COMPREPLY[@]}
-	for x in $1; do
-		if [[ "$x" == "$3"* ]]; then
-			COMPREPLY[i++]="$2$x$4"
-		fi
-	done
-}
-
-# Creates completion replies.
-# It accepts 1 to 4 arguments:
-# 1: List of possible completion words.
-# 2: A prefix to be added to each possible completion word (optional).
-# 3: Generate possible completion matches for this word (optional).
-# 4: A suffix to be appended to each possible completion word (optional).
-__gitcomp ()
-{
-	local IFS=$' \t\n'
-	__gitcompadd "$1" "${2-}" "${3-$cur}" "${4- }"
-}
-
-# Creates completion replies, reorganizing options and adding suffixes as needed.
-# It accepts 1 to 4 arguments:
-# 1: List of possible completion words.
-# 2: A prefix to be added to each possible completion word (optional).
-# 3: Generate possible completion matches for this word (optional).
-# 4: A suffix to be appended to each possible completion word (optional).
-__gitcomp_opts ()
-{
-	local cur_="${3-$cur}"
-
-	if [[ "$cur_" == *= ]]; then
-		return
-	fi
-
-	local c i=0 IFS=$' \t\n' sfx
-	for c in $1; do
-		if [[ $c == "--" ]]; then
-			if [[ "$cur_" == --no-* ]]; then
-				continue
-			fi
-
-			if [[ --no == "$cur_"* ]]; then
-				COMPREPLY[i++]="--no-... "
-			fi
-			break
-		fi
-		if [[ $c == "$cur_"* ]]; then
-			if [[ -z "${4+set}" ]]; then
-				case $c in
-				*=|*.) sfx="" ;;
-				*) sfx=" " ;;
-				esac
-			else
-				sfx="$4"
-			fi
-			COMPREPLY[i++]="${2-}$c$sfx"
-		fi
-	done
-}
-
 # Clear the variables caching builtins' options when (re-)sourcing
 # the completion script.
 if [[ -n ${ZSH_VERSION-} ]]; then
@@ -430,62 +494,6 @@ __gitcomp_builtin ()
 	__gitcomp_opts "$options"
 }
 
-# Generates completion reply from newline-separated possible completion words
-# by appending a space to all of them. The result is appended to COMPREPLY.
-# It accepts 1 to 4 arguments:
-# 1: List of possible completion words, separated by a single newline.
-# 2: A prefix to be added to each possible completion word (optional).
-# 3: Generate possible completion matches for this word (optional).
-# 4: A suffix to be appended to each possible completion word instead of
-#    the default space (optional).  If specified but empty, nothing is
-#    appended.
-__gitcomp_nl ()
-{
-	local IFS=$'\n'
-	__gitcompadd "$1" "${2-}" "${3-$cur}" "${4- }"
-}
-
-# Fills the COMPREPLY array with prefiltered paths without any additional
-# processing.
-# Callers must take care of providing only paths that match the current path
-# to be completed and adding any prefix path components, if necessary.
-# 1: List of newline-separated matching paths, complete with all prefix
-#    path components.
-__gitcomp_file_direct ()
-{
-	local IFS=$'\n'
-
-	COMPREPLY+=($1)
-
-	# use a hack to enable file mode in bash < 4
-	compopt -o filenames +o nospace 2>/dev/null ||
-	compgen -f /non-existing-dir/ >/dev/null ||
-	true
-}
-
-# Generates completion reply with compgen from newline-separated possible
-# completion filenames.
-# It accepts 1 to 3 arguments:
-# 1: List of possible completion filenames, separated by a single newline.
-# 2: A directory prefix to be added to each possible completion filename
-#    (optional).
-# 3: Generate possible completion matches for this word (optional).
-__gitcomp_file ()
-{
-	local IFS=$'\n'
-
-	# XXX does not work when the directory prefix contains a tilde,
-	# since tilde expansion is not applied.
-	# This means that COMPREPLY will be empty and Bash default
-	# completion will be used.
-	__gitcompadd "$1" "${2-}" "${3-$cur}" ""
-
-	# use a hack to enable file mode in bash < 4
-	compopt -o filenames +o nospace 2>/dev/null ||
-	compgen -f /non-existing-dir/ >/dev/null ||
-	true
-}
-
 # Execute 'git ls-files', unless the --committable option is specified, in
 # which case it runs 'git diff-index' to find out the files that can be
 # committed.  It return paths relative to the directory specified in the first
-- 
2.33.0


  parent reply	other threads:[~2023-04-01  8:49 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-04-01  8:45 [PATCH v7 00/49] completion: git-completion 2.0 patches Felipe Contreras
2023-04-01  8:45 ` [PATCH v7 01/49] test: completion add test for __git_cmd_idx Felipe Contreras
2023-04-01  8:45 ` [PATCH v7 02/49] completion: bash: trivial cleanup Felipe Contreras
2023-04-01  8:45 ` [PATCH v7 03/49] zsh: remove version Felipe Contreras
2023-04-01  8:45 ` [PATCH v7 04/49] completion: bash: trivial grammar fix Felipe Contreras
2023-04-01  8:45 ` [PATCH v7 05/49] completion: zsh: add higher-priority location Felipe Contreras
2023-04-01  8:45 ` [PATCH v7 06/49] zsh: resolve symlink of script Felipe Contreras
2023-04-01  8:45 ` [PATCH v7 07/49] zsh: simplify realpath dirname idiom Felipe Contreras
2023-04-01  8:45 ` [PATCH v7 08/49] test: completion: use global config Felipe Contreras
2023-04-01  8:45 ` [PATCH v7 09/49] completion: fix __git_cmd_idx regression for zsh Felipe Contreras
2023-04-01  8:45 ` [PATCH v7 10/49] completion: fix for suboptions with value Felipe Contreras
2023-04-01  8:45 ` [PATCH v7 11/49] completion: zsh: trivial improvement Felipe Contreras
2023-04-01  8:45 ` [PATCH v7 12/49] completion: bash: do not modify COMP_WORDBREAKS Felipe Contreras
2023-04-01  8:45 ` [PATCH v7 13/49] test: completion: fix currently typed words Felipe Contreras
2023-04-01  8:45 ` [PATCH v7 14/49] test: completion: switch __gitcomp_nl prefix test Felipe Contreras
2023-04-01  8:45 ` [PATCH v7 15/49] test: completion: add run_func() helper Felipe Contreras
2023-04-01  8:45 ` [PATCH v7 16/49] completion: bash: remove non-append functionality Felipe Contreras
2023-04-01  8:45 ` [PATCH v7 17/49] completion: bash: get rid of _append() functions Felipe Contreras
2023-04-01  8:45 ` [PATCH v7 18/49] completion: bash: get rid of any non-append code Felipe Contreras
2023-04-01  8:45 ` [PATCH v7 19/49] completion: zsh: fix options with arguments Felipe Contreras
2023-04-01  8:45 ` [PATCH v7 20/49] completion: zsh: expand --git-dir file argument Felipe Contreras
2023-04-01  8:45 ` [PATCH v7 21/49] completion: zsh: add support for general -C opts Felipe Contreras
2023-04-01  8:45 ` [PATCH v7 22/49] completion: zsh: fix for undefined completions Felipe Contreras
2023-04-01  8:46 ` [PATCH v7 23/49] completion: zsh: add support for general -c opts Felipe Contreras
2023-04-01  8:46 ` [PATCH v7 24/49] completion: zsh: fix extra space on foo= Felipe Contreras
2023-04-01  8:46 ` [PATCH v7 25/49] completion: zsh: add excluded options Felipe Contreras
2023-04-01  8:46 ` [PATCH v7 26/49] completion: zsh: always set compset Felipe Contreras
2023-04-01  8:46 ` [PATCH v7 27/49] completion: factor out check in __gitcomp Felipe Contreras
2023-04-01  8:46 ` [PATCH v7 28/49] completion: simplify equal suffix check Felipe Contreras
2023-04-01  8:46 ` [PATCH v7 29/49] completion: refactor __gitcomp Felipe Contreras
2023-04-01  8:46 ` [PATCH v7 30/49] completion: simplify __gitcomp Felipe Contreras
2023-04-01  8:46 ` [PATCH v7 31/49] completion: bash: change suffix check in __gitcomp Felipe Contreras
2023-04-01  8:46 ` [PATCH v7 32/49] completion: improve __gitcomp suffix code Felipe Contreras
2023-04-01  8:46 ` [PATCH v7 33/49] test: completion: add missing test Felipe Contreras
2023-04-01  8:46 ` [PATCH v7 34/49] completion: bash: simplify config_variable_name Felipe Contreras
2023-04-01  8:46 ` [PATCH v7 35/49] completion: bash: improve __gitcomp description Felipe Contreras
2023-04-01  8:46 ` [PATCH v7 36/49] completion: add __gitcomp_opts Felipe Contreras
2023-04-01  8:46 ` [PATCH v7 37/49] completion: bash: cleanup __gitcomp* invocations Felipe Contreras
2023-04-01  8:46 ` Felipe Contreras [this message]
2023-04-01  8:46 ` [PATCH v7 39/49] completion: zsh: simplify __gitcomp_direct Felipe Contreras
2023-04-01  8:46 ` [PATCH v7 40/49] completion: zsh: shuffle __gitcomp* functions Felipe Contreras
2023-04-01  8:46 ` [PATCH v7 41/49] completion: zsh: fix direct quoting Felipe Contreras
2023-04-01  8:46 ` [PATCH v7 42/49] completion: zsh: add elements individually in __gitcomp_opts Felipe Contreras
2023-04-01  8:46 ` [PATCH v7 43/49] completion: zsh: add __gitcompadd helper Felipe Contreras
2023-04-01  8:46 ` [PATCH v7 44/49] completion: zsh: add correct removable suffix Felipe Contreras
2023-04-01  8:46 ` [PATCH v7 45/49] completion: bash: simplify _get_comp_words_by_ref() Felipe Contreras
2023-04-01  8:46 ` [PATCH v7 46/49] completion: bash: refactor _get_comp_words_by_ref() Felipe Contreras
2023-04-01  8:46 ` [PATCH v7 47/49] completion: bash: cleanup _get_comp_words_by_ref() Felipe Contreras
2023-04-01  8:46 ` [PATCH v7 48/49] completion: bash: trivial cleanup Felipe Contreras
2023-04-01  8:46 ` [PATCH v7 49/49] completion: bash: rename _get_comp_words_by_ref() Felipe Contreras

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230401084626.304356-39-felipe.contreras@gmail.com \
    --to=felipe.contreras@gmail.com \
    --cc=git@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.