Skip to content

Commit

Permalink
Bash completion support for chip-tool (#28470)
Browse files Browse the repository at this point in the history
* Bash completion support for chip-tool

* Restyled crashes if we've got nested cases...

* Prevent executing command when collecting compgen
  • Loading branch information
arkq authored and pull[bot] committed Nov 28, 2023
1 parent 5ccfc9f commit 2975985
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 1 deletion.
69 changes: 69 additions & 0 deletions scripts/helpers/bash-completion.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
#!/bin/bash

#
# Copyright (c) 2023 Project CHIP Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

# Get the list of commands from the output of the chip-tool,
# where each command is prefixed with the ' | * ' string.
_chip_tool_get_commands() {
"$@" --help 2>&1 | awk '/ [|] [*] /{ print $3 }'
}

# Get the list of options from the output of the chip-tool,
# where each option starts with the '[--' string.
_chip_tool_get_options() {
"$@" --help 2>&1 | awk -F'[[]|[]]' '/^[[]--/{ print $2 }'
}

_chip_tool() {

local cur prev words cword split
_init_completion -s || return

# Get command line arguments up to the cursor position
local args=("${COMP_WORDS[@]:0:$cword+1}")

local command=0
case "$prev" in
--commissioner-name)
readarray -t COMPREPLY < <(compgen -W "alpha beta gamma 4 5 6 7 8 9" -- "$cur")
;;
--paa-trust-store-path | --cd-trust-store-path)
_filedir -d
;;
--storage-directory)
_filedir -d
;;
*)
command=1
;;
esac

if [ "$command" -eq 1 ]; then
case "$cur" in
-*)
words=$(_chip_tool_get_options "${args[@]}")
;;
*)
words=$(_chip_tool_get_commands "${args[@]}")
;;
esac
readarray -t COMPREPLY < <(compgen -W "$words" -- "$cur")
fi

}

complete -F _chip_tool chip-tool
7 changes: 6 additions & 1 deletion scripts/setup/bootstrap.sh
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,11 @@ else
_install_additional_pip_requirements "none" "$@"
fi

# Load bash completion helper if running bash
if [ -n "$BASH" ]; then
. "$_CHIP_ROOT/scripts/helpers/bash-completion.sh"
fi

unset -f _bootstrap_or_activate
unset -f _install_additional_pip_requirements

Expand All @@ -169,6 +174,6 @@ unset PW_DOCTOR_SKIP_CIPD_CHECKS

unset -f _chip_bootstrap_banner

if ! [ -z "$_ORIGINAL_PW_ENVIRONMENT_ROOT" ]; then
if [ -n "$_ORIGINAL_PW_ENVIRONMENT_ROOT" ]; then
export PW_ENVIRONMENT_ROOT="$_ORIGINAL_PW_ENVIRONMENT_ROOT"
fi

0 comments on commit 2975985

Please sign in to comment.