| #!/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 |