Merge pull request #16880 from dduugg/args-compiler

Add tapioca compiler for Homebrew::CLI::Args
This commit is contained in:
Douglas Eichelberger 2024-03-14 11:50:07 -07:00 committed by GitHub
commit a3e5e3f7a0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 1066 additions and 382 deletions

View File

@ -1,364 +0,0 @@
# typed: strict
module Homebrew
module CLI
class Args < OpenStruct
sig { returns(T::Boolean) }
def remove_bottle_block?; end
sig { returns(T::Boolean) }
def strict?; end
sig { returns(T::Boolean) }
def HEAD?; end
sig { returns(T::Boolean) }
def include_test?; end
sig { returns(T::Boolean) }
def build_bottle?; end
sig { returns(T::Boolean) }
def build_universal?; end
sig { returns(T::Boolean) }
def build_from_source?; end
sig { returns(T::Boolean) }
def force_bottle?; end
sig { returns(T::Boolean) }
def newer_only?; end
sig { returns(T::Boolean) }
def resources?; end
sig { returns(T::Boolean) }
def full_name?; end
sig { returns(T::Boolean) }
def json?; end
sig { returns(T::Boolean) }
def debug?; end
sig { returns(T::Boolean) }
def quiet?; end
sig { returns(T::Boolean) }
def verbose?; end
sig { returns(T::Boolean) }
def fetch_HEAD?; end
sig { returns(T::Boolean) }
def cask?; end
sig { returns(T::Boolean) }
def dry_run?; end
sig { returns(T::Boolean) }
def skip_cask_deps?; end
sig { returns(T::Boolean) }
def greedy?; end
sig { returns(T::Boolean) }
def force?; end
sig { returns(T::Boolean) }
def ignore_pinned?; end
sig { returns(T::Boolean) }
def display_times?; end
sig { returns(T::Boolean) }
def formula?; end
sig { returns(T::Boolean) }
def zap?; end
sig { returns(T::Boolean) }
def ignore_dependencies?; end
sig { returns(T::Boolean) }
def aliases?; end
sig { returns(T::Boolean) }
def fix?; end
sig { returns(T::Boolean) }
def keep_tmp?; end
sig { returns(T::Boolean) }
def debug_symbols?; end
sig { returns(T::Boolean) }
def overwrite?; end
sig { returns(T::Boolean) }
def silent?; end
sig { returns(T::Boolean) }
def repair?; end
sig { returns(T::Boolean) }
def prune_prefix?; end
sig { returns(T::Boolean) }
def upload?; end
sig { returns(T::Boolean) }
def linux?; end
sig { returns(T::Boolean) }
def linux_self_hosted?; end
sig { returns(T::Boolean) }
def linux_wheezy?; end
sig { returns(T::Boolean) }
def total?; end
sig { returns(T::Boolean) }
def dependents?; end
sig { returns(T::Boolean) }
def installed?; end
sig { returns(T::Boolean) }
def installed_on_request?; end
sig { returns(T::Boolean) }
def installed_as_dependency?; end
sig { returns(T::Boolean) }
def all?; end
sig { returns(T::Boolean) }
def eval_all?; end
sig { returns(T::Boolean) }
def full?; end
sig { returns(T::Boolean) }
def list_pinned?; end
sig { returns(T::Boolean) }
def display_cop_names?; end
sig { returns(T::Boolean) }
def syntax?; end
sig { returns(T::Boolean) }
def no_simulate?; end
sig { returns(T::Boolean) }
def ignore_non_pypi_packages?; end
sig { returns(T::Boolean) }
def test?; end
sig { returns(T::Boolean) }
def reverse?; end
sig { returns(T::Boolean) }
def print_only?; end
sig { returns(T::Boolean) }
def markdown?; end
sig { returns(T::Boolean) }
def reset_cache?; end
sig { returns(T::Boolean) }
def major?; end
sig { returns(T::Boolean) }
def minor?; end
sig { returns(T.nilable(String)) }
def bottle_tag; end
sig { returns(T.nilable(String)) }
def tag; end
sig { returns(T.nilable(String)) }
def tap; end
sig { returns(T.nilable(T::Array[String])) }
def macos; end
sig { returns(T.nilable(T::Array[String])) }
def hide; end
sig { returns(T.nilable(String)) }
def version; end
sig { returns(T.nilable(String)) }
def name; end
sig { returns(T::Boolean) }
def no_publish?; end
sig { returns(T::Boolean) }
def shallow?; end
sig { returns(T::Boolean) }
def fail_if_not_changed?; end
sig { returns(T::Boolean) }
def no_pull_requests?; end
sig { returns(T::Boolean) }
def no_fork?; end
sig { returns(T::Boolean) }
def open_pr?; end
sig { returns(T.nilable(String)) }
def limit; end
sig { returns(T.nilable(String)) }
def start_with; end
sig { returns(T.nilable(String)) }
def message; end
sig { returns(T.nilable(String)) }
def timeout; end
sig { returns(T.nilable(String)) }
def issue; end
sig { returns(T.nilable(String)) }
def workflow; end
sig { returns(T.nilable(String)) }
def package_name; end
sig { returns(T.nilable(String)) }
def prune; end
sig { returns(T.nilable(T::Array[String])) }
def only_cops; end
sig { returns(T.nilable(T::Array[String])) }
def except_cops; end
sig { returns(T.nilable(T::Array[String])) }
def only; end
sig { returns(T.nilable(String)) }
def os; end
sig { returns(T.nilable(T::Array[String])) }
def except; end
sig { returns(T.nilable(T::Array[String])) }
def mirror; end
sig { returns(T.nilable(T::Array[String])) }
def without_labels; end
sig { returns(T.nilable(T::Array[String])) }
def workflows; end
sig { returns(T.nilable(T::Array[String])) }
def ignore_missing_artifacts; end
sig { returns(T.nilable(T::Array[String])) }
def language; end
sig { returns(T.nilable(T::Array[String])) }
def extra_packages; end
sig { returns(T.nilable(T::Array[String])) }
def exclude_packages; end
sig { returns(T.nilable(T::Array[String])) }
def update; end
sig { returns(T::Boolean) }
def s?; end
sig { returns(T.nilable(String)) }
def arch; end
sig { returns(T.nilable(String)) }
def appdir; end
sig { returns(T.nilable(String)) }
def keyboard_layoutdir; end
sig { returns(T.nilable(String)) }
def fontdir; end
sig { returns(T.nilable(String)) }
def colorpickerdir; end
sig { returns(T.nilable(String)) }
def prefpanedir; end
sig { returns(T.nilable(String)) }
def qlplugindir; end
sig { returns(T.nilable(String)) }
def dictionarydir; end
sig { returns(T.nilable(String)) }
def servicedir; end
sig { returns(T.nilable(String)) }
def input_methoddir; end
sig { returns(T.nilable(String)) }
def mdimporterdir; end
sig { returns(T.nilable(String)) }
def internet_plugindir; end
sig { returns(T.nilable(String)) }
def audio_unit_plugindir; end
sig { returns(T.nilable(String)) }
def vst_plugindir; end
sig { returns(T.nilable(String)) }
def vst3_plugindir; end
sig { returns(T.nilable(String)) }
def screen_saverdir; end
sig { returns(T::Array[String]) }
def repositories; end
sig { returns(T.nilable(String)) }
def from; end
sig { returns(T.nilable(String)) }
def to; end
sig { returns(T.nilable(T::Array[String])) }
def groups; end
sig { returns(T::Boolean) }
def write_only?; end
sig { returns(T::Boolean) }
def custom_remote?; end
sig { returns(T::Boolean) }
def print_path?; end
sig { returns(T.nilable(T::Boolean)) }
def force_auto_update?; end
sig { returns(T::Boolean) }
def csv?; end
sig { returns(T.nilable(String)) }
def user; end
end
end
end

