| # Provides auto-completion for swift tools options and for ninja build targets. |
| # |
| # Include this bash source code with the source command, e.g. in your bash ~/.profile file: |
| # source swift-autocomplete.bash |
| |
| _swift_complete() |
| { |
| local tool currentWord prevWord |
| |
| tool="${COMP_WORDS[0]}" |
| currentWord="${COMP_WORDS[COMP_CWORD]}" |
| prevWord="${COMP_WORDS[COMP_CWORD-1]}" |
| |
| if [[ ${currentWord} != -* ]] ; then |
| COMPREPLY=( $(compgen -f "${currentWord}") ) |
| return 0 |
| fi |
| |
| if [[ ${prevWord} == "-Xllvm" ]] ; then |
| # Don't know how to get the help for llvm options automatically. |
| # So we use a grep'ed static list. |
| COMPREPLY=( $(compgen -W "\ |
| -disable-llvm-arc-opts \ |
| -stack-promotion-limit \ |
| -view-cfg-max-columns \ |
| -view-cfg-long-line-behavior \ |
| -view-cfg-remove-use-list-comments \ |
| -view-cfg-only-for-function \ |
| -sil-print-no-color \ |
| -verify-skip-unreachable-must-be-last \ |
| -aa \ |
| -cache-aa-results \ |
| -sil-dump-call-graph \ |
| -sil-dump-call-graph-stats \ |
| -call-graph-file-check-prefix \ |
| -view-loop-regions-max-columns \ |
| -view-loop-regions-long-line-behavior \ |
| -view-loop-regions-remove-use-list-comments \ |
| -view-loop-regions-only-for-function \ |
| -enable-rc-identity-arg-strip \ |
| -enable-loop-arc \ |
| -sil-abcopts-report \ |
| -enable-abcopts \ |
| -enable-abc-hoisting \ |
| -closure-specialize-eliminate-dead-closures \ |
| -enable-copyforwarding \ |
| -enable-destroyhoisting \ |
| -copy-forward-start \ |
| -copy-forward-stop \ |
| -view-cfg-before-cow-for \ |
| -sil-array-props \ |
| -enable-local-store-dse \ |
| -enable-global-redundant-load-elim \ |
| -sil-looprotate \ |
| -sil-view-cfg \ |
| -sil-view-guaranteed-cfg \ |
| -sil-view-silgen-cfg \ |
| -sil-print-all \ |
| -sil-print-pass-name \ |
| -sil-print-pass-time \ |
| -sil-opt-pass-count \ |
| -sil-print-only-function \ |
| -sil-print-only-functions \ |
| -sil-print-before \ |
| -sil-print-after \ |
| -sil-print-around \ |
| -sil-disable-pass \ |
| -sil-verify-without-invalidation \ |
| -sil-inline-test-threshold \ |
| -sil-inline-test \ |
| -sroa-args-remove-dead-args-after \ |
| -ml \ |
| -sil-print-escapes \ |
| -sil-print-side-effects \ |
| -debug-only \ |
| " -- ${currentWord}) ) |
| else |
| frontendOption="" |
| if [[ ${prevWord} == "-Xfrontend" ]] || echo ${COMP_WORDS[@]} | grep --quiet -e '-frontend' ; then |
| frontendOption="-frontend" |
| fi |
| options=`${tool} ${frontendOption} -help-hidden 2>/dev/null | grep '^ *-[a-zA-Z-]' | sed -E 's/^ *(-[a-zA-Z=-]+).*/\1/'` |
| COMPREPLY=( $(compgen -W "${options}" -- ${currentWord}) ) |
| fi |
| return 0 |
| } |
| |
| _ninja_complete() |
| { |
| local currentWord prevWord |
| |
| tool="${COMP_WORDS[0]}" |
| currentWord="${COMP_WORDS[COMP_CWORD]}" |
| prevWord="${COMP_WORDS[COMP_CWORD-1]}" |
| |
| if [[ ${prevWord} == -[Cfjlkdt] ]] ; then |
| COMPREPLY=( $(compgen -f ${currentWord}) ) |
| return 0 |
| fi |
| |
| targets=`${tool} -t targets 2>/dev/null | grep -v -e '\.' -e 'swift[A-Z]' -e 'cmake_order' | sed s/:.*//` |
| COMPREPLY=( $(compgen -W "${targets}" -- ${currentWord}) ) |
| return 0 |
| } |
| |
| complete -F _swift_complete swiftc |
| complete -F _swift_complete swift |
| complete -F _swift_complete sil-opt |
| complete -F _swift_complete sil-func-extractor |
| complete -F _swift_complete swift-demangle |
| complete -F _swift_complete swift-llvm-opt |
| complete -F _swift_complete swift-ide-test |
| complete -F _swift_complete swift-ios-test |
| complete -F _swift_complete swift-sdk-analyzer |
| complete -F _swift_complete swift-stdlib-tool |
| complete -F _swift_complete lldb-moduleimport-test |
| complete -F _ninja_complete ninja |
| |