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 v2 42/45] completion: bash: refactor _get_comp_words_by_ref()
Date: Fri, 18 Jun 2021 13:25:15 -0500	[thread overview]
Message-ID: <20210618182518.697912-43-felipe.contreras@gmail.com> (raw)
In-Reply-To: <20210618182518.697912-1-felipe.contreras@gmail.com>

We don't need a separate function to do what we already know we want to
do.

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

diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 2c0b869aba..9976009951 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -334,21 +334,11 @@ __git_dequote ()
 #
 #   RELEASE: 2.x
 
-# This function can be used to access a tokenized list of words
-# on the command line:
-#
-#	__git_reassemble_comp_words_by_ref '=:'
-#	if test "${words_[cword_-1]}" = -w
-#	then
-#		...
-#	fi
-#
-# The argument should be a collection of characters from the list of
-# word completion separators (COMP_WORDBREAKS) to treat as ordinary
-# characters.
+# This function reorganizes the words on the command line to be processed by
+# the rest of the script.
 #
 # This is roughly equivalent to going back in time and setting
-# COMP_WORDBREAKS to exclude those characters.  The intent is to
+# COMP_WORDBREAKS to exclude '=' and ':'.  The intent is to
 # make option types like --date=<type> and <rev>:<path> easy to
 # recognize by treating each shell word as a single token.
 #
@@ -356,60 +346,55 @@ __git_dequote ()
 # shared with other completion scripts.  By the time the completion
 # function gets called, COMP_WORDS has already been populated so local
 # changes to COMP_WORDBREAKS have no effect.
-#
-# Output: words_, cword_, cur_.
 
-__git_reassemble_comp_words_by_ref()
+if ! type _get_comp_words_by_ref >/dev/null 2>&1; then
+_get_comp_words_by_ref ()
 {
+	local words_ cword_
 	local exclude i j first
+
 	# Which word separators to exclude?
-	exclude="${1//[^$COMP_WORDBREAKS]}"
+	exclude="${COMP_WORDBREAKS//[^=:]}"
 	cword_=$COMP_CWORD
 	if [ -z "$exclude" ]; then
 		words_=("${COMP_WORDS[@]}")
-		return
-	fi
-	# List of word completion separators has shrunk;
-	# re-assemble words to complete.
-	for ((i=0, j=0; i < ${#COMP_WORDS[@]}; i++, j++)); do
-		# Append each nonempty word consisting of just
-		# word separator characters to the current word.
-		first=t
-		while
-			[ $i -gt 0 ] &&
-			[ -n "${COMP_WORDS[$i]}" ] &&
-			# word consists of excluded word separators
-			[ "${COMP_WORDS[$i]//[^$exclude]}" = "${COMP_WORDS[$i]}" ]
-		do
-			# Attach to the previous token,
-			# unless the previous token is the command name.
-			if [ $j -ge 2 ] && [ -n "$first" ]; then
-				((j--))
-			fi
-			first=
+	else
+		# List of word completion separators has shrunk;
+		# re-assemble words to complete.
+		for ((i=0, j=0; i < ${#COMP_WORDS[@]}; i++, j++)); do
+			# Append each nonempty word consisting of just
+			# word separator characters to the current word.
+			first=t
+			while
+				[ $i -gt 0 ] &&
+				[ -n "${COMP_WORDS[$i]}" ] &&
+				# word consists of excluded word separators
+				[ "${COMP_WORDS[$i]//[^$exclude]}" = "${COMP_WORDS[$i]}" ]
+			do
+				# Attach to the previous token,
+				# unless the previous token is the command name.
+				if [ $j -ge 2 ] && [ -n "$first" ]; then
+					((j--))
+				fi
+				first=
+				words_[$j]=${words_[j]}${COMP_WORDS[i]}
+				if [ $i = $COMP_CWORD ]; then
+					cword_=$j
+				fi
+				if (($i < ${#COMP_WORDS[@]} - 1)); then
+					((i++))
+				else
+					# Done.
+					break 2
+				fi
+			done
 			words_[$j]=${words_[j]}${COMP_WORDS[i]}
 			if [ $i = $COMP_CWORD ]; then
 				cword_=$j
 			fi
-			if (($i < ${#COMP_WORDS[@]} - 1)); then
-				((i++))
-			else
-				# Done.
-				return
-			fi
 		done
-		words_[$j]=${words_[j]}${COMP_WORDS[i]}
-		if [ $i = $COMP_CWORD ]; then
-			cword_=$j
-		fi
-	done
-}
+	fi
 
-if ! type _get_comp_words_by_ref >/dev/null 2>&1; then
-_get_comp_words_by_ref ()
-{
-	local words_ cword_
-	__git_reassemble_comp_words_by_ref "=:"
 	cword=$cword_
 	cur=${words_[cword]}
 	prev=${words_[cword-1]}
-- 
2.32.0


  parent reply	other threads:[~2021-06-18 18:27 UTC|newest]

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