Class: Fastlane::AutoComplete
- Inherits:
-
Object
- Object
- Fastlane::AutoComplete
- Defined in:
- fastlane/lib/fastlane/auto_complete.rb
Overview
Enable tab auto completion
Class Method Summary collapse
-
.execute(args, options) ⇒ Object
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.
-
.get_auto_complete_line(shell, command) ⇒ Object
Helper to get the auto complete register script line.
Class Method Details
.execute(args, options) ⇒ Object
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
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 |
# File 'fastlane/lib/fastlane/auto_complete.rb', line 9 def self.execute(args, ) 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.(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.(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 = .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) ⇒ Object
Helper to get the auto complete register script line
70 71 72 73 74 75 76 77 78 79 80 |
# 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 |