View File

@ -0,0 +1,898 @@
# typed: true
# DO NOT EDIT MANUALLY
# This is an autogenerated file for dynamic methods in `Homebrew::CLI::Args`.
# Please instead update this file by running `bin/tapioca dsl Homebrew::CLI::Args`.
class Homebrew::CLI::Args
sig { returns(T::Boolean) }
def D?; end
sig { returns(T::Boolean) }
def HEAD?; end
sig { returns(T.nilable(T::Array[String])) }
def add_groups; end
sig { returns(T::Boolean) }
def adopt?; end
sig { returns(T::Boolean) }
def aliases?; end
sig { returns(T::Boolean) }
def all_supported?; end
sig { returns(T::Boolean) }
def analytics?; end
sig { returns(T::Boolean) }
def annotate?; end
sig { returns(T.nilable(String)) }
def appdir; end
sig { returns(T.nilable(String)) }
def arch; end
sig { returns(T::Boolean) }
def archlinux?; end
sig { returns(T.nilable(String)) }
def artifact; end
sig { returns(T.nilable(String)) }
def audio_unit_plugindir; end
sig { returns(T::Boolean) }
def audit_debug?; end
sig { returns(T::Boolean) }
def auto_update?; end
sig { returns(T::Boolean) }
def autosquash?; end
sig { returns(T::Boolean) }
def autotools?; end
sig { returns(T.nilable(String)) }
def before; end
sig { returns(T::Boolean) }
def binaries?; end
sig { returns(T.nilable(String)) }
def bottle_arch; end
sig { returns(T.nilable(String)) }
def bottle_tag; end
sig { returns(T.nilable(String)) }
def branch; end
sig { returns(T::Boolean) }
def branch_okay?; end
sig { returns(T::Boolean) }
def build_bottle?; end
sig { returns(T::Boolean) }
def build_from_source?; end
sig { returns(T::Boolean) }
def byebug?; end
sig { returns(T.nilable(String)) }
def c; end
sig { returns(T::Boolean) }
def cached?; end
sig { returns(T::Boolean) }
def cask?; end
sig { returns(T::Boolean) }
def casks?; end
sig { returns(T.nilable(String)) }
def category; end
sig { returns(T.nilable(String)) }
def cc; end
sig { returns(T::Boolean) }
def changed?; end
sig { returns(T::Boolean) }
def clean?; end
sig { returns(T::Boolean) }
def closed?; end
sig { returns(T::Boolean) }
def cmake?; end
sig { returns(T.nilable(String)) }
def cmd; end
sig { returns(T.nilable(String)) }
def colorpickerdir; end
sig { returns(T.nilable(String)) }
def command; end
sig { returns(T.nilable(String)) }
def commit; end
sig { returns(T::Boolean) }
def commit?; end
sig { returns(T.nilable(String)) }
def committer; end
sig { returns(T::Boolean) }
def compact?; end
sig { returns(T::Boolean) }
def coverage?; end
sig { returns(T::Boolean) }
def crystal?; end
sig { returns(T::Boolean) }
def csv?; end
sig { returns(T::Boolean) }
def custom_remote?; end
sig { returns(T::Boolean) }
def d?; end
sig { returns(T.nilable(String)) }
def days; end
sig { returns(T::Boolean) }
def debian?; end
sig { returns(T::Boolean) }
def debug?; end
sig { returns(T::Boolean) }
def debug_symbols?; end
sig { returns(T::Boolean) }
def declared?; end
sig { returns(T::Boolean) }
def dependents?; end
sig { returns(T::Boolean) }
def deps?; end
sig { returns(T::Boolean) }
def desc?; end
sig { returns(T::Boolean) }
def description?; end
sig { returns(T.nilable(String)) }
def destdir; end
sig { returns(T.nilable(String)) }
def dictionarydir; end
sig { returns(T.nilable(String)) }
def dir; end
sig { returns(T::Boolean) }
def direct?; end
sig { returns(T::Boolean) }
def display_cop_names?; end
sig { returns(T::Boolean) }
def display_filename?; end
sig { returns(T::Boolean) }
def display_times?; end
sig { returns(T::Boolean) }
def dot?; end
sig { returns(T::Boolean) }
def dry_run?; end
sig { returns(T.nilable(String)) }
def e; end
sig { returns(T.nilable(String)) }
def env; end
sig { returns(T::Boolean) }
def eval_all?; end
sig { returns(T::Boolean) }
def examples?; end
sig { returns(T.nilable(T::Array[String])) }
def except; end
sig { returns(T.nilable(T::Array[String])) }
def except_cops; end
sig { returns(T.nilable(T::Array[String])) }
def exclude_packages; end
sig { returns(T.nilable(T::Array[String])) }
def extra_packages; end
sig { returns(T::Boolean) }
def f?; end
sig { returns(T::Boolean) }
def fail_fast?; end
sig { returns(T::Boolean) }
def fedora?; end
sig { returns(T::Boolean) }
def fetch_HEAD?; end
sig { returns(T.nilable(String)) }
def file; end
sig { returns(T::Boolean) }
def fink?; end
sig { returns(T::Boolean) }
def fix?; end
sig { returns(T.nilable(String)) }
def fontdir; end
sig { returns(T::Boolean) }
def for_each?; end
sig { returns(T::Boolean) }
def force?; end
sig { returns(T.nilable(String)) }
def force_auto_update?; end
sig { returns(T::Boolean) }
def force_bottle?; end
sig { returns(T::Boolean) }
def force_core_tap?; end
sig { returns(T.nilable(String)) }
def fork_org; end
sig { returns(T::Boolean) }
def formula?; end
sig { returns(T::Boolean) }
def formulae?; end
sig { returns(T.nilable(String)) }
def from; end
sig { returns(T::Boolean) }
def full_name?; end
sig { returns(T::Boolean) }
def g?; end
sig { returns(T::Boolean) }
def generic?; end
sig { returns(T::Boolean) }
def git?; end
sig { returns(T::Boolean) }
def github?; end
sig { returns(T::Boolean) }
def github_packages?; end
sig { returns(T::Boolean) }
def github_packages_downloads?; end
sig { returns(T::Boolean) }
def go?; end
sig { returns(T::Boolean) }
def graph?; end
sig { returns(T::Boolean) }
def greedy?; end
sig { returns(T::Boolean) }
def greedy_auto_updates?; end
sig { returns(T::Boolean) }
def greedy_latest?; end
sig { returns(T.nilable(T::Array[String])) }
def groups; end
sig { returns(T::Boolean) }
def h?; end
sig { returns(T::Boolean) }
def help?; end
sig { returns(T.nilable(T::Array[String])) }
def hide; end
sig { returns(T::Boolean) }
def i?; end
sig { returns(T.nilable(String)) }
def ignore; end
sig { returns(T::Boolean) }
def ignore_dependencies?; end
sig { returns(T::Boolean) }
def ignore_failures?; end
sig { returns(T.nilable(T::Array[String])) }
def ignore_missing_artifacts; end
sig { returns(T::Boolean) }
def ignore_non_pypi_packages?; end
sig { returns(T::Boolean) }
def ignore_pinned?; end
sig { returns(T::Boolean) }
def include_aliases?; end
sig { returns(T::Boolean) }
def include_build?; end
sig { returns(T::Boolean) }
def include_optional?; end
sig { returns(T::Boolean) }
def include_requirements?; end
sig { returns(T::Boolean) }
def include_test?; end
sig { returns(T.nilable(String)) }
def input_methoddir; end
sig { returns(T::Boolean) }
def install_dependencies?; end
sig { returns(T::Boolean) }
def installed?; end
sig { returns(T::Boolean) }
def installed_as_dependency?; end
sig { returns(T::Boolean) }
def installed_on_request?; end
sig { returns(T::Boolean) }
def interactive?; end
sig { returns(T.nilable(String)) }
def internet_plugindir; end
sig { returns(T.nilable(String)) }
def issue; end
sig { returns(T.nilable(String)) }
def json; end
sig { returns(T::Boolean) }
def json?; end
sig { returns(T::Boolean) }
def keep_old?; end
sig { returns(T::Boolean) }
def keep_tmp?; end
sig { returns(T.nilable(String)) }
def keyboard_layoutdir; end
sig { returns(T::Boolean) }
def l?; end
sig { returns(T.nilable(T::Array[String])) }
def language; end
sig { returns(T::Boolean) }
def large_runner?; end
sig { returns(T.nilable(String)) }
def limit; end
sig { returns(T::Boolean) }
def linux?; end
sig { returns(T::Boolean) }
def linux_self_hosted?; end
sig { returns(T::Boolean) }
def linux_wheezy?; end
sig { returns(T::Boolean) }
def list_checks?; end
sig { returns(T::Boolean) }
def lost?; end
sig { returns(T.nilable(T::Array[String])) }
def macos; end
sig { returns(T::Boolean) }
def macports?; end
sig { returns(T::Boolean) }
def major?; end
sig { returns(T.nilable(String)) }
def max_count; end
sig { returns(T.nilable(String)) }
def mdimporterdir; end
sig { returns(T::Boolean) }
def merge?; end
sig { returns(T::Boolean) }
def meson?; end
sig { returns(T.nilable(String)) }
def message; end
sig { returns(T::Boolean) }
def minor?; end
sig { returns(T.nilable(T::Array[String])) }
def mirror; end
sig { returns(T::Boolean) }
def missing?; end
sig { returns(T::Boolean) }
def multiple?; end
sig { returns(T.nilable(String)) }
def n; end
sig { returns(T::Boolean) }
def n?; end
sig { returns(T::Boolean) }
def name?; end
sig { returns(T::Boolean) }
def new?; end
sig { returns(T::Boolean) }
def new_cask?; end
sig { returns(T::Boolean) }
def new_formula?; end
sig { returns(T::Boolean) }
def new_issue?; end
sig { returns(T::Boolean) }
def newer_only?; end
sig { returns(T::Boolean) }
def no_all_checks?; end
sig { returns(T::Boolean) }
def no_audit?; end
sig { returns(T::Boolean) }
def no_browse?; end
sig { returns(T::Boolean) }
def no_cherry_pick?; end
sig { returns(T::Boolean) }
def no_commit?; end
sig { returns(T::Boolean) }
def no_fetch?; end
sig { returns(T::Boolean) }
def no_fork?; end
sig { returns(T::Boolean) }
def no_git?; end
sig { returns(T::Boolean) }
def no_pull_requests?; end
sig { returns(T::Boolean) }
def no_rebuild?; end
sig { returns(T::Boolean) }
def no_simulate?; end
sig { returns(T::Boolean) }
def no_style?; end
sig { returns(T::Boolean) }
def no_upload?; end
sig { returns(T::Boolean) }
def node?; end
sig { returns(T::Boolean) }
def non_bundler_gems?; end
sig { returns(T::Boolean) }
def oneline?; end
sig { returns(T::Boolean) }
def online?; end
sig { returns(T.nilable(T::Array[String])) }
def only; end
sig { returns(T.nilable(T::Array[String])) }
def only_cops; end
sig { returns(T::Boolean) }
def only_dependencies?; end
sig { returns(T::Boolean) }
def only_json_tab?; end
sig { returns(T::Boolean) }
def open?; end
sig { returns(T::Boolean) }
def open_pr?; end
sig { returns(T::Boolean) }
def opensuse?; end
sig { returns(T.nilable(String)) }
def os; end
sig { returns(T::Boolean) }
def overwrite?; end
sig { returns(T::Boolean) }
def p?; end
sig { returns(T.nilable(String)) }
def package_name; end
sig { returns(T::Boolean) }
def patch?; end
sig { returns(T::Boolean) }
def perl?; end
sig { returns(T::Boolean) }
def pinned?; end
sig { returns(T::Boolean) }
def plain?; end
sig { returns(T.nilable(String)) }
def prefpanedir; end
sig { returns(T::Boolean) }
def preinstall?; end
sig { returns(T::Boolean) }
def print_only?; end
sig { returns(T::Boolean) }
def print_path?; end
sig { returns(T::Boolean) }
def private?; end
sig { returns(T.nilable(String)) }
def profile; end
sig { returns(T.nilable(String)) }
def prune; end
sig { returns(T::Boolean) }
def prune_prefix?; end
sig { returns(T::Boolean) }
def pry?; end
sig { returns(T::Boolean) }
def publish?; end
sig { returns(T.nilable(String)) }
def pull_label; end
sig { returns(T::Boolean) }
def pull_request?; end
sig { returns(T::Boolean) }
def python?; end
sig { returns(T.nilable(T::Array[String])) }
def python_exclude_packages; end
sig { returns(T.nilable(T::Array[String])) }
def python_extra_packages; end
sig { returns(T.nilable(String)) }
def python_package_name; end
sig { returns(T::Boolean) }
def q?; end
sig { returns(T.nilable(String)) }
def qlplugindir; end
sig { returns(T::Boolean) }
def quarantine?; end
sig { returns(T::Boolean) }
def quiet?; end
sig { returns(T.nilable(String)) }
def r; end
sig { returns(T::Boolean) }
def r?; end
sig { returns(T::Boolean) }
def recursive?; end
sig { returns(T::Boolean) }
def remove_bottle_block?; end
sig { returns(T::Boolean) }
def repair?; end
sig { returns(T::Boolean) }
def repology?; end
sig { returns(T.nilable(T::Array[String])) }
def repositories; end
sig { returns(T::Boolean) }
def require_sha?; end
sig { returns(T::Boolean) }
def reset_cache?; end
sig { returns(T::Boolean) }
def resolve?; end
sig { returns(T::Boolean) }
def resources?; end
sig { returns(T::Boolean) }
def retain_bottle_dir?; end
sig { returns(T::Boolean) }
def retry?; end
sig { returns(T::Boolean) }
def reverse?; end
sig { returns(T.nilable(String)) }
def revision; end
sig { returns(T.nilable(String)) }
def root_url; end
sig { returns(T.nilable(String)) }
def root_url_using; end
sig { returns(T::Boolean) }
def ruby?; end
sig { returns(T::Boolean) }
def rust?; end
sig { returns(T::Boolean) }
def s?; end
sig { returns(T.nilable(String)) }
def screen_saverdir; end
sig { returns(T::Boolean) }
def search?; end
sig { returns(T.nilable(String)) }
def seed; end
sig { returns(T.nilable(String)) }
def servicedir; end
sig { returns(T.nilable(String)) }
def set_license; end
sig { returns(T.nilable(String)) }
def set_name; end
sig { returns(T.nilable(String)) }
def set_version; end
sig { returns(T.nilable(String)) }
def sha256; end
sig { returns(T.nilable(String)) }
def shell; end
sig { returns(T.nilable(String)) }
def signing?; end
sig { returns(T::Boolean) }
def silent?; end
sig { returns(T::Boolean) }
def skip_cask_deps?; end
sig { returns(T::Boolean) }
def skip_post_install?; end
sig { returns(T::Boolean) }
def skip_recommended?; end
sig { returns(T::Boolean) }
def skip_relocation?; end
sig { returns(T::Boolean) }
def skip_style?; end
sig { returns(T::Boolean) }
def stackprof?; end
sig { returns(T.nilable(String)) }
def start_with; end
sig { returns(T::Boolean) }
def stat?; end
sig { returns(T.nilable(String)) }
def state_file; end
sig { returns(T::Boolean) }
def strict?; end
sig { returns(T::Boolean) }
def suggest_typed?; end
sig { returns(T::Boolean) }
def syntax?; end
sig { returns(T::Boolean) }
def t?; end
sig { returns(T.nilable(String)) }
def tag; end
sig { returns(T.nilable(String)) }
def tap; end
sig { returns(T::Boolean) }
def test?; end
sig { returns(T.nilable(String)) }
def timeout; end
sig { returns(T.nilable(String)) }
def to; end
sig { returns(T::Boolean) }
def to_tag?; end
sig { returns(T::Boolean) }
def token_conflicts?; end
sig { returns(T::Boolean) }
def topological?; end
sig { returns(T::Boolean) }
def total?; end
sig { returns(T::Boolean) }
def tree?; end
sig { returns(T::Boolean) }
def u?; end
sig { returns(T::Boolean) }
def ubuntu?; end
sig { returns(T::Boolean) }
def unbrewed?; end
sig { returns(T::Boolean) }
def union?; end
sig { returns(T.nilable(T::Array[String])) }
def update; end
sig { returns(T::Boolean) }
def update?; end
sig { returns(T::Boolean) }
def update_all?; end
sig { returns(T::Boolean) }
def upload?; end
sig { returns(T::Boolean) }
def upload_only?; end
sig { returns(T.nilable(String)) }
def url; end
sig { returns(T.nilable(T::Array[String])) }
def user; end
sig { returns(T::Boolean) }
def v?; end
sig { returns(T::Boolean) }
def variations?; end
sig { returns(T::Boolean) }
def verbose?; end
sig { returns(T.nilable(String)) }
def version; end
sig { returns(T.nilable(String)) }
def version_arm; end
sig { returns(T.nilable(String)) }
def version_intel; end
sig { returns(T::Boolean) }
def versions?; end
sig { returns(T.nilable(String)) }
def vst3_plugindir; end
sig { returns(T.nilable(String)) }
def vst_plugindir; end
sig { returns(T::Boolean) }
def warn_on_upload_failure?; end
sig { returns(T::Boolean) }
def with_hostname?; end
sig { returns(T.nilable(String)) }
def with_label; end
sig { returns(T::Boolean) }
def without_approval?; end
sig { returns(T.nilable(T::Array[String])) }
def without_labels; end
sig { returns(T.nilable(String)) }
def workflow; end
sig { returns(T.nilable(T::Array[String])) }
def workflows; end
sig { returns(T::Boolean) }
def write?; end
sig { returns(T::Boolean) }
def write_only?; end
sig { returns(T::Boolean) }
def zap?; end
end

