|  | _fx_set__product_board() { | 
|  | compset -P "*." | 
|  | if [[ "$IPREFIX" = *. ]]; then | 
|  | # complete board | 
|  | compadd ${(u)$(echo ${fuchsia_dir}/boards/*.gni(N:t:r) ${fuchsia_dir}/vendor/*/boards/*.gni(N:t:r))} | 
|  | else | 
|  | # complete product followed by a dot | 
|  | compadd -S . ${(u)$(echo ${fuchsia_dir}/products/*.gni(N:t:r) ${fuchsia_dir}/vendor/*/products/*.gni(N:t:r))} | 
|  | fi | 
|  | } | 
|  |  | 
|  | _fx_set__package_caching_policy() { | 
|  | test "${ninja_file}" -nt "$1" | 
|  | } | 
|  |  | 
|  | # complete comma separated bundles labels | 
|  | _fx_set__with() { | 
|  | local -a package_patterns=( "//bundles/*" "//garnet/packages/*" "//peridot/packages/*" "//topaz/packages/*" ) | 
|  | for vendor in ${fuchsia_dir}/vendor/*(N/); do | 
|  | package_patterns+=( "//vendor/${vendor}/bundles" "//vendor/${vendor}/packages" ) | 
|  | done | 
|  |  | 
|  | # apply a default caching policy if one isn't configured | 
|  | local cache_policy | 
|  | zstyle -s ":completion:${curcontext}:" cache-policy cache_policy | 
|  | zstyle ":completion:${curcontext}:" cache-policy \ | 
|  | ${cache_policy:-_fx_set__package_caching_policy} | 
|  |  | 
|  | # if this file is newer than the cache file then the cache is stale | 
|  | local ninja_file=${fuchsia_dir}/${fuchsia_build_dir}/build.ninja | 
|  |  | 
|  | local -a fx_packages | 
|  | if ! _retrieve_cache fx_packages ; then | 
|  | fx_packages=( $(${fuchsia_dir}/prebuilt/third_party/gn/${prebuilt_os}/gn ls ${fuchsia_dir}/${fuchsia_build_dir} ${package_patterns[@]} ) ) | 
|  | _store_cache fx_packages fx_packages | 
|  | fi | 
|  |  | 
|  | compset -P "*," | 
|  | compadd -q -S "," ${fx_packages} | 
|  | } | 
|  |  | 
|  | _gn_args_caching_policy() { | 
|  | test ${ninja_file} -nt $1 | 
|  | } | 
|  |  | 
|  | _fx_set__gn_args() { | 
|  | if [ -z ${fuchsia_build_dir} ]; then | 
|  | return | 
|  | fi | 
|  |  | 
|  | # apply a default caching policy if one isn't configured | 
|  | local cache_policy | 
|  | zstyle -s ":completion:${curcontext}:" cache-policy cache_policy | 
|  | zstyle ":completion:${curcontext}:" cache-policy \ | 
|  | ${cache_policy:-_gn_args_caching_policy} | 
|  |  | 
|  | # if this file is newer than the cache file then the cache is stale | 
|  | local ninja_file=${fuchsia_dir}/${fuchsia_build_dir}/build.ninja | 
|  |  | 
|  | local -a gn_args | 
|  | if ! _retrieve_cache gn_args ; then | 
|  | gn_args=( $(${fuchsia_dir}/prebuilt/third_party/gn/${prebuilt_os}/gn args ${fuchsia_dir}/${fuchsia_build_dir} --list --short|sed -e 's/ .*//') ) | 
|  | _store_cache gn_args gn_args | 
|  | fi | 
|  |  | 
|  | echo $gn_args | 
|  | } | 
|  |  | 
|  | _fx_set__gn_arg_equals() { | 
|  | # complete the list of gn args with an = suffix | 
|  | compadd -S = (${fx_set_gn_args}) | 
|  | } | 
|  |  | 
|  | _fx_set__gn_arg_name() { | 
|  | # complete the list of gn args | 
|  | compadd (${fx_set_gn_args}) | 
|  | } | 
|  |  | 
|  | # TODO: | 
|  | #  - complete --variant | 
|  | #  - complete --fuzz-with | 
|  |  | 
|  | # arguments to fx set | 
|  | _arguments '1:arch:{_fx_set__product_board}' \ | 
|  | '(:)--auto-dir[Act like `fx --dir out/PRODUCT.BOARD set ...`]' \ | 
|  | '(:)--with[Packages to include in the universe]:packages:_fx_set__with' \ | 
|  | '(:)--with-base[Additional packages to include in the base]:packages:_fx_set__with' \ | 
|  | '(:)*--variant[Pass a select_variant GN arg]: ' \ | 
|  | '(:)*--fuzz-with[A sanitizer name to fuzz with]: ' \ | 
|  | '(:)*--args[Arguments for GN gen]:args:{_fx_set___gn_arg_equals}' \ | 
|  | '(:)--help-args[Display GN argument documentation]:arg:{_fx_set__gn_arg_name}' \ | 
|  | '(:)--goma[Use GOMA]' \ | 
|  | "(:)--no-goma[Don't use GOMA]" \ | 
|  | "(:)--no-ensure-goma[Don't make sure GOMA is running]" \ | 
|  | '(:)--goma-dir[GOMA directory to use]:directory:_files -/' \ | 
|  | "(:)--ccache[Use ccache]" \ | 
|  | "(:)--no-ccache[Don't use ccache]" \ | 
|  | '(:)--ide[Generate files for an IDE]:ide:(eclipse vs vs2013 vs2015 vs2017 xcode qcreator json)' \ | 
|  | '(:)--release[Release build]' | 
|  |  |