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

PACKAGE_TYPE =

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.

:vscode
PACKAGE_TYPE_NAME =

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.

"VSCode Extension"
"VSCode (and forks/variants) extensions"
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?, banner_name, check, check_label, 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, entry, #failure_reason, fetchable_name, 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, type, uninstall_package!, with_package_manager_env

Methods inherited from PackageType

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

Class Method Details

.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:



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

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

  Bundle.exchange_uid_if_needed! do
    extensions.each do |extension|
      Kernel.system(vscode.to_s, "--uninstall-extension", extension)
    end
  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:



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

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:



163
164
165
166
167
168
169
170
171
172
# File 'bundle/extensions/vscode_extension.rb', line 163

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:



42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'bundle/extensions/vscode_extension.rb', line 42

def extensions
  extensions = @extensions
  return extensions if extensions

  @extensions = if (vscode = package_manager_executable)
    Bundle.exchange_uid_if_needed! do
      ENV["WSL_DISTRO_NAME"] = ENV.fetch("HOMEBREW_WSL_DISTRO_NAME", nil)
      `"#{vscode}" --list-extensions 2>/dev/null`
    end.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)


140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
# File 'bundle/extensions/vscode_extension.rb', line 140

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_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)


119
120
121
122
123
124
125
126
127
# File 'bundle/extensions/vscode_extension.rb', line 119

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

  vscode = package_manager_executable!

  Bundle.exchange_uid_if_needed! do
    Bundle.system(vscode, "--install-extension", name, verbose:)
  end
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:



68
69
70
71
72
73
# File 'bundle/extensions/vscode_extension.rb', line 68

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:



63
64
65
# File 'bundle/extensions/vscode_extension.rb', line 63

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)


76
77
78
79
80
# File 'bundle/extensions/vscode_extension.rb', line 76

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:



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

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:



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

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:



58
59
60
# File 'bundle/extensions/vscode_extension.rb', line 58

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)


91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'bundle/extensions/vscode_extension.rb', line 91

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.



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

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