Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. # Please add "source /path/to/bash-autocomplete.sh" to your .bashrc to use this.
  2.  
  3. _clang_filedir()
  4. {
  5.   # _filedir function provided by recent versions of bash-completion package is
  6.   # better than "compgen -f" because the former honors spaces in pathnames while
  7.   # the latter doesn't. So we use compgen only when _filedir is not provided.
  8.   _filedir 2> /dev/null || COMPREPLY=( $( compgen -f ) )
  9. }
  10.  
  11. _clang()
  12. {
  13.   local cur prev words cword arg flags w1 w2
  14.   # If latest bash-completion is not supported just initialize COMPREPLY and
  15.   # initialize variables by setting manually.
  16.   _init_completion -n 2> /dev/null
  17.   if [[ "$?" != 0 ]]; then
  18.     COMPREPLY=()
  19.     cword=$COMP_CWORD
  20.     cur="${COMP_WORDS[$cword]}"
  21.   fi
  22.  
  23.   w1="${COMP_WORDS[$cword - 1]}"
  24.   if [[ $cword > 1 ]]; then
  25.     w2="${COMP_WORDS[$cword - 2]}"
  26.   fi
  27.  
  28.   # Pass all the current command-line flags to clang, so that clang can handle
  29.   # these internally.
  30.   # '=' is separated differently by bash, so we have to concat them without ','
  31.   for i in `seq 1 $cword`; do
  32.     if [[ $i == $cword || "${COMP_WORDS[$(($i+1))]}" == '=' ]]; then
  33.       arg="$arg${COMP_WORDS[$i]}"
  34.     else
  35.       arg="$arg${COMP_WORDS[$i]},"
  36.     fi
  37.   done
  38.  
  39.   # expand ~ to $HOME
  40.   eval local path=${COMP_WORDS[0]}
  41.   # Use $'\t' so that bash expands the \t for older versions of sed.
  42.   flags=$( "$path" --autocomplete="$arg" 2>/dev/null | sed -e $'s/\t.*//' )
  43.   # If clang is old that it does not support --autocomplete,
  44.   # fall back to the filename completion.
  45.   if [[ "$?" != 0 ]]; then
  46.     _clang_filedir
  47.     return
  48.   fi
  49.  
  50.   # When clang does not emit any possible autocompletion, or user pushed tab after " ",
  51.   # just autocomplete files.
  52.   if [[ "$flags" == "$(echo -e '\n')" ]]; then
  53.     # If -foo=<tab> and there was no possible values, autocomplete files.
  54.     [[ "$cur" == '=' || "$cur" == -*= ]] && cur=""
  55.     _clang_filedir
  56.   elif [[ "$cur" == '=' ]]; then
  57.     COMPREPLY=( $( compgen -W "$flags" -- "") )
  58.   else
  59.     # Bash automatically appends a space after '=' by default.
  60.     # Disable it so that it works nicely for options in the form of -foo=bar.
  61.     [[ "${flags: -1}" == '=' ]] && compopt -o nospace 2> /dev/null
  62.     COMPREPLY=( $( compgen -W "$flags" -- "$cur" ) )
  63.   fi
  64. }
  65. complete -F _clang clang
  66.