Class: Homebrew::Bundle::VscodeExtension Private

Inherits:
Extension show all
Defined in:
bundle/extensions/vscode_extension.rb

This class is part of a private API. This class may only be used in the Homebrew/brew repository. Third parties should avoid using this class if possible, as it may be removed or changed without warning.

Constant Summary collapse

EXTENSION_ID_REGEX =

This constant is part of a private API. This constant may only be used in the Homebrew/brew repository. Third parties should avoid using this constant if possible, as it may be removed or changed without warning.

/\A[a-z0-9][a-z0-9-]*\.[a-z0-9][a-z0-9._-]*\z/i

Class Method Summary collapse

Methods inherited from Extension

add_supported?, check, cleanup_disable_description, cleanup_disable_env, cleanup_item_name, cleanup_supported?, disable_predicate_method, dump, dump_disable_description, dump_disable_env, dump_disable_predicate_method, dump_disable_supported?, dump_entry, dump_name, dump_output, dump_supported?, dump_with, ensure_package_manager_installed!, entry, #failure_reason, flag, inherited, install_supported?, install_verb, #installed_and_up_to_date?, legacy_check_step, package_description, package_manager_env, package_manager_executable!, package_manager_installed?, package_manager_name, predicate_method, quote, remove_supported?, switch_description, uninstall_package!, with_package_manager_env

Methods inherited from PackageType

check, #checkable_entries, dump, dump_output, dump_supported?, #exit_early_check, #failure_reason, #find_actionable, #format_checkable, #full_check, inherited, install_supported?, install_verb, #installed_and_up_to_date?

Class Method Details

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



19
# File 'bundle/extensions/vscode_extension.rb', line 19

def banner_name = "VSCode (and forks/variants) extensions"

.batch_installable?(_name, _options = {}) ⇒ Boolean

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Parameters:

Returns:

  • (Boolean)


48
49
50
# File 'bundle/extensions/vscode_extension.rb', line 48

def batch_installable?(_name, _options = {})
  true
end

.check_labelString

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



16
# File 'bundle/extensions/vscode_extension.rb', line 16

def check_label = "VSCode Extension"

.cleanup!(extensions) ⇒ void

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

This method returns an undefined value.

Parameters:



188
189
190
191
192
193
194
195
# File 'bundle/extensions/vscode_extension.rb', line 188

def cleanup!(extensions)
  vscode = package_manager_executable
  return if vscode.nil?

  extensions.each do |extension|
    Kernel.system(vscode.to_s, "--uninstall-extension", extension)
  end
end

.cleanup_headingString?

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



28
29
30
# File 'bundle/extensions/vscode_extension.rb', line 28

def cleanup_heading
  "VSCode extensions"
end

.cleanup_items(entries) ⇒ Array<String>

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Parameters:

Returns:



176
177
178
179
180
181
182
183
184
185
# File 'bundle/extensions/vscode_extension.rb', line 176

def cleanup_items(entries)
  kept_extensions = entries.filter_map do |entry|
    entry = T.cast(entry, Dsl::Entry)
    entry.name.downcase if entry.type == type
  end

  return [].freeze if kept_extensions.empty?

  packages - kept_extensions
end

.extensionsArray<String>

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'bundle/extensions/vscode_extension.rb', line 60

def extensions
  extensions = @extensions
  return extensions if extensions

  @extensions = if (vscode = package_manager_executable)
    ENV["WSL_DISTRO_NAME"] = ENV.fetch("HOMEBREW_WSL_DISTRO_NAME", nil)
    Utils.popen_read_text(vscode, "--list-extensions", err: File::NULL)
         .split("\n").map(&:strip).grep(EXTENSION_ID_REGEX).map(&:downcase)
  end
  return [] if @extensions.nil?

  @extensions
end

.install!(name, with: nil, preinstall: true, no_upgrade: false, verbose: false, force: false, **_options) ⇒ Boolean

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Parameters:

  • name (String)
  • with (Array<String>, nil) (defaults to: nil)
  • preinstall (Boolean) (defaults to: true)
  • no_upgrade (Boolean) (defaults to: false)
  • verbose (Boolean) (defaults to: false)
  • force (Boolean) (defaults to: false)
  • _options (Homebrew::Bundle::EntryOption)

Returns:

  • (Boolean)


