2021-01-08 11:10:24 -05:00
|
|
|
# typed: true
|
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
require "utils/link"
|
2021-01-12 16:27:25 -05:00
|
|
|
require "settings"
|
2021-01-08 11:10:24 -05:00
|
|
|
|
|
|
|
# Helper functions for generating shell completions.
|
|
|
|
#
|
|
|
|
# @api private
|
|
|
|
module Completions
|
|
|
|
extend T::Sig
|
|
|
|
|
|
|
|
module_function
|
|
|
|
|
2021-01-11 12:24:48 -05:00
|
|
|
sig { void }
|
|
|
|
def link!
|
2021-01-12 16:27:25 -05:00
|
|
|
Settings.write :linkcompletions, true
|
2021-01-11 12:24:48 -05:00
|
|
|
Tap.each do |tap|
|
|
|
|
Utils::Link.link_completions tap.path, "brew completions link"
|
|
|
|
end
|
2021-01-08 11:10:24 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
sig { void }
|
|
|
|
def unlink!
|
2021-01-12 16:27:25 -05:00
|
|
|
Settings.write :linkcompletions, false
|
2021-01-11 12:24:48 -05:00
|
|
|
Tap.each do |tap|
|
|
|
|
next if tap.official?
|
|
|
|
|
|
|
|
Utils::Link.unlink_completions tap.path
|
|
|
|
end
|
2021-01-08 11:10:24 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
sig { returns(T::Boolean) }
|
|
|
|
def link_completions?
|
2021-01-12 16:27:25 -05:00
|
|
|
Settings.read(:linkcompletions) == "true"
|
2021-01-08 11:10:24 -05:00
|
|
|
end
|
|
|
|
|
2021-01-11 12:24:48 -05:00
|
|
|
sig { returns(T::Boolean) }
|
|
|
|
def completions_to_link?
|
|
|
|
shells = %w[bash fish zsh]
|
|
|
|
Tap.each do |tap|
|
|
|
|
next if tap.official?
|
|
|
|
|
|
|
|
shells.each do |shell|
|
|
|
|
return true if (tap.path/"completions/#{shell}").exist?
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
false
|
|
|
|
end
|
|
|
|
|
|
|
|
sig { void }
|
|
|
|
def show_completions_message_if_needed
|
2021-01-12 16:27:25 -05:00
|
|
|
return if Settings.read(:completionsmessageshown) == "true"
|
2021-01-11 12:24:48 -05:00
|
|
|
return unless completions_to_link?
|
|
|
|
|
|
|
|
T.unsafe(self).ohai "Homebrew completions for external commands are unlinked by default!"
|
|
|
|
T.unsafe(self).puts <<~EOS
|
2021-01-12 16:30:29 -05:00
|
|
|
To opt-in to automatically linking external tap shell competion files, run:
|
2021-01-11 12:24:48 -05:00
|
|
|
brew completions link
|
|
|
|
Then, follow the directions at #{Formatter.url("https://docs.brew.sh/Shell-Completion")}
|
|
|
|
EOS
|
|
|
|
|
2021-01-12 16:27:25 -05:00
|
|
|
Settings.write :completionsmessageshown, true
|
2021-01-11 12:24:48 -05:00
|
|
|
end
|
2021-01-08 11:10:24 -05:00
|
|
|
end
|