class Fastlane::AutoComplete
Enable tab auto completion
Public Class Methods
execute(args, options)
click to toggle source
This method copies the tab auto completion scripts to the user's home folder, while optionally adding custom commands for which to enable auto complete @param [Array] options An array of all options (e.g. –custom fl)
# File fastlane/lib/fastlane/auto_complete.rb, line 9 def self.execute(args, options) shell = ENV['SHELL'] if shell.end_with?("fish") fish_completions_dir = "~/.config/fish/completions" if UI.interactive? confirm = UI.confirm("This will copy a fish script into #{fish_completions_dir} that provides the command tab completion. If the directory does not exist it will be created. Sound good?") return unless confirm end fish_completions_dir = File.expand_path(fish_completions_dir) FileUtils.mkdir_p(fish_completions_dir) completion_script_path = File.join(Fastlane::ROOT, 'lib', 'assets', 'completions', 'completion.fish') final_completion_script_path = File.join(fish_completions_dir, 'fastlane.fish') FileUtils.cp(completion_script_path, final_completion_script_path) UI.success("Copied! You can now use tab completion for lanes") else fastlane_conf_dir = "~/.fastlane" if UI.interactive? confirm = UI.confirm("This will copy a shell script into #{fastlane_conf_dir} that provides the command tab completion. Sound good?") return unless confirm end # create the ~/.fastlane directory fastlane_conf_dir = File.expand_path(fastlane_conf_dir) FileUtils.mkdir_p(fastlane_conf_dir) # then copy all of the completions files into it from the gem completion_script_path = File.join(Fastlane::ROOT, 'lib', 'assets', 'completions') FileUtils.cp_r(completion_script_path, fastlane_conf_dir) custom_commands = options.custom.to_s.split(',') Fastlane::SHELLS.each do |shell_name| open("#{fastlane_conf_dir}/completions/completion.#{shell_name}", 'a') do |file| default_line_prefix = Helper.bundler? ? "bundle exec " : "" file.puts(self.get_auto_complete_line(shell_name, "#{default_line_prefix}fastlane")) custom_commands.each do |command| auto_complete_line = self.get_auto_complete_line(shell_name, command) next if auto_complete_line.nil? file.puts(auto_complete_line) end end end UI.success("Copied! To use auto complete for fastlane, add the following line to your favorite rc file (e.g. ~/.bashrc)") UI.important(" . ~/.fastlane/completions/completion.sh") UI.success("Don't forget to source that file in your current shell! 🐚") end end
get_auto_complete_line(shell, command)
click to toggle source
Helper
to get the auto complete register script line
# File fastlane/lib/fastlane/auto_complete.rb, line 70 def self.get_auto_complete_line(shell, command) if shell == :bash prefix = "complete -F" elsif shell == :zsh prefix = "compctl -K" else return nil end return "#{prefix} _fastlane_complete #{command}" end