# perf completion

function_exists()
{
	declare -F $1 > /dev/null
	return $?
}

function_exists __ltrim_colon_completions ||
__ltrim_colon_completions()
{
	if [[ "$1" == *:* && "$COMP_WORDBREAKS" == *:* ]]; then
		# Remove colon-word prefix from COMPREPLY items
		local colon_word=${1%${1##*:}}
		local i=${#COMPREPLY[*]}
		while [[ $((--i)) -ge 0 ]]; do
			COMPREPLY[$i]=${COMPREPLY[$i]#"$colon_word"}
		done
	fi
}

have perf &&
_perf()
{
	local cur prev cmd

	COMPREPLY=()
	if function_exists _get_comp_words_by_ref; then
		_get_comp_words_by_ref -n : cur prev
	else
		cur=$(_get_cword :)
		prev=${COMP_WORDS[COMP_CWORD-1]}
	fi

	cmd=${COMP_WORDS[0]}

	# List perf subcommands or long options
	if [ $COMP_CWORD -eq 1 ]; then
		if [[ $cur == --* ]]; then
			COMPREPLY=( $( compgen -W '--help --version \
			--exec-path --html-path --paginate --no-pager \
			--perf-dir --work-tree --debugfs-dir' -- "$cur" ) )
		else
			cmds=$($cmd --list-cmds)
			COMPREPLY=( $( compgen -W '$cmds' -- "$cur" ) )
		fi
	# List possible events for -e option
	elif [[ $prev == "-e" && "${COMP_WORDS[1]}" == @(record|stat|top) ]]; then
		evts=$($cmd list --raw-dump)
		COMPREPLY=( $( compgen -W '$evts' -- "$cur" ) )
		__ltrim_colon_completions $cur
	# List long option names
	elif [[ $cur == --* ]];  then
		subcmd=${COMP_WORDS[1]}
		opts=$($cmd $subcmd --list-opts)
		COMPREPLY=( $( compgen -W '$opts' -- "$cur" ) )
	# Fall down to list regular files
	else
		_filedir
	fi
} &&
complete -F _perf perf