View File

@ -2,21 +2,3 @@
# This file contains temporary definitions for fixes that have
# been submitted upstream to https://github.com/sorbet/sorbet.
# https://github.com/sorbet/sorbet/pull/7650
class Etc::Group < Struct
sig { returns(Integer) }
def gid; end
sig { returns(T::Array[String]) }
def mem; end
sig { returns(String) }
def name; end
sig { returns(String) }
def passwd; end
end
# https://github.com/sorbet/sorbet/pull/7647
module IRB
sig { params(ap_path: T.nilable(String), argv: T::Array[String]).void }
def self.setup(ap_path, argv: ::ARGV); end
end

View File

@ -0,0 +1,74 @@
# typed: strict
# frozen_string_literal: true
require_relative "../../../global"
module Tapioca
module Compilers
class Args < Tapioca::Dsl::Compiler
# This is ugly, but we're moving to a new interface that will use a consistent DSL
# These are cmd/dev-cmd methods that end in `_args` but are not parsers
NON_PARSER_ARGS_METHODS = T.let([
:formulae_all_installs_from_args,
:reproducible_gnutar_args,
:tar_args,
].freeze, T::Array[Symbol])
# FIXME: Enable cop again when https://github.com/sorbet/sorbet/issues/3532 is fixed.
# rubocop:disable Style/MutableConstant
ConstantType = type_member { { fixed: T.class_of(Homebrew::CLI::Args) } }
# rubocop:enable Style/MutableConstant
sig { override.returns(T::Enumerable[T.class_of(Homebrew::CLI::Args)]) }
def self.gather_constants
# require all the commands to ensure the _arg methods are defined
["cmd", "dev-cmd"].each do |dir|
Dir[File.join(__dir__, "../../../#{dir}", "*.rb")].each { require(_1) }
end
[Homebrew::CLI::Args]
end
sig { override.void }
def decorate
root.create_path(Homebrew::CLI::Args) do |klass|
Homebrew.methods(false).select { _1.end_with?("_args") }.each do |args_method_name|
next if NON_PARSER_ARGS_METHODS.include?(args_method_name)
parser = Homebrew.method(args_method_name).call
comma_array_methods = comma_arrays(parser)
args_table(parser).each do |method_name, value|
# some args are used in multiple commands (this is ok as long as they have the same type)
next if klass.nodes.any? { T.cast(_1, RBI::Method).name.to_sym == method_name }
return_type = get_return_type(method_name, value, comma_array_methods)
klass.create_method(method_name.to_s, return_type:)
end
end
end
end
sig { params(parser: Homebrew::CLI::Parser).returns(T::Hash[Symbol, T.untyped]) }
def args_table(parser)
# we exclude non-args from the table, such as :named and :remaining
parser.instance_variable_get(:@args).instance_variable_get(:@table).except(:named, :remaining)
end
sig { params(parser: Homebrew::CLI::Parser).returns(T::Array[Symbol]) }
def comma_arrays(parser)
parser.instance_variable_get(:@non_global_processed_options)
.filter_map { |k, v| parser.option_to_name(k).to_sym if v == :comma_array }
end
sig { params(method_name: Symbol, value: T.untyped, comma_array_methods: T::Array[Symbol]).returns(String) }
def get_return_type(method_name, value, comma_array_methods)
if comma_array_methods.include?(method_name)
"T.nilable(T::Array[String])"
elsif [true, false].include?(value)
"T::Boolean"
else
"T.nilable(String)"
end
end
end
end
end

