--- /dev/null
+# (C) 2016 magicant
+
+# Completion script for the "carthage" command.
+# Supports Carthage 0.17.2.
+
+function completion/carthage {
+
+ typeset OPTIONS ARGOPT PREFIX
+ OPTIONS=()
+
+ case ${WORDS[#]} in
+ (1)
+ command -f completion/carthage::completesubcmds
+ ;;
+ (*)
+ typeset subcmd="${WORDS[2]}"
+ if command -vf "completion/carthage::$subcmd:arg" >/dev/null 2>&1; then
+ WORDS=("${WORDS[2,-1]}")
+ command -f "completion/carthage::$subcmd:arg"
+ fi
+ ;;
+ esac
+
+}
+
+function completion/carthage::getbuildoptions {
+ OPTIONS=("$OPTIONS" #>#
+ "--configuration:"
+ "--derived-data:"
+ "--platform:"
+ "--toolchain:"
+ "--verbose"
+ ) #<#
+}
+
+function completion/carthage::getcheckoutoptions {
+ OPTIONS=("$OPTIONS" #>#
+ "--no-use-binaries"
+ "--use-ssh"
+ "--use-submodules"
+ ) #<#
+}
+
+function completion/carthage::getcpoptions {
+ OPTIONS=("$OPTIONS" #>#
+ "--color:"
+ "--project-directory:"
+ ) #<#
+}
+
+function completion/carthage::completeoptarg
+ case $ARGOPT in
+ (-)
+ command -f completion//completeoptions -e
+ ;;
+ (--derived-data|--project-directory)
+ complete -P "$PREFIX" -S / -T -d
+ ;;
+ (--color)
+ complete -P "$PREFIX" always auto never
+ ;;
+ (--configuration)
+ # TODO Complete configuration
+ ;;
+ (--platform)
+ typeset word="${TARGETWORD#"$PREFIX"}"
+ word=${word##*,}
+ PREFIX=${TARGETWORD%"$word"}
+ complete -P "$PREFIX" all Mac iOS watchOS tvOS
+ ;;
+ (--toolchain)
+ # TODO Complete toolchain
+ ;;
+ esac
+
+function completion/carthage::completesubcmds { #>>#
+ complete -P "${PREFIX-}" archive bootstrap build checkout fetch help \
+ outdated update version
+} #<<#
+
+function completion/carthage::completedependencies {
+ # This code can only complete dependencies that have already been
+ # checked out in Carthage/Checkouts. Maybe we could improve candidates
+ # by parsing Cartfile.
+ typeset IFS=/
+ complete -P "$PREFIX" -- $(
+ set -o glob -o nullglob
+ cd -P "./$(git rev-parse --show-cdup)Carthage/Checkouts" \
+ 2>/dev/null || exit
+ candidates=(*/)
+ candidates=("${candidates%/}")
+ printf %s "${candidates[*]}"
+ )
+}
+
+function completion/carthage::archive:arg {
+
+ OPTIONS=( #>#
+ "--output:"
+ ) #<#
+ command -f completion/carthage::getcpoptions
+
+ command -f completion//parseoptions -e
+ case $ARGOPT in
+ ('')
+ # TODO complete framework
+ ;;
+ (--output)
+ complete -P "$PREFIX" -f
+ ;;
+ (*)
+ command -f completion/carthage::completeoptarg
+ ;;
+ esac
+
+}
+
+function completion/carthage::bootstrap:arg {
+
+ OPTIONS=( #>#
+ "--no-build"
+ "--no-checkout"
+ ) #<#
+ command -f completion/carthage::getbuildoptions
+ command -f completion/carthage::getcheckoutoptions
+ command -f completion/carthage::getcpoptions
+
+ command -f completion//parseoptions -e
+ case $ARGOPT in
+ ('')
+ command -f completion/carthage::completedependencies
+ ;;
+ (*)
+ command -f completion/carthage::completeoptarg
+ ;;
+ esac
+
+}
+
+function completion/carthage::build:arg {
+
+ OPTIONS=( #>#
+ "--no-skip-current; build current project as well"
+ ) #<#
+ command -f completion/carthage::getbuildoptions
+ command -f completion/carthage::getcpoptions
+
+ command -f completion//parseoptions -e
+ case $ARGOPT in
+ ('')
+ command -f completion/carthage::completedependencies
+ ;;
+ (*)
+ command -f completion/carthage::completeoptarg
+ ;;
+ esac
+
+}
+
+function completion/carthage::checkout:arg {
+
+ OPTIONS=()
+ command -f completion/carthage::getcheckoutoptions
+ command -f completion/carthage::getcpoptions
+
+ command -f completion//parseoptions -e
+ case $ARGOPT in
+ ('')
+ command -f completion/carthage::completedependencies
+ ;;
+ (*)
+ command -f completion/carthage::completeoptarg
+ ;;
+ esac
+
+}
+
+function completion/carthage::fetch:arg {
+
+ OPTIONS=( #>#
+ "--color:"
+ ) #<#
+
+ command -f completion//parseoptions -e
+ case $ARGOPT in
+ ('')
+ # TODO complete repository
+ ;;
+ (*)
+ command -f completion/carthage::completeoptarg
+ ;;
+ esac
+
+}
+
+function completion/carthage::help:arg {
+ command -f completion/carthage::completesubcmds
+}
+
+function completion/carthage::outdated:arg {
+
+ OPTIONS=( #>#
+ "--use-ssh"
+ "--verbose"
+ ) #<#
+ command -f completion/carthage::getcpoptions
+
+ command -f completion//parseoptions -e
+ case $ARGOPT in
+ (*)
+ command -f completion/carthage::completeoptarg
+ ;;
+ esac
+
+}
+
+function completion/carthage::update:arg {
+ command -f completion/carthage::build:arg "$@"
+}
+
+
+# vim: set ft=sh ts=8 sts=8 sw=8 noet: