119 строки
3.6 KiB
Bash
119 строки
3.6 KiB
Bash
# 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-swift-specific-llvm-optzns \
|
|
-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
|
|
|