View File

@ -0,0 +1,94 @@
# frozen_string_literal: true
# require 'tapioca'
require "tapioca/dsl"
require_relative "../../../../sorbet/tapioca/compilers/args"
RSpec.describe Tapioca::Compilers::Args do
let(:compiler) { described_class.new(Tapioca::Dsl::Pipeline.new(requested_constants: []), RBI::Tree.new, Homebrew) }
let(:list_parser) do
require "cmd/list"
Homebrew.list_args
end
# good testing candidate, bc it has multiple for each of switch, flag, and comma_array args:
let(:update_python_resources_parser) do
require "dev-cmd/update-python-resources"
Homebrew.update_python_resources_args
end
describe "#args_table" do
it "returns a mapping of list args to default values" do
expect(compiler.args_table(list_parser)).to eq({
"1?": false,
cask?: false,
casks?: false,
d?: false,
debug?: false,
formula?: false,
formulae?: false,
full_name?: false,
h?: false,
help?: false,
l?: false,
multiple?: false,
pinned?: false,
q?: false,
quiet?: false,
r?: false,
t?: false,
v?: false,
verbose?: false,
versions?: false,
})
end
it "rreturns a mapping of update-python-resources args to default values" do
expect(compiler.args_table(update_python_resources_parser)).to eq({
d?: false,
debug?: false,
exclude_packages: nil,
extra_packages: nil,
h?: false,
help?: false,
ignore_non_pypi_packages?: false,
install_dependencies?: false,
p?: false,
package_name: nil,
print_only?: false,
q?: false,
quiet?: false,
s?: false,
silent?: false,
v?: false,
verbose?: false,
version: nil,
})
end
end
describe "#comma_arrays" do
it "returns an empty list when there are no comma_array args" do
expect(compiler.comma_arrays(list_parser)).to eq([])
end
it "returns the comma_array args when they exist" do
expect(compiler.comma_arrays(update_python_resources_parser)).to eq([:extra_packages, :exclude_packages])
end
end
describe "#get_return_type" do
let(:comma_arrays) { compiler.comma_arrays(update_python_resources_parser) }
it "returns the correct type for switches" do
expect(compiler.get_return_type(:silent?, false, comma_arrays)).to eq("T::Boolean")
end
it "returns the correct type for flags" do
expect(compiler.get_return_type(:package_name, nil, comma_arrays)).to eq("T.nilable(String)")
end
it "returns the correct type for comma_arrays" do
expect(compiler.get_return_type(:extra_packages, nil, comma_arrays)).to eq("T.nilable(T::Array[String])")
end
end
end