brew/Library/Homebrew/completions.rb

67 lines
1.5 KiB
Ruby
Raw Normal View History

2021-01-08 11:10:24 -05:00
# typed: true
# frozen_string_literal: true
require "utils/link"
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
sig { void }
def link!
Settings.write :linkcompletions, true
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!
Settings.write :linkcompletions, false
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?
Settings.read(:linkcompletions) == "true"
2021-01-08 11:10:24 -05:00
end
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
return if Settings.read(:completionsmessageshown) == "true"
return unless completions_to_link?
T.unsafe(self).ohai "Homebrew completions for external commands are unlinked by default!"
T.unsafe(self).puts <<~EOS
To opt-in to automatically linking external tap shell competion files, run:
brew completions link
Then, follow the directions at #{Formatter.url("https://docs.brew.sh/Shell-Completion")}
EOS
Settings.write :completionsmessageshown, true
end
2021-01-08 11:10:24 -05:00
end