blob: 63b1b8848ba5840249ce39aaa986866b93c5b2ac [file] [log] [blame]
#!/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.
#
_chip_build_example() {
local cur prev words cword split
_init_completion -s || return
# The command names supported by the script.
local commands="build gen targets"
local i
local command command_comp_cword
# Get the first non-option argument taking into account the options with their arguments.
for ((i = 1; i <= COMP_CWORD; i++)); do
case "${COMP_WORDS[i]}" in
--log-level | --target | --repo | --out-prefix | --ninja-jobs | --pregen-dir | --dry-run-output | --pw-command-launcher)
((i == COMP_CWORD)) && break
((i == COMP_CWORD - 1)) && [[ "${COMP_WORDS[i + 1]}" = "=" ]] && break
[[ "${COMP_WORDS[i + 1]}" = "=" ]] && ((i++))
[[ "${COMP_WORDS[i + 1]}" ]] && ((i++))
continue
;;
-* | =)
continue
;;
esac
command="${COMP_WORDS[i]}"
command_comp_cword=$i
break
done
# Compete the global options if the command is not specified yet.
if [[ -z "$command" ]]; then
case "$prev" in
--target)
readarray -t COMPREPLY < <(compgen -W "$("$1" targets --format=completion "$cur")" -- "$cur")
compopt -o nospace
return
;;
--repo | --out-prefix | --pregen-dir)
_filedir -d
return
;;
--dry-run-output)
_filedir
return
;;
esac
case "$cur" in
-*)
readarray -t COMPREPLY < <(compgen -W "$(_parse_help "$1")" -- "$cur")
return
;;
esac
fi
# Complete the command name.
if [[ "$command_comp_cword" -eq "$COMP_CWORD" ]]; then
readarray -t COMPREPLY < <(compgen -W "$commands" -- "$cur")
return
fi
# Check if the command is valid.
[[ "$commands" =~ $command ]] || return
# Command-specific completion.
case "$prev" in
--format)
readarray -t COMPREPLY < <(compgen -W "summary expanded json" -- "$cur")
return
;;
--copy-artifacts-to | --create-archives)
_filedir -d
return
;;
esac
case "$cur" in
-*)
readarray -t COMPREPLY < <(compgen -W "$("$1" "$command" --help | _parse_help -)" -- "$cur")
;;
esac
}
# 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_app() {
local cur prev words cword split
_init_completion -s || return
case "$prev" in
--ble-controller)
readarray -t words < <(ls -I '*:*' /sys/class/bluetooth)
# Get the list of Bluetooth devices without the 'hci' prefix.
readarray -t COMPREPLY < <(compgen -W "${words[*]#hci}" -- "$cur")
return
;;
--custom-flow)
readarray -t COMPREPLY < <(compgen -W "0 1 2" -- "$cur")
return
;;
--capabilities)
# The capabilities option is a bit-field with 3 bits currently defined.
readarray -t COMPREPLY < <(compgen -W "001 010 011 100 101 111" -- "$cur")
return
;;
--KVS)
_filedir
return
;;
--PICS)
_filedir
return
;;
--trace_file)
_filedir
return
;;
--trace_log | --trace_decode)
readarray -t COMPREPLY < <(compgen -W "0 1" -- "$cur")
return
;;
--trace-to)
readarray -t COMPREPLY < <(compgen -W "json perfetto" -- "$cur")
compopt -o nospace
return
;;
esac
case "$cur" in
-*)
readarray -t COMPREPLY < <(compgen -W "$(_parse_help "$1")" -- "$cur")
;;
esac
}
_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}")
case "$prev" in
--commissioner-name)
readarray -t COMPREPLY < <(compgen -W "alpha beta gamma 4 5 6 7 8 9" -- "$cur")
return
;;
--only-allow-trusted-cd-keys)
readarray -t COMPREPLY < <(compgen -W "0 1" -- "$cur")
return
;;
--paa-trust-store-path | --cd-trust-store-path | --dac-revocation-set-path)
_filedir -d
return
;;
--storage-directory)
_filedir -d
return
;;
--trace-to)
readarray -t COMPREPLY < <(compgen -W "json perfetto" -- "$cur")
compopt -o nospace
return
;;
esac
case "$cur" in
-*)
words=$(_chip_tool_get_options "${args[@]}")
;;
*)
words=$(_chip_tool_get_commands "${args[@]}")
;;
esac
readarray -t COMPREPLY < <(compgen -W "$words" -- "$cur")
}
complete -F _chip_build_example scripts/build/build_examples.py
complete -F _chip_build_example build_examples.py
complete -F _chip_app chip-air-purifier-app
complete -F _chip_app chip-all-clusters-app
complete -F _chip_app chip-bridge-app
complete -F _chip_app chip-dishwasher-app
complete -F _chip_app chip-energy-gateway-app
complete -F _chip_app chip-energy-management-app
complete -F _chip_app chip-lighting-app
complete -F _chip_app chip-lock-app
complete -F _chip_app chip-log-source-app
complete -F _chip_app chip-microwave-oven-app
complete -F _chip_app chip-ota-provider-app
complete -F _chip_app chip-ota-requestor-app
complete -F _chip_app chip-refrigerator-app
complete -F _chip_app chip-rvc-app
complete -F _chip_app chip-tv-app
complete -F _chip_app chip-tv-casting-app
complete -F _chip_tool chip-tool