/etc/bash_completion.d/modules is in environment-modules 3.2.10-8.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | #
# Bash commandline completion (bash 3.0 and above) for Modules 3.2.10
#
_module_avail() {
	/usr/share/modules/3.2.10/bin/modulecmd bash -t avail 2>&1 | sed '
		/:$/d;
		/:ERROR:/d;
		s#^\(.*\)/\(.\+\)(default)#\1\n\1\/\2#;
		s#/(default)##g;
		s#/*$##g;'
}
_module_not_yet_loaded() {
	comm -23  <(_module_avail|sort)  <(tr : '\n' <<<${LOADEDMODULES}|sort)
}
_module_long_arg_list() {
	local cur="$1" i
	if [[ ${COMP_WORDS[COMP_CWORD-2]} == sw* ]]
	then
		COMPREPLY=( $(compgen -W "$(_module_not_yet_loaded)" -- "$cur") )
		return
	fi
	for ((i = COMP_CWORD - 1; i > 0; i--))
	do case ${COMP_WORDS[$i]} in
	   add|load)
		COMPREPLY=( $(compgen -W "$(_module_not_yet_loaded)" -- "$cur") )
		break;;
	   rm|remove|unload|switch|swap)
		COMPREPLY=( $(IFS=: compgen -W "${LOADEDMODULES}" -- "$cur") )
		break;;
	   esac
	done
}
_module() {
	local cur="$2" prev="$3" cmds opts
	COMPREPLY=()
	cmds="add apropos avail clear display help\
	      initadd initclear initlist initprepend initrm initswitch\
	      keyword list load purge refresh rm show swap switch\
	      unload unuse update use whatis"
	opts="-c -f -h -i -l -s -t -u -v -H -V\
	      --create --force  --help  --human   --icase\
	      --long   --silent --terse --userlvl --verbose --version"
	case "$prev" in
	add|load)	COMPREPLY=( $(compgen -W "$(_module_not_yet_loaded)" -- "$cur") );;
	rm|remove|unload|switch|swap)
			COMPREPLY=( $(IFS=: compgen -W "${LOADEDMODULES}" -- "$cur") );;
	unuse)		COMPREPLY=( $(IFS=: compgen -W "${MODULEPATH}" -- "$cur") );;
	use|*-a*)	;;			# let readline handle the completion
	-u|--userlvl)	COMPREPLY=( $(compgen -W "novice expert advanced" -- "$cur") );;
	display|help|show|whatis)
			COMPREPLY=( $(compgen -W "$(_module_avail)" -- "$cur") );;
	*) if test $COMP_CWORD -gt 2
	   then
		_module_long_arg_list "$cur"
	   else
		case "$cur" in
		# The mappings below are optional abbreviations for convenience
		ls)	COMPREPLY="list";;	# map ls -> list
		r*)	COMPREPLY="rm";;	# also covers 'remove'
		sw*)	COMPREPLY="switch";;
		-*)	COMPREPLY=( $(compgen -W "$opts" -- "$cur") );;
		*)	COMPREPLY=( $(compgen -W "$cmds" -- "$cur") );;
		esac
	   fi;;
	esac
}
complete -o default -F _module module
 |