153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
# File 'bundle/extensions/vscode_extension.rb', line 153

def install!(name, with: nil, preinstall: true, no_upgrade: false, verbose: false, force: false,
             **_options)
  _ = with
  _ = no_upgrade
  _ = force

  return true unless preinstall

  puts "Installing #{name} VSCode extension. It is not currently installed." if verbose
  return false unless install_package!(name, verbose:)

  package = T.cast(package_record(name), String)
  installed_extensions << package unless installed_extensions.include?(package)
  if @extensions
    @extensions << package unless @extensions.include?(package)
  else
    @extensions = [package]
  end

  true
end

.install_batch!(entries, verbose: false) ⇒ Boolean

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Parameters:

Returns:

  • (Boolean)


53
54
55
56
57
# File 'bundle/extensions/vscode_extension.rb', line 53

def install_batch!(entries, verbose: false)
  args = entries.flat_map { |entry| ["--install-extension", entry.name] }

  Bundle.system(package_manager_executable!, *args, verbose:)
end

.install_package!(name, with: nil, verbose: false) ⇒ Boolean

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Parameters:

  • name (String)
  • with (Array<String>, nil) (defaults to: nil)
  • verbose (Boolean) (defaults to: false)

Returns:

  • (Boolean)


136
137
138
139
140
# File 'bundle/extensions/vscode_extension.rb', line 136

def install_package!(name, with: nil, verbose: false)
  _ = with

  Bundle.system(package_manager_executable!, "--install-extension", name, verbose:)
end

.installed_extensionsArray<String>

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



85
86
87
88
89
90
# File 'bundle/extensions/vscode_extension.rb', line 85

def installed_extensions
  installed_extensions = @installed_extensions
  return installed_extensions if installed_extensions

  @installed_extensions = extensions.dup
end

.installed_packagesArray<String>

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



80
81
82
# File 'bundle/extensions/vscode_extension.rb', line 80

def installed_packages
  installed_extensions
end

.package_installed?(name, with: nil) ⇒ Boolean

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Parameters:

Returns:

  • (Boolean)


93
94
95
96
97
# File 'bundle/extensions/vscode_extension.rb', line 93

def package_installed?(name, with: nil)
  _ = with

  installed_extensions.include?(name.downcase)
end

.package_manager_executablePathname?

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



40
41
42
43
44
45
# File 'bundle/extensions/vscode_extension.rb', line 40

def package_manager_executable
  which("code", ORIGINAL_PATHS) ||
    which("codium", ORIGINAL_PATHS) ||
    which("cursor", ORIGINAL_PATHS) ||
    which("code-insiders", ORIGINAL_PATHS)
end

.package_record(name, with: nil) ⇒ Object

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Parameters:

Returns:



33
34
35
36
37
# File 'bundle/extensions/vscode_extension.rb', line 33

def package_record(name, with: nil)
  _ = with

  name.downcase
end

.packagesArray<String>

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



75
76
77
# File 'bundle/extensions/vscode_extension.rb', line 75

def packages
  extensions
end

.preinstall!(name, with: nil, no_upgrade: false, verbose: false, **_options) ⇒ Boolean

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Parameters:

Returns:

  • (Boolean)


108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'bundle/extensions/vscode_extension.rb', line 108

def preinstall!(name, with: nil, no_upgrade: false, verbose: false, **_options)
  _ = with
  _ = no_upgrade

  if !package_manager_installed? && Bundle.cask_installed?
    puts "Installing visual-studio-code. It is not currently installed." if verbose
    Bundle.system(HOMEBREW_BREW_FILE, "install", "--cask", "visual-studio-code", verbose:)
  end

  if package_installed?(name)
    puts "Skipping install of #{name} VSCode extension. It is already installed." if verbose
    return false
  end

  unless package_manager_installed?
    raise "Unable to install #{name} VSCode extension. VSCode is not installed."
  end

  true
end

.reset!void

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

This method returns an undefined value.



22
23
24
25
# File 'bundle/extensions/vscode_extension.rb', line 22

def reset!
  @extensions = T.let(nil, T.nilable(T::Array[String]))
  @installed_extensions = T.let(nil, T.nilable(T::Array[String]))
end

.typeSymbol

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



13
# File 'bundle/extensions/vscode_extension.rb', line 13

def type = :vscode