|  | # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
|  | # Use of this source code is governed by a BSD-style license that can be | 
|  | # found in the LICENSE file. | 
|  |  | 
|  | # Flag completion rule for bash. | 
|  | # To load in your shell, "source path/to/this/file". | 
|  |  | 
|  | # Usage examples | 
|  | # ============== | 
|  | # | 
|  | # Browser command line switches: | 
|  | # $ out/gn/chrome --site-per-pro<tab> | 
|  | # $ google-chrome --site-per-pro<tab> | 
|  | # | 
|  | # Test switches (i.e. --gtest_* and --test-launcher-* switches): | 
|  | # $ out/gn/unit_tests --gtest_filt<tab> | 
|  | # $ out/gn/unit_tests --test-launcher-j<tab> | 
|  | # | 
|  | # Web test switches: | 
|  | # $ third_party/blink/tools/run_web_tests.py --additional-driver-f<tab> | 
|  | # $ .../run_web_tests.py --additional-driver-flag=--site-per-pro<tab> | 
|  | # | 
|  | # Blink blink_tool.py sub-commands: | 
|  | # $ third_party/blink/tools/blink_tool.py reb<tab> | 
|  |  | 
|  | if [ -n "$BASH_SOURCE" ]; then | 
|  | # The $BASH_SOURCE variable returns path of current script in bash. | 
|  | chrome_source=$(cd $(dirname $BASH_SOURCE)/.. && pwd) | 
|  | else | 
|  | # This is here for other similar shells, e.g. zsh. | 
|  | chrome_source=$(cd $(dirname $0)/.. && pwd) | 
|  | fi | 
|  |  | 
|  | _chrome_flag() { | 
|  | local cur targets | 
|  | cur="${COMP_WORDS[COMP_CWORD]}" | 
|  | targets=$(cd $chrome_source; \ | 
|  | git ls-files '*switches*' | \ | 
|  | xargs sed -ne 's/^[^/]*"\([^" /]\{1,\}\)".*/--\1/p') | 
|  | COMPREPLY=($(compgen -W "$targets" -- "$cur")) | 
|  | return 0 | 
|  | } | 
|  |  | 
|  | _gtest_flag() { | 
|  | local cur gtest_flags launcher_flags | 
|  | cur="${COMP_WORDS[COMP_CWORD]}" | 
|  | gtest_flags=$(sed -ne 's/^.*FromGTestEnv("\([^" /]\+\)".*$/--gtest_\1/p' \ | 
|  | "$chrome_source/third_party/googletest/src/googletest/src/gtest.cc") | 
|  | chrome_test_launcher_flags=$(sed -ne 's/^[^/]*"\([^" /]\{1,\}\)".*/--\1/p' \ | 
|  | "$chrome_source/base/test/test_switches.cc") | 
|  | COMPREPLY=($( | 
|  | compgen -W "$gtest_flags $chrome_test_launcher_flags" -- "$cur")) | 
|  | return 0 | 
|  | } | 
|  |  | 
|  | _web_test_flag() { | 
|  | local cur targets blinkpy_dir prev_switch | 
|  | cur="${COMP_WORDS[COMP_CWORD]}" | 
|  |  | 
|  | # Complete content_shell switches if appropriate. | 
|  | if [ "${COMP_CWORD}" -gt 2 -a "${COMP_WORDS[COMP_CWORD-1]}" = "=" ] | 
|  | then | 
|  | prev_switch="${COMP_WORDS[COMP_CWORD-2]}" | 
|  | if [ "$prev_switch" = "--additional-drt-flag" -o \ | 
|  | "$prev_switch" = "--additional-driver-flag" ] | 
|  | then | 
|  | targets=$(cd $chrome_source; \ | 
|  | git ls-files 'content/*switches*.cc' | \ | 
|  | xargs sed -ne 's/^[^/]*"\([^" /]\{1,\}\)".*/--\1/p') | 
|  | COMPREPLY=($(compgen -W "$targets" -- "$cur")) | 
|  | return 0 | 
|  | fi | 
|  | fi | 
|  |  | 
|  | # Complete run_web_tests.py switches. | 
|  | blinkpy_dir="$chrome_source/third_party/blink/tools/blinkpy" | 
|  | targets=$(sed -ne 's/^[[:space:]]*"\(--[a-z-]\+\)",[[:space:]]*$/\1/p' \ | 
|  | "$blinkpy_dir/web_tests/run_webkit_tests.py") | 
|  | COMPREPLY=($(compgen -W "$targets" -- "$cur")) | 
|  | return 0 | 
|  | } | 
|  |  | 
|  | _blink_tool_flag() { | 
|  | local cur targets blink_tools_dir | 
|  | cur="${COMP_WORDS[COMP_CWORD]}" | 
|  | blink_tools_dir=$chrome_source/third_party/blink/tools | 
|  | targets=$($blink_tools_dir/blink_tool.py help | grep '^   [a-z]' | \ | 
|  | awk '{ print $1 }') | 
|  | COMPREPLY=($(compgen -W "$targets" -- "$cur")) | 
|  | return 0 | 
|  | } | 
|  |  | 
|  | complete -F _chrome_flag google-chrome | 
|  | complete -F _chrome_flag chrome | 
|  | complete -F _chrome_flag content_shell | 
|  | if [ $(uname) = "Darwin" ] | 
|  | then | 
|  | complete -F _chrome_flag Chromium | 
|  | fi | 
|  |  | 
|  | for gtest_test_executable in $( | 
|  | cd $chrome_source; | 
|  | git ls-files '*/BUILD.gn' | xargs sed -ne 's/^.*test("\([^"]\+\)").*$/\1/p' | 
|  | ); do | 
|  | complete -F _gtest_flag $gtest_test_executable | 
|  | done | 
|  |  | 
|  | complete -F _web_test_flag run_web_tests.py | 
|  | complete -F _blink_tool_flag blink_tool.py |