# This function was taken from github.com/Carthage/Carthage/blob/master/Source/Scripts/carthage-fish-completion function __fish_fastlane_needs_subcommand

set cmd (commandline -opc)
if [ (count $cmd) -eq 1 -a $cmd[1] = 'fastlane' ]
  return 0
end
  return 1

end

if test -e “Fastfile”

set file "Fastfile"

else if test -e “fastlane/Fastfile”

set file "fastlane/Fastfile"

else if test -e “.fastlane/Fastfile”

set file ".fastlane/Fastfile"

else

exit 1

end

set commands (string match –regex '.*lane\ :(?!private_)(*)\ do' (cat $file))

set commands_string

# Fish returns the fully matched string, plus the capture group. The actual captured value # is every other line, starting at line 2. set use_command false

for line in $commands

if [ $use_command = true ]
  set commands_string "$commands_string $line"
  set use_command false
else
  set use_command true
end

end

set commands_string “$commands_string update_fastlane”

complete -c fastlane -n '__fish_fastlane_needs_subcommand' -a (string trim $commands_string) -f