Bash Completion[1] scripts are what provide this feature; perhaps fewer Linux distributions are including them. I recommend keeping them in your dotfiles[2] and loading them in your .bashrc[3]. This is nice because Bash Completion operates by filename, meaning you can take any project's bash completion script and install it at `$bash_completion/completions/script-name`.
[1] http://bash-completion.alioth.debian.org/
[2] https://github.com/oinksoft/dotfiles/tree/master/lib/bash-co...
[3] https://github.com/oinksoft/dotfiles/blob/master/bashrc#L